Построение вечного календаря

Автор: Пользователь скрыл имя, 04 Мая 2013 в 00:36, курсовая работа

Краткое описание

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

Оглавление

ВВЕДЕНИЕ..………………………………………………………………….5
1 ПОСТАНОВКА ЗАДАЧИ И СРЕДА ЕЁ ИСПОЛЬЗОВАНИЯ………….7
2 ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ.…………………………………………8
3 ОСНОВНОЙ АЛГОРИТМ………………………………………………..13
4 ОСОБЕННОСТИ РЕАЛИЗАЦИИ НА ЯЗЫКЕ С++..…………………...16
5 ИНСТРУКЦИЯ ПО ИСПОЛЬЗОВАНИЮ.……………………………...21
ВЫВОДЫ……………………………………………………………………22
СПИСОК ИСПОЛЬЗУЕМЫХ ИСТОЧНИКОВ…………………………..23
Приложение А Текст программы………………………………………….24

Файлы: 1 файл

Вечный%20календарь.%20Курсовой%20проэкт.doc

— 214.50 Кб (Скачать)

 

МIНIСТЕРСТВО ОСВIТИ I НАУКИ УКРАIНИ

ХАРЬКIВСКИЙ НАЦIОНАЛЬНЫЙ УНIВЕРСИТЕТ РАДIОЕЛЕКТРОНIКИ

 

Кафедра iнформатики

 

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

Тема: «Вiчний календар»

З дисциплiни «Програмування»

 

 

 

ПОЯСНЮВАЛЬНА ЗАПИСКА

Керiвник                                              Руденко Дiана Олександрiвна

 

Студент гр. КI-09-1                                 Михайлова Любов Олегiвна

 

 

 

 

Харкiв 2010

ЗА Д А Н И Е

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

Михайлова Любовь Олеговна

(фамилия,  имя, отчество)

  1. Тема работы Построение вечного календаря

2. Срок сдачи студентом  законченной работы                

3. Исходные данные  к работе: Данные по предметной области,  методические указания, ДСТУ 3008-95                                                                  

4. Содержание расчётно-пояснительной записки (перечень подлежащих разработке вопросов) : вступление, постановка задачи и среда её использования, основной алгоритм, теоретические сведения, особенности реализации алгоритма на языке С++, инструкция по использованию, выводы, список используемых источников, приложение А Текст программы.

5. Перечень графического материала  : 5 иллюстраций к курсовой работе.

6. Дата выдачи задания  20.12.2009.


 

 

РЕФЕРАТ

Пояснительная записка к курсовой работе содержит: 43 страницы, 2 таблицы, 5 рисунков, 5 разделов, 3 источника.

Объект исследования – возможности использования основных операторов среды С++ для построения программ-приложений (калькулятор, календарь и т.д.).

Цель исследования – разработка программы «вечный календарь» для получения элементарных календарных сведений по требуемым пользователю временным промежуткам.

Метод исследования – изучение необходимой литературы, написание алгоритма, его переведение в машинный код и тестирование программы.

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

ОПЕРАТОР, АЛГОРИТМ, ПЕРЕКЛЮЧАТЕЛЬ,ТАБЛИЦА, ПАРАМЕТР, ЦИКЛ ,ЗОДИАК.

 

 

 

 

 

 

СОДЕРЖАНИЕ

ВВЕДЕНИЕ..………………………………………………………………….5

1 ПОСТАНОВКА ЗАДАЧИ И СРЕДА ЕЁ ИСПОЛЬЗОВАНИЯ………….7

2 ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ.…………………………………………8

3 ОСНОВНОЙ АЛГОРИТМ………………………………………………..13

4 ОСОБЕННОСТИ РЕАЛИЗАЦИИ НА ЯЗЫКЕ С++..…………………...16

5 ИНСТРУКЦИЯ ПО ИСПОЛЬЗОВАНИЮ.……………………………...21

ВЫВОДЫ……………………………………………………………………22

СПИСОК ИСПОЛЬЗУЕМЫХ ИСТОЧНИКОВ…………………………..23

Приложение  А Текст программы………………………………………….24

 

 

 

 

 

 

 

 

 

 

ВВЕДЕНИЕ

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

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

Известные сегодня  табличные календари приобрели современную форму только после того, как была изобретена печать. Вечные же календари придуманы гораздо раньше — время их создания восходит ещё к дотатарскому времени — вероятно, один из первых подобных календарей был найден на стене Киевской Софии.

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

Придумано множество  вечных календарей такого вида, однако почти все они сводятся к одному: имеется 14 календарных сеток (7 возможных  дней недели, с которых начинается год × 2 варианта — високосный и невисокосный год) и таблица, помогающая выбрать календарную сетку для нужного года либо определить сдвиг, помогающий правильно преобразовать одну сетку.

Календари этого  вида различаются по степени удобства и быстроте использования. Такие календари иногда публиковались в газетах и журналах для вырезания и использования читателями. Именно такой алгоритм и был использован мною при построении вечного календаря в С++.

 

 

 

 

 

 

 

 

 

 

 

 

 

1 ПОСТАНОВКА ЗАДАЧИ И СРЕДА ЕЁ ИСПОЛЬЗОВАНИЯ

Тема данной курсовой роботы звучит элементарно : построить вечный календарь.  Задача соответственно: используя инструменты  С++ Visual Studio написать программу, позволяющую по введенным пользователем датам (году, месяцу и числу) отследить, не высокосный ли введенный год, а так же получить сведения какой это день недели. Так же в задачу данной программы входит проверка на корректность работы программы (правильный ввод месяца и соответствующего ему диапазона дат).

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

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

 

 

 

 

 

 

 

 

2 ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ

В данном коде используются такие основные операторы языка С, как операторы выбора и переключатели. Далее подробнее о них.

Оператор выбора if.

Оператор условного  перехода if используется для разделения процесса последующего выполнения программы на два направления и имеет такой формат записи:

if (условие) оператор 1;

else оператор 2;

где условие – это выражение , что имеет логическое истина.

Реализуется оператор if следующим образом: сначала вычисляется условие и, если оно истинно, то выполняется оператор 1, а в противоположном случае – оператор 2 и далее управление передаётся следующему за if оператору, например

if (i<j) i++;

else

{j=i-3;

i++};

В записи оператора if вторая часть (т.е. else) может отсутствовать и тогда, когда выражение условие принимает значение «ложь», выполняется сразу следующий оператор программы, идущий за условным. Подобная конструкция имеет название «пропуск оператора».


В данной программе в условие  находяться логические операции «&&» (логическое и)  и «||» (логическое или), позволяющие в один условный оператор if записать сразу несколько одинаковых выражений-условий.

 

Рисунок 2.1 –  пример использования условного  оператора if для решения задачи

 

Данный фрагмент демонстрирует, что в случае, если будет выполняться заданное условие, в нашем случае это если совпадут даты какого-либо из заранее закрепленных в коде праздников, программа выдаст на экран его название. Например:

если год, введенный  пользователем привысит 1950, месяц  будет мартом, а число 8е, то помимо дня недели, мы получим на экране сообщение о том, что это женский день (см. рисунок 2.2)


 

Рисунок 2.2 –  пример работы оператора if

 

Оператор-переключатель switch.

Данный оператор также имеет название оператора  множественного распределения. Он используется для выбора одного из многих вариантов решения и имеет следующий синтаксис:

switch (k)

{ case к.в.1: оператор 1;[break;]

   case к.в.2: оператор2;[break;]

   ……………………………….

   case к.в.n: оператор n;[break;]

 

  [default:оператор n+1;]

},

где switch, case, default – служебные слова

(switch – переключать;

 сase – случай;

default – невыполнение);

break – оператор (необязательный!) , выполняющий выход из переключателя switch;

k – любое выражение целого типа;

к.в.1,……., к.в.n – константные выражения, которые не могут повторяться и не могут содержать в себе переменных или вызовов функций; чаще всего это целая или символьная константа;

оператор1,…….,оператор n – произвольные операторы языка С++.

В процессе выполнения этого оператора сперва вычисляется  значение выражения k, потом оно последовательно сверху вниз сравнивается со значением константных выражений оператор1,…….,оператор n. В случае совпадения значения k и одного из этих константных выражений и если в конце случая не стоит оператор выхода break, выполняются все последующие операторы, начиная с совпадающего. Если всё-таки стоит break, то выполняется лишь операторы данного случая, а дальше управление идёт на операторы вне switch. Если ни одно значение k не совпадает, выполняется оператор, стоящий после default, а далее выход из switch. Также следует заметить, что слово default не обязательно, при его отсутствии и несовпадении k с константными выражениями просто будет производиться выход из переключателя.


В программе «вечного календаря» самим ярким примером использования  переключателя switch является определение словесного эквивалента месяца.

Рисунок 2.3 –  пример использования переключателя switch

Работать он будет соответственно с простейшим алгоритмом выполнения switch: значение введённого пользователем месяца m будет сравниваться с предоставленными ниже случаями, т.е. для m равное 11 на экран получим сообщение о том, что 11й месяц это ноябрь. Думая, иллюстрировать столь элементарную конструкцию не следует, вы убедитесь в корректности её работв при собственном тестировании программы.

3. ОСНОВНОЙ АЛГОРИТМ

Для того, чтобы  узнать день недели конкретного дня, требуется:

найти в первой таблице цифру, соответствующую указанному году и месяцу;

сложить эту цифру с номером дня;

найти во второй таблице получившееся число и посмотреть, какому дню недели оно соответствует.

 

Таблица А– фрагмент таблицы соответствий годов и  месяцов

Года

Месяцы

янв

фев

м

апр

май

ин

ил

авг

сен

окт

ноя

дек

1947-1975-2003-2031

3

3

6

2

4

0

2

5

1

3

6

1

1948-1976-2004-2032

4

0

1

4

6

2

4

0

3

5

1

3

1949-1977-2005-2033

6

2

2

5

0

3

5

1

4

6

2

4

1950-1978-2006-2034

0

3

3

6

1

4

6

2

5

0

3

5

1951-1979-2007-2035

1

4

4

0

2

5

0

3

6

1

4

6

1952-1980-2008-2036

2

5

6

2

4

0

2

5

1

3

6

1


 

Таблица Б –  соответствие чисел и дней недели

Дни

1

8

15

22

29

36

Воскресенье

2

9

16

23

30

37

Понедельник

3

10

17

24

31

 

Вторник

4

11

18

25

32

 

Среда

5

12

19

26

33

 

Четверг

6

13

20

27

34

 

Пятница

7

14

21

28

35

 

Суббота


 

Например:

требуется определить, каким днём недели было 22 февраля 2007 года.

Цифра, соответствующая февралю (фев) 2007 в таблице А, равна 4.

22+4=26.

Числу 26 в таблице Б соответствует четверг — это и есть искомый день недели.

 

Существуют разнообразные  методы вычисления дня недели. Некоторые  из них основываются на заранее просчитанных таблицах сдвигов, а некоторые вычисляют все необходимые значения «с нуля» при каждом запуске. Иногда алгоритмы представляют собой автоматизированные версии табличных календарей.

Как правило, каждый метод  имеет две модификации — для  юлианского и для григорианского календаря.

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

Как всем известно, январь – это 1й месяц, февраль – 2й , и т.д., а декабрь – 12й месяц. Для определения сдвига используется следующая формула:

a=(14-месяц) /12 (a – некая вспомогательная величина). Затем определяются год и месяц с учётом поправки: y=год-a, где год — увеличиваем на 1 от исходного, а m=месяц+12·a-2.

После вспомогательных операций вычисляется сам день недели:

result=(7000+(день+y+y/4-y / 100+y div 400+(31im) /12)) %7

 

Для юлианского календаря формула выглядит так:

result=(6998+(день+y+y / 4+(31im) / 12)) % 7

 

Результат —  число от 0 до 6, где 0 — суббота, 1 — воскресенье, 2 — понедельник, 3 — вторник, 4 — среда, 5 — четверг, 6 — пятница.

 

 

 

 

 

 

 

 

 

 

4. ОСОБЕННОСТИ РЕАЛИЗАЦИИ НА ЯЗЫКЕ С++

Программа написана на языке программирования Microsoft Visual Studio С++ 2008 года, что обусловливает разные методы её реализации в версиях Visual Studio разных годов.

Рассмотрим подробно работу данного вечного календаря.

Первым делом мы вводим в программу данные, а именно интересующие нас  год, месяц и число. Ввод данных реализован стандартными операциями cout (вывод на экран) и cin (ввод данных с клавиатуры) из библиотеки iostream. Думаю, особенной необходимости останавливаться на этом шаге нет.

Информация о работе Построение вечного календаря