Практика программирования (Бейсик, Си, Паскаль)



         

Задачи, советы и ответы - часть 13


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




Содержание  Назад  Вперед