Смекни!
smekni.com

Операции над матрицами (стр. 2 из 3)

Никто не обладает правами на язык C++, он является свободным. Однако сам документ стандарта языка (за исключением черновиков) не доступен бесплатно.

Целью моей курсовой работы является написание программы, которая рассчитывает знаменательные даты жизни (например 100ый день вашей жизни или 100000ая секунда вашей жизни).

Актуальность темы состоит в том, что на сегодняшний день не существует такой программы которая поможет вам узнать знаменательные даты вашей жизни с точностью до секунды.


1 Анализ задания по курсовой работе

Поставлена задача – написать такую программу, которая могла бы рассчитывать знаменательные даты жизни пользователя программы.

1.1 Основные задачи

Основные задачи для написания программы:

-умножение матрицы A на число λ (обозначение: λA)

-сложение матриц A + B есть операция нахождения матрицы C

-Вычитание матриц A – B

-Умножение матриц

1.2 Дополнительные задачи

Дополнительные задачи для написания программы:

- адаптируемость – приспосабливаемость к функционированию в различных условиях;

-гибкость – возможность легко вводить изменения, дополнения, исправления в ПО при сохранении всей системной организации;

-компактность – потребление минимальных ресурсов ЭВМ (память, время);

-мобильность – способность функционирования на различных технических средствах;

-надежность – обеспечение получения достоверных результатов проектирования;

-реактивность – обеспечение быстрого решения задачи при ориентации на пользователя, не являющегося специалистом в области вычислительной техники;

-эволюционируемость – возможность пополнения новыми программами, расширяющими возможность системы.


2 Математическая модель решаемой проблемы

Для написания такой программы нужно использовать такие функции как циклы, условия и массивы.

2.1 Расчёт знаменательной даты

В первую очередь нужно рассчитать введенное пользователем число (дней) и вывести правильную знаменательную дату с учетом, что в каждом месяце разное количество дней. Для этого нужно сложить день рождения пользователя с тем знаменательным днем, который он хочет узнать. Далее Написать несколько условий под каждый месяц, т.е. если месяц пользователя январь, тогда от суммы (день рождения+знаменательный день) отнимается 31 (количество дней в феврале), а число месяца рождения пользователя должно увеличится на 1 (так как если 31 день января прошел – наступает февраль). По такой же схеме по порядку сумма должна пройтись до тех пор, пока она не станет меньше чем количество дней в месяце. Когда сумма стала меньше, чем количество дней в месяце, нужно вывести результат.

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 << "--------------------------------------------------------------------" << endl;

cout << "TEPER' VVEDITE DANNIE ZNAMENATEL'NOY DATY, KOTORUYU VY HOTITE UZNAT'" << endl;

cout << "--------------------------------------------------------------------" << endl;

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 << "--------------------------------------------------------------------" << endl;

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 Инструкция для пользователя приложения

После запуска программа просит ввести год рождения пользователя:

С клавиатуры вводится год рождения, затем нажимается Ввод. Далее программа просит ввести месяц рождения:

Месяц рождения вводится цифрой, нажимается Ввод и следующее сообщение это «Введите день рождения»:

Вводится день рождения, нажимается Ввод. Теперь когда мы ввели дату рождения программа просит ввести время рождения. Если пользователь не помнит или не знает своего времени рождения, то можно поставить просто «0». Сначала программа спросит час рождения:

Вводится час рождения или «0», нажимается Ввод и следующий шаг это ввести минуту рождения:

Вводится минута рождения или «0» и нажимается Ввод. И последний шаг введения своих данных это введение секунды рождения:

Нажимается Ввод. Теперь когда все данные о рождении пользователя введены появится следующее сообщение: