How to print a calendar for a specific month and year in Pascal

1 Answer

0 votes
program MonthCalendarProgram;

function DayOfWeek(d, m, y : integer) : integer;
{ Returns 0=Sunday, 1=Monday, ..., 6=Saturday }
var
  a : integer;
begin
  if m < 3 then
  begin
    m := m + 12;
    y := y - 1;
  end;

  a := (d + (13 * (m + 1)) div 5 + y + (y div 4) - (y div 100) + (y div 400)) mod 7;

  { Zeller returns 0=Saturday, so convert to 0=Sunday }
  DayOfWeek := (a + 6) mod 7;
end;

function DaysInMonth(m, y : integer) : integer;
begin
  case m of
    1,3,5,7,8,10,12: DaysInMonth := 31;
    4,6,9,11:        DaysInMonth := 30;
    2: if ( (y mod 4 = 0) and ( (y mod 100 <> 0) or (y mod 400 = 0) ) )
          then DaysInMonth := 29
          else DaysInMonth := 28;
  end;
end;

procedure PrintMonthCalendar(m, y : integer);
var
  first, d, i, dim : integer;
  MonthNames : array[1..12] of string[10];
begin
  MonthNames[1] := 'January';   MonthNames[2] := 'February';
  MonthNames[3] := 'March';     MonthNames[4] := 'April';
  MonthNames[5] := 'May';       MonthNames[6] := 'June';
  MonthNames[7] := 'July';      MonthNames[8] := 'August';
  MonthNames[9] := 'September'; MonthNames[10] := 'October';
  MonthNames[11] := 'November'; MonthNames[12] := 'December';

  writeln('     ', MonthNames[m], ' ', y);
  writeln('Su Mo Tu We Th Fr Sa');

  first := DayOfWeek(1, m, y);
  dim := DaysInMonth(m, y);

  for i := 1 to first do
    write('   ');

  for d := 1 to dim do
  begin
    write(d:2, ' ');
    if (first + d) mod 7 = 0 then writeln;
  end;

  writeln;
end;

var
  year, month : integer;

begin
  year := 2026;
  month := 1;

  PrintMonthCalendar(month, year);
end.




(*
run:

     January 2026
Su Mo Tu We Th Fr Sa
             1  2  3 
 4  5  6  7  8  9 10 
11 12 13 14 15 16 17 
18 19 20 21 22 23 24 
25 26 27 28 29 30 31 

*)


 



answered Jan 18 by avibootz
edited Jan 18 by avibootz

Related questions

...