Операции над матрицами

8



Министерство образования и науки РК

Международная Бизнес Академия

Кафедра ИТ и ОТД





















КУРСОВАЯ РАБОТА

по дисциплине «Технология программирования»

на тему: «Операции над матрицами»

















Выполнил: 

ст. гр. ИС-10 (3)

Джумагельдинов С.Н.



Проверил:

ст. преп. кафедры ИТ и ОТД

Оценка:_____                                                                                      Краснов А.М.

















Караганда 2011

Международная Бизнес Академия

Кафедра ИТ и ОТД



Индивидуальное задание

на курсовую работу

по дисциплине «Технология программирования»



Задание выдано студенту

группы ИС-10(3) Галимову К.А.



Тема: «Знаменательные даты»

Этапы и сроки выполнения:



№

Название этапа

Результат

Сроки выполнения

1

Анализ постановки задач

Полное описание задач

2 недели

2

Составление математической модели

Описание математической модели

1 неделя

3

Составление алгоритма решения задач

Блок-схемы программы или псевдокод алгоритма

0,5 недели

4

Составление модульной структуры приложения

Схема и описание модулей программы

0,5 недель

5

Визуальное построение интерфейса и модулей

Разработка интерфейса и модулей

2 недели

6

Написание программного кода приложения

Листинги функций, процедур с комментариями

2,5 недели

7

Отладка программного кода

Листинги программы с устраненными ошибками

2 недели

8

Тестирование приложения

Работоспособное приложение

1 неделя

9

Написание пояснительной записки

Пояснительная записка

2 недели

10

Защита курсовой работы

Оценка

1 неделя











Задание принял к исполнению



17.01.2011 

Галимов К.А.  _____

Содержание





Введение											          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


Введение





Большая часть работы программистов связана с написанием исходного кода, тестированием и отладкой программ на одном из языков программирования. Исходные тексты и исполняемые файлы программ являются объектами авторского права и являются интеллектуальной собственностью их авторов и правообладателей.

Различные языки программирования поддерживают различные стили программирования (т. н. парадигмы программирования). Отчасти искусство программирования состоит в том, чтобы выбрать один из языков, наиболее полно подходящий для решения имеющейся задачи. Разные языки требуют от программиста различного уровня внимания к деталям при реализации алгоритма, результатом чего часто бывает компромисс между простотой и производительностью (или между временем программиста и временем пользователя).

Единственный язык, напрямую выполняемый ЭВМ — это машинный язык (также называемый машинным кодом). Изначально все программы писались в машинном коде, но сейчас этого практически уже не делается. Вместо этого программисты пишут текст исходный код на том или ином языке программирования, затем (используя компилятор, интерпретатор или ассемблер) транслируют его, в один или несколько этапов в машинный код, готовый к исполнению на целевом процессоре, или в промежуточное представление, которое может быть исполнено специальной программой - виртуальной машиной, или интерпретатором. Если требуется полный низкоуровневый контроль над системой на уровне машинных команд и отдельных ячеек памяти, программы пишут на языке ассемблера, мнемонические инструкции которого преобразуются один к одному в соответствующие инструкции машинного языка целевого процессора ЭВМ.

C++ — компилируемый статически типизированный язык программирования общего назначения. Поддерживая разные парадигмы программирования, сочетает свойства как высокоуровневых, так и низкоуровневых языков. В сравнении с его предшественником — языком C, — наибольшее внимание уделено поддержке объектно-ориентированного и обобщённого программирования. Название «C++» происходит от языка C, в котором унарный оператор ++ обозначает инкремент переменной.

Являясь одним из самых популярных языков программирования, C++ широко используется для разработки программного обеспечения. Область его применения включает создание операционных систем, разнообразных прикладных программ, драйверов устройств, приложений для встраиваемых систем, высокопроизводительных серверов, а также развлекательных приложений (например, видеоигры). Существует несколько реализаций языка C++ — как бесплатных, так и коммерческих. Их производят Проект GNU, Microsoft, Intel и Embarcadero (Borland). C++ оказал огромное влияние на другие языки программирования, в первую очередь на Java и C#.

При создании C++ Бьёрн Страуструп стремился сохранить совместимость с языком C. Множество программ, которые могут одинаково успешно транслироваться как компиляторами C, так и компиляторами C++, довольно велико — отчасти благодаря тому, что синтаксис C++ был основан на синтаксисе C.

Язык возник в начале 1980-х годов, когда сотрудник фирмы Bell Laboratories Бьёрн Страуструп придумал ряд усовершенствований к языку C под собственные нужды. До начала официальной стандартизации язык развивался в основном силами Страуструпа в ответ на запросы программистского сообщества. В 1998 году был ратифицирован международный стандарт языка C++: ISO/IEC 14882:1998 «Standard for the C++ Programming Language»; после принятия технических исправлений к стандарту в 2003 году — нынешняя версия этого стандарта — ISO/IEC 14882:2003.

Ранние версии языка, известные под именем «C с классами», начали появляться с 1980 года. Идея создания нового языка берёт начало от опыта программирования Страуструпа для диссертации. Он обнаружил, что язык моделирования Simula имеет такие возможности, которые были бы очень полезны для разработки большого программного обеспечения, но работает слишком медленно. В то же время язык BCPL достаточно быстр, но слишком близок к языкам низкого уровня и не подходит для разработки большого программного обеспечения. Страуструп начал работать в Bell Labs над задачами теории очередей (в приложении к моделированию телефонных вызовов). Попытки применения существующих в то время языков моделирования оказались неэффективными. Вспоминая опыт своей диссертации, Страуструп решил дополнить язык C (преемник BCPL) возможностями, имеющимися в языке Симула. Язык C, будучи базовым языком системы UNIX, на которой работали компьютеры Bell, является быстрым, многофункциональным и переносимым. Страуструп добавил к нему возможность работы с классами и объектами. В результате, практические задачи моделирования оказались доступными для решения как с точки зрения времени разработки (благодаря использованию Симула-подобных классов) так и с точки зрения времени вычислений (благодаря быстродействию C). В начале в C были добавлены классы (с инкапсуляцией), производные классы, строгая проверка типов, inline-функции и аргументы по умолчанию.

Разрабатывая C с классами (позднее C++), Страуструп также написал программу cfront — транслятор, перерабатывающий исходный код C с классами в исходный код простого C. Новый язык, неожиданно для автора, приобрёл большую популярность среди коллег и вскоре Страуструп уже не мог лично поддерживать его, отвечая на тысячи вопросов.

