Отчет по лабораторной работе №12 по дисциплине "Программирование на языке высокого уровня"
Федеральное агентство по образованию
ТОМСКИЙ ПОЛИТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
Факультет АВТ
Кафедра ИПС
Календарь
Отчет по лабораторной работе № 12
по дисциплине "Программирование на языке высокого уровня"
вариант № 9
Выполнил: | студент группы 8В83 Колчанов А.В. |
Проверил: | преподаватель Погребная Т.А. |
г. Томск, 2010
Условие задачи
Написать программу, которая бы для указанного года распечатывала все числа, попадающие на воскресенье.
С клавиатуры ввести год.
Принять во внимание, что в современном (григорианском) календаре каждый год, номер которого делится на 4, является високосным, за исключением тех номеров, которые делятся на 100, но не делятся на 400.
Это правило формально действует с 325 года.
До 325 года формально високосными годами надо считать все годы, номера которых делятся на 4.
Алгоритм решения
Вычисляется, високосный год или нет.
Далее идет цикл перебора всех дней в году. Каждый день передается в функцию what_day(), которая в качестве параметра принимает структуру struct_date, в которой содержится значение дня, месяца и года.
Функция возвращает число от 0 до 6 (соответственно, от воскресенья до субботы). Если функция возвращает 0, печатаем указанную дату.
Листинг
//(c) Andrey Kolchanov, 2010. //Следующий код защищен авторским правом. //Использование материала без письменного разрешения автора запрещено. //--------------------------------------------------------------------------- #pragma hdrstop #include "stdafx.h" #include #include #include using namespace std; //--------------------------------------------------------------------------- #pragma argsused struct struct_date { int day; int month; int year; }; int what_day(const struct struct_date * const date) { int a = (14 - date->month) / 12; int y = date->year - a; int m = date->month + 12 * a - 2; return (7000 + (date->day + y + y / 4 - y / 100 + y / 400 + (31 * m) / 12)) % 7; } int _tmain(int argc, _TCHAR* argv[]) { short year; cout<<"Enter year: "; cin >> year; cout< int count=0; if (year<325) { if (year%4==0) { count = 366; }else { count = 365; } }else { if ((year%4==0)&&(! (year%100==0)&&(year%400!=0))) { count = 366; } else { count = 365; } } struct_date a; a.day=1; a.month = 1; a.year = year; int h1[] = {31,28,31,30,31,30,31,31,30,31,30,31}; int h2[] = {31,29,31,30,31,30,31,31,30,31,30,31}; if (count==366) { for (int i = 1; i <= count; i++) { if (what_day(&a;)==0) { cout< } if (a.day |
Результат работы программы
Enter year: 2010
1 3
1 10
1 17
1 24
1 31
2 7
2 14
2 21
2 28
3 7
3 14
3 21
3 28
4 4
4 11
4 18
4 25
5 2
5 9
5 16
5 23
5 30
6 6
6 13
6 20
6 27
7 4
7 11
7 18
7 25
8 1
8 8
8 15
8 22
8 29
9 5
9 12
9 19
9 26
10 3
10 10
10 17
10 24
10 31
11 7
11 14
11 21
11 28
12 5
12 12
12 19
12 26
Вывод
Научился работать с датами и узнал алгоритм вычисления дней недели и високосных годов.
страница 1
скачать
Другие похожие работы: