Консультация № 159792
06.02.2009, 19:49
0.00 руб.
0 3 1
Помогогите решить задачу:
Считая, что все даты даются по григорианскому календарю ("новому стилю"), описать функцию days_in_month(dat), вычисляющую количество дней в том месяце которому принадлежит дата dat;

Обсуждение

Неизвестный
08.02.2009, 17:09
общий
Помогите пожалуйста!
Неизвестный
08.02.2009, 23:04
общий
это ответ
Здравствуйте, Korniychug Petro Dmytrovich!

Программа со всеми пояснениями в приложении.
С уважением, Дмитрий.

Приложение:
program z159792;

type TDate = record{тип данных, обозначающий дату}
Day,month:byte;
year:Word;
end;

Function visokos(year:Word):boolean;{определяет високосный ли год}
begin
{Год високосен (то есть содержит 366 дней), если:
а) его номер без остатка делится на 4 и не делится на 100 или
б) его номер делится без остатка на 400.}
visokos:=((year mod 100 <> 0)and(year mod 4 = 0))or(year mod 400 = 0);
end;

Function days_in_month(dat:TDate):byte;
begin
Case dat.month of
1,3,5,7,8,10,12: days_in_month:=31;
4,6,9,11: days_in_month:=30;
2: IF visokos(dat.year) then{если год високосный - то в феврале 29 дней}
days_in_month:=29
Else
days_in_month:=28;
Else days_in_month:=0;{если введён неправильный месяц - вернём 0}
end;
end;

var dat:TDate;
kol:byte;
begin
Write('Enter day: ');{ввод даты}
ReadLn(dat.day);
Write('Enter month: ');
ReadLn(dat.month);
Write('Enter year: ');
ReadLn(dat.year);
{Григорианский календарь был введён 4 октября 1582 года взамен старого юлианского:
следующим днём после четверга, 4 октября стала пятница, 15 октября
(таким образом дней с 5 по 14 октября 1582 в григорианском календаре нет)}
IF (dat.year = 1582)and(dat.month = 10)and(dat.day>=5)and(dat.day<=14) then
begin
WriteLn('This date is not exist');{если ввели один из этих дней - ругаемся}
ReadLn;
Halt(0);
end;
{считаем количество дней в месяце}
kol:=days_in_month(dat);
Write('Result: ');
IF (kol > 0)and(kol > dat.day) then{Если месяц введён правильно (от 1 до 12) и такой день в этом месяце есть - }
WriteLn('number of days in this month: ',kol){выводим ответ}
Else{иначе}
WriteLn('wrong date');{ругаемся}
ReadLn;
end.
Неизвестный
08.02.2009, 23:35
общий
Спасибо!
Форма ответа