int max_day(int Y, int M)
{ int days[]={31,28,31,30,31,31,30,31,30,31,30,31);
if(M != 2) return days[M-l];
if{(Y%400==0)||((Y%4==0)&&(Y%100!=0))}
return 29;
return 28; }
Программа 9_07.pas
program days_in_month;
{ Определение количества дней в месяце }
var
Y,M:integer;
function max_day(Y,M:integer):integer; const
days:array[1..12] of byte=(31,28,31,30,31,30, 31, 31, 30, 31, 30, 31);
begin
max_day:=days[M];
if(M<>2) then exit;
if((Y mod 400=0)OR((Y mod 4=0)AND(Y mod l00<>0) ) ) then
max_day:=29; end; begin
write('Задайте год : ');
readln(Y);
write('Задайте месяц : ');
readln(M);
writeln('Число дней в этом месяце = ',max_day(Y,M));
readln; end.
Задание 9.08. Календарь
Составить процедуру calendar, отображающую на экране дисплея календарь на заданный месяц любого года.
Совет 1 (общий)
Во-первых, календарь любого месяца можно разместить в таблице, содержащей 7 строк (по числу дней недели) и 6 столбцов. В худшем варианте 1-е число
месяца выпадает на воскресенье, занимая тем самым последнюю клетку 1-го столбца, а два последних дня месяца — 30 и 31 — на понедельник и вторник последнего столбца. Двумерную таблицу календаря удобнее представить в виде одномерного массива из 42 элементов.
Во-вторых, для определения местоположения 1-го дня месяца мы можем обратиться к функции week_day.
Наконец, с помощью функции max_day мы можем определить число дней в заданном месяце. После этого остается очистить нулями массив из 42 элементов и расписать его с нужного места последовательными днями месяца. А затем отобразить на экране ненулевые элементы в соответствующих позициях экрана.
Программа 9_08.bas
DECLARE SUB calendar(Y%,M%)
DECLARE FUNCTION JD!(Y%,M%,DT!)
DECLARE FUNCTION WeekDay!(Y%,M%,D%)
DECLARE FUNCTION MaxDay!(Y%,M%)
REM Программа вывода календаря на любой месяц
DATA 31,28,31,30,31,30,31,31,30,31,30,31