program Jan1Weekday;
{$mode objfpc}{$H+}{$J-}
{
This program determines the day of the week for January 1st of a given year.
Approach:
---------
Free Pascal provides built‑in date/time routines in the SysUtils unit:
- EncodeDate(Y, M, D) : converts a calendar date into a TDateTime value
- DayOfWeek(Date) : returns the weekday number (1..7)
DayOfWeek meaning:
1 = Sunday
2 = Monday
3 = Tuesday
4 = Wednesday
5 = Thursday
6 = Friday
7 = Saturday
This avoids manual calendar arithmetic and uses efficient built‑in routines.
}
uses
SysUtils;
function WeekdayName(DayNum: Integer): String;
begin
case DayNum of
1: Result := 'Sunday';
2: Result := 'Monday';
3: Result := 'Tuesday';
4: Result := 'Wednesday';
5: Result := 'Thursday';
6: Result := 'Friday';
7: Result := 'Saturday';
else
Result := 'Unknown';
end;
end;
function Jan1Weekday(Year: Integer): String;
var
DateValue: TDateTime;
W: Integer;
begin
{ Encode January 1st of the given year }
DateValue := EncodeDate(Year, 1, 1);
{ DayOfWeek returns 1..7 }
W := DayOfWeek(DateValue);
{ Convert numeric weekday to readable name }
Result := WeekdayName(W);
end;
var
year: Integer;
resultStr: String;
begin
year := 2026;
resultStr := Jan1Weekday(year);
WriteLn('January 1st, ', year, ' falls on a ', resultStr, '.');
end.
{
run:
January 1st, 2026 falls on a Thursday.
}