В 1983 году произошло переименование языка из C с классами в C++. Кроме того, в него были добавлены новые возможности, такие как виртуальные функции, перегрузка функций и операторов, ссылки, константы, пользовательский контроль над управлением свободной памятью, улучшенная проверка типов и новый стиль комментариев (//). Его первый коммерческий выпуск состоялся в октябре 1985 года. В 1985 году вышло также первое издание «Языка программирования C++», обеспечивающее первое описание этого языка, что было чрезвычайно важно из-за отсутствия официального стандарта. В 1989 году состоялся выход C++ версии 2.0. Его новые возможности включали множественное наследование, абстрактные классы, статические функции-члены, функции-константы и защищённые члены.

В 1990 году вышло «Комментированное справочное руководство по C++», положенное впоследствии в основу стандарта. Последние обновления включали шаблоны, исключения, пространства имён, новые способы приведения типов и булевский тип.

Стандартная библиотека C++ также развивалась вместе с ним. Первым добавлением к стандартной библиотеке C++ стали потоки ввода/вывода, обеспечивающие средства для замены традиционных функций C printf и scanf. Позднее самым значительным развитием стандартной библиотеки стало включение в неё Стандартной библиотеки шаблонов.

Никто не обладает правами на язык 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 Алгоритмизация модели решаемой проблемы





ввод yb, mb, db, hb, minb, secb

ввод 

y, m, d, h, min, sec

y==0

y=1

m==0

m=1

d==0

d=1

h==0

h=1

min==0

min=1

sec==0

sec=1

y=y+(yb-1)

m=m+(mb-1)

d=d+(db-1)

h=h+(hb-1)

min=minb+(minb-1)

sec=secb+(secb-1)

h>23

h=h-24

d++

min>59

min=min-60

h++

sec>59

sec=sec-60

min++

v=0

v<=49

v++

mas[v]=1900 +(4*(v+1))

m==1

and d>31

d=d-31

m++

v=0

v<=49

v++

y=mas[v]

m==2

and d>29

d=d-29

m++



v=0

v<=49

v++

y!=mas[v]

m==2

and d>28

d=d-28

m++

41

41

Начало

62

2

3

7

4

5

6

9

8

1

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

+

+

+

+

+

+

+

+

+

+

+

+

+

+

+

+

+

-

-

-

-

-

-

-

-

-

-

-

-

-

-

-

-

-



34

36

d=d-31

m++

m==4

and d>30

d=d-30

m++

m==5

and d>31

d=d-31

m++

m==6

and d>30

d=d-30

m++

m==7

and d>31

d=d-31

m++

m==8

and d>31

d=d-31

m++

m==9

and d>30

d=d-30

m++

m==10

and d>31

d=d-31

m++

m==11

and d>30

d=d-30

m++

m==12

and d>31

d=d-31

m++

m>12

and d>1

y++

m=1

вывод 

y, m, d, h, min, sec

Конец

m==3

and d>31

27

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

+

+

+

+

+

+

+

+

+

+

+

-

-

-

-

-

-

-

-

-

-

-


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» и нажимается Ввод. И последний шаг введения своих данных это введение секунды рождения:



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



Это значит, что сейчас нужно будет вводить данные знаменательной даты, которую пользователь хочет узнать.

Первый шаг это год. Здесь также может быть введён «0» если пользователь не хочет узнать знаменательную дату с точностью до года:



Нажимается Ввод. Второй шаг – месяц. Вводится количество месяцев либо «0»:



Нажимается Ввод. Третий шаг – день. Обычно самое часто вводимое значение (потому что пользователь обычно хочет знать свой 100ый, или 1000000ый день жизни). Вводится количество дней, либо «0»:



Нажимается Ввод. Четвертый шаг – час. Если нужно узнать знаменательную дату с точностью до часа, то вводится количество часов. Также можно ввести «0»:



Нажимается Ввод. Пятый шаг – минута знаменательной даты. Вводится количество минут, либо «0»:



Нажимается Ввод. Последний шаг программы это ввод секунды знаменательной даты. Тоже обычно часто вводимое значение (так как пользователь часто хочет узнать 10000000ую или 999999999ую секунду свой жизни и т.д.):



Нажимается Ввод. 

Ввод данных закончен. Теперь программа рассчитывает знаменательную дату, исходя из введенных пользователем данных и выводит дату и время на экран. Например:







Пример расчета 1000го дня:







Рисунок 3 – Пример расчета тысячного дня



Дата и время рождения пользователя: 16.03.1989, 7:00;

Тысячный день пользователя: 10.12.1991, 7:00. 


Заключение





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

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

В курсовом проекте было рассмотрено описание предметной области, основные элементы среды программирования C++, описаны используемые компоненты, процедуры и  возможности языка программирования C++. Рассмотрен процесс создания программы.

Помимо этого было разработано руководство пользователя по работе с программным средством. 


Список использованной литературы





1 Ватсон А. C++ На примерах, 2008.

2 Мартин К.С. Принципы, паттерны и методики гибкой разработки на языке С++, 2011.

3 Фленов М. Библия C++, 2011.

4 Хортон А. Visual C++ полный курс, 2010.

5 Шилдт Г. C++ полное руководство.