Автор: Пользователь скрыл имя, 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 Инструкция
для пользователя приложения
После запуска программа просит ввести год рождения пользователя:
С клавиатуры вводится год рождения, затем нажимается Ввод. Далее программа просит ввести месяц рождения: