Написание функции, определяющей для произвольной даты определенного года соответствующий день недели

Страницы работы

12 страниц (Word-файл)

Содержание работы

Расчетно-графическое задание.

Студент                     Хлопина Анастасия Георгиевна

Группа                       РС8-71

Дата выполнения     24,04,2008

Преподаватель          Ванцев Д.В.

Отметка о защите     _________________

Задание:

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

разработка структуры входных и выходных данных;

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

выбор метода решения информационной задачи;

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

Пусть пользователь вводит год – G, месяц – n, и день – d.

Тогда если n>2, то переменной m зададим значение n-2, а если n<=2, то n+10. таким образом, m=1 – это март,а январь и февраль это 11 и 12 месяцы предыдущего года.

Переменной Р присвоим значение G, если n>2, и G-1, если n<=2. Пусть С- полное число столетий, прошедших к заданной пользователем датой, а Y – номер года в текущем столетии. То есть Р=100С+Y или С=P/100 (целое деление), а Y=P%100(остаток от деления P на 100)

Так например для 12,04,1961:

d=12

n=4

m=2

G=1961

P=1961

C=19

Y=61

Пусть день недели будет задан цифрами так:

0- воскресенье

1-понедельник

2-вторник

3- среда

4- четверг

5- пятница

6- суббота

Тогда нужный нам день недели- это остаток от деления w на 7, где

w= d+ (13*m-1)/5 + Y+Y/4 +C/4-2*C.

разработка модульной структуры и потоков данных;

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

-модуль ввода данных

-проверка на ошибки

-модуль, считающий день недели

- модуль вывода дня недели

-главная программа

 разработка алгоритмов отдельных модулей с приведением их блок-схем;

1-  модуль ввода данных

итак, в приведенном модуле идет запрос ввода входных данных, а именно даты, месяца и года.

Блок-схема:
2-модуль проверки на ошибки:

В этом модуле мы проверяем корректность введенной даты.

То есть нужно проверить, чтобы номер месяца был положительным, целым числом не более 12.

Чтобы дата была положительным числом. При этом в зависимости от месяца это число не превышало 31,30,28,29 дней.

Блок-схема: (примечание: все левые ветки условия означают «истину», а правые - «ложь»)

 


Да                         Нет

Да                 Нет                                    Да                  Нет

Да                   нет    да                нет

Да                                             нет

3-модуль, считающий день недели

Подробное описание модуля находится выше. Приведу в этом пункте только блок-схему:

 


Да                  нет

Да                    нет

4-модуль вывода дня недели

Модуль выводящий результат. Выводит в соответствии со значением остатка от деления w на 7.

Где

0- воскресенье

1-понедельник

2-вторник

3- среда

4- четверг

5- пятница

6- суббота

Блок-схема:

 


0             1              2             3               4             5             6  

5-главная программа

В управляющей программе вызываются все предыдущие функции. Таким образом, при помощи главной программы мы объединяем все кусочки в единое целое.

Блок-схема:

 


Да

Нет

разработка текста программы на языке С++;

Главная программа:

Функция ввода:

Функция контроля корректности ввода:

Функция вычисления дня недели:

Функция вывода:


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

Проще всего проверять на нынешнем годе, так как под рукой всегда нужный календарь=))

Итак.

Проверим программу на пяти датах:

29 февраля 2007(такой даты нет, => программа должна вывести сообщение об ошибке)

1 января 2008 (вторник)

8 марта 2008 (суббота)

13 октября 2008 (понедельник)

31 декабря 2008 (среда)


Вывод

Задание выполнено, программа работает корректно для всех проверенных мною дат.

Я как всегда молодец.

Похожие материалы

Информация о работе

Предмет:
Информатика
Тип:
Расчетно-графические работы
Размер файла:
1 Mb
Скачали:
0