NetNado
  Найти на сайте:

Учащимся

Учителям



Отчет по лабораторной работе №12 по дисциплине "Программирование на языке высокого уровня"



Федеральное агентство по образованию

ТОМСКИЙ ПОЛИТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ

Факультет АВТ

Кафедра ИПС

Календарь

Отчет по лабораторной работе № 12

по дисциплине "Программирование на языке высокого уровня"

вариант № 9


Выполнил:


студент группы 8В83

Колчанов А.В.


Проверил:


преподаватель
Погребная Т.А.



г. Томск, 2010

Условие задачи


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

С клавиатуры ввести год.

Принять во внимание, что в современном (григорианском) календаре каждый год, номер которого делится на 4, является високосным, за исключением тех номеров, которые делятся на 100, но не делятся на 400.

Это правило формально действует с 325 года.

До 325 года формально високосными годами надо считать все годы, номера которых делятся на 4.

Алгоритм решения




  1. Вычисляется, високосный год или нет.

  2. Далее идет цикл перебора всех дней в году. Каждый день передается в функцию what_day(), которая в качестве параметра принимает структуру struct_date, в которой содержится значение дня, месяца и года.

  3. Функция возвращает число от 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


{

a.day++;

}else

{

a.day=1;

a.month++;

cout<
}

}

} else

{

for (int i = 1; i <= count; i++)

{
if (what_day(&a;)==0)

{

cout<
}


if (a.day


{

a.day++;

}else

{

a.day=1;

a.month++;

cout<
}

}

}

getch();

return 0;

}

//---------------------------------------------------------------------------



Результат работы программы


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


скачать

Другие похожие работы: