Помощь - Поиск - Пользователи - Календарь
Полная версия: Генерация календаря
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Янычар
Такое задание которое нужно осуществить на Паскале: надо создать такую программу, которая генерировала бы годовой календарь по первому дню первого января, то есть первому дню первого января любого года по счету в неделе, например если 1 января в этом году будет во вторник, значит его позиция равна 2 и таким образом надо чтобы программа генерировала годовой календарь. Я вроде программу сделал, а почему то работает неверно выводит бесконечный одинарный столбец одного какого-нибудь числа. Я сделал так: разбил на подзадачи, тоесть для генерации месяца одна процедура, для отступов перед следующим месяцем - другая процедура. Подскажите как сделать такую программу, а если не лень или если такая программа у вас уже написана напишите ее сюда буду очень благодарен.
volvo
Ты свою программу покажи сначала...
Алена
type
month = (
jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec
);
week_day = (
sun, mon, tue, wed, thu, fri, sat
);

const
days: array[week_day] of string = (
'Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'
);
month_names: array[month] of string = (
'jan', 'feb', 'mar', 'apr', 'may', 'jun',
'jul', 'aug', 'sep', 'oct', 'nov', 'dec'
);
d_in_m: array[month] of integer = (
31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
);

procedure print_month(m: integer; first_day: week_day);
var
k, D: integer;
i: month;
w: week_day;
begin
i := jan; D := 0;
while i < month(pred(m)) do begin
inc(D, d_in_m[i]);
i := succ(i);
end;

writeln('month: ', month_names[i]);
for w := sun to sat do
write(days[w]:4);
writeln;


for k := 1 to (D + pred(1) + ord(first_day)) mod 7 do write('':4);
for k := 1 to d_in_m[month(pred(m))] do begin
write(k:4);
if week_day((D + pred(k) + ord(first_day)) mod 7) = sat then writeln;
end;
writeln;

end;

var
k, M, D: integer;
i: month;
w: week_day;

begin
repeat

for w := sun to sat do
write(ord(w):4, ':', days[w]);
writeln;
write('enter the Jan, 1st weekday: '); readln(D);

until D in [0 .. 6];

for k := 1 to 12 do
print_month(k, week_day(D));

end.
?
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.