Помощь - Поиск - Пользователи - Календарь
Полная версия: Генерация календаря
Форум «Всё о Паскале» > 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.
?
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.