Автор: Пользователь скрыл имя, 19 Мая 2011 в 12:36, курсовая работа
Целью моей курсовой работы является написание программы, которая рассчитывает знаменательные даты жизни (например 100ый день вашей жизни или 100000ая секунда вашей жизни).
Введение                     4
1 Анализ задания  по курсовой работе                7
1.1 Основные задачи                   7
1.2 Дополнительные  задачи                  7
2 Математическая  модель решаемой проблемы               8
2.1 Расчет знаменательной даты                 8
2.2 Учёт високосных  годов                  8
2.3 Расчёт времени                   8
3 Алгоритмизация  модели решаемой проблемы              9
4 Модульная структура  приложения              11
4.1 Схема работы  приложения               11
4.2 Описание основных  процедур               11
5 Листинг программы                 12
6 Описание процесса  отладки программы             17
7 Тестирование  приложения                18
8 Инструкция  для пользователя приложения             19
Заключение                  21
Список использованной литературы              22
2.2 Учёт високосных 
годов 
Учёт високосных годов один из важнейших этапов поставленной задачи. Потому что каждый 4ый год в феврале становится на 1 день больше, что может повлиять на правильный расчет знаменательной даты без его учёта.
    Для 
того чтобы учитывать високосные 
года, достаточно создать массив, в 
котором будут храниться все 
даты этих годов и если переменная 
года будет совпадать с одним 
из чисел массива, тогда к февралю 
прибавлять двадцать девятый день. 
    2.3 
Расчёт времени 
Для того чтобы рассчитать знаменательную дату с точностью до часа, минуты и секунды необходимо сложить введенную секунду рождения с введенной секундой знаменательной даты. После чего создать цикл при котором от суммы отнимается число 60 (секунд), а к минуте прибавляется 1, но если минута достигает больше числа 60, тогда она обнуляется, а к часу прибавляется единица. Если час становится больше 24, тогда он обнуляется, а к дню прибавляется 1.
Цикл завершается в том случае, когда сумма становится меньше 60, т.е. количества секунд в минуте. Когда завершается цикл, рассчитываются дни/месяца/года и результат выводится на экран.
 
    3 Алгоритмизация 
модели решаемой проблемы 
 
4 Модульная 
структура приложения 
 
    4.1 
Схема работы приложения 
    Рисунок 
1 – Схема работы программы 
    4.2 
Описание основных процедур 
Основные использованные процедуры в данной программе это:
-условия IF;
-циклы FOR;
-массивы;
-метки и переходы на метки GOTO.
 
5 Листинг программы 
 
    #include 
<iostream> 
    using 
namespace std; 
int main()
    {  
    int 
d=0, m=0, y=0, mas[50], v=0, db=0, h=0, min=0, sec=0, hb=0, minb=0, 
secb=0, yb=0, mb=0; 
cout << "Vvedite svoy god rozhdeniya: ";
cin >> yb;
cout << "Vvedite svoy mesyac rozhdeniya: ";
cin >> mb;
cout << "Vvedite svoy den' rozhdeniya: ";
cin >> db;
cout << "Vvedite svoy chas rozhdeniya: ";
cin >> hb;
cout << "Vvedite svoyu minutu rozhdeniya: ";
cin >> minb;
cout << "Vvedite svoyu sekundu rozhdeniya: ";
        
cin >> secb; 
        
cout << "-----------------------------
cout << "TEPER' VVEDITE DANNIE ZNAMENATEL'NOY DATY, KOTORUYU VY HOTITE UZNAT'" << endl;
        
cout << "-----------------------------
cout << "Vvedite god: ";
cin >> y;
cout << "Vvedite mesyac: ";
cin >> m;
cout << "Vvedite den': ";
cin >> d;
cout << "Vvedite chas: ";
cin >> h;
cout << "Vvedite minuty: ";
cin >> min;
cout << "Vvedite sekundy: ";
        
cin >> sec; 
if (y==0)
{
y=1;
}
if (m==0)
{
m=1;
     } 
if (d==0)
{
d=1;
     } 
if (h==0)
{
h=1;
     } 
if (min==0)
{
min=1;
     } 
if (sec==0)
{
sec=1;
     } 
y=y+(yb-1); // расчет дней, месяцев, лет
m=m+(mb-1);
d=d+(db-1);
h=h+(hb-1);
min=min+(minb-1);
        
sec=sec+(secb-1); 
M:
if (h>23) // процедура расчета времени
{
h=h-24;
d++;
    } 
if (min>59)
{
min=min-60;
h++;
    } 
if (sec>59)
{
sec=sec-60;
min++;
goto M;
    } 
for (v=0; v<=49; v++) // цикл високосного года
{
mas[v]=1900+(4*(v+1));
    } 
N:
if (m==1 and d>31)
{
d=d-31;
m++;
    } 
for (v=0; v<=49; v++)
{
if (y==mas[v])
{
if (m==2 and d>29)
{
d=d-29;
m++;
}
goto L;
}
    } 
for (v=0; v<=49; v++)
{
if (y!=mas[v])
{
if (m==2 and d>28)
{
d=d-28;
m++;
}
}
}
L:
if (m==3 and d>31)
{
d=d-31;
m++;
    } 
if (m==4 and d>30)
{
d=d-30;
m++;
    } 
if (m==5 and d>31)
{
d=d-31;
m++;
    } 
if (m==6 and d>30)
{
d=d-30;
m++;
    } 
if (m==7 and d>31)
{
d=d-31;
m++;
    } 
if (m==8 and d>31)
{
d=d-31;
m++;
    } 
if (m==9 and d>30)
{
d=d-30;
m++;
    } 
if (m==10 and d>31)
{
d=d-31;
m++;
    } 
if (m==11 and d>30)
{
d=d-30;
m++;
    } 
if (m==12 and d>31)
{
d=d-31;
m++;
    } 
if (m>12 and d>1)
{
y++;
m=1;
goto N;
    } 
        
cout << "-----------------------------
cout << "Data: " << d << "." << m << "." << y << endl;
cout << "Vremya: " << h << ":" << min << ":" << sec << endl;
        
cout << "-----------------------------
return 0;
}
 
6 Описание 
процесса отладки программы 
 
for (v=0; v<=49; v++)
{
if (y==mas[v])
{
if (m==2 and d>29)
{
d=d-29;
m++;
}
goto L;
}
    } 
for (v=0; v<=49; v++)
{
if (y!=mas[v])
{
if (m==2 and d>28)
{
d=d-28;
m++;
}
}
}
    L: 
Одна из ошибок разрабатываемой программы. Программа рассчитывала дату, не учитывая високосные года.
В результате Проблема была решена при помощи метки (L). Если выполняется цикл с високосным годом, т.е. с учетом двадцати девяти дней в феврале, тогда не должен выполняться цикл с двадцати-восьмидневным февралем.
Поэтому при выполнении цикла с високосным одом (двадцати-девятидневным февралем) по окончанию цикла программа переходит на метку L, перескакивая цикл с двадцати-восьмидневным февралем.
 
    7 Тестирование 
приложения 
 
Рисунок 
2 – Тестирование программы 
Введены данные 
рождения пользователя: 
Год: 1991
Месяц: 1 (январь)
День: 4
Время: 6:00:00 
 
Введены данные 
расчета знаменательной даты: 
Год: 10ый
Месяц: 100ый
День: 1000ый
Час: 10000ый
Минута: 100000ая
Секунда: 1000000ая 
Результат: 
Десятый год, сотый 
месяц, тысячный день, десятитысячный 
час, стотысячная минута, миллионная секунда 
жизни пользователя была: 
Дата: 8.02.2005
Время: 21:25:39
 
    8 Инструкция 
для пользователя приложения 
 
После запуска программа просит ввести год рождения пользователя:
С клавиатуры вводится год рождения, затем нажимается Ввод. Далее программа просит ввести месяц рождения: