12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- Program easter;
- {
- easter v1.0
- © 1995 by Andreas Tetzl
- FREEWARE
- This is a little program to calculate the date of
- easter for years between 1583 and 2299.
- Start it in a shell with the year as argument.
- }
- {
- Translated to fpc pascal.
- 21 Mar 2001.
- [email protected]
- }
- uses amigados;
- const version : pchar = '$VER: easter v1.0 (3-Nov-95) by Andreas Tetzl';
- VAR i,a,b,c,d,e,m,n : Integer;
- year, month, day : longint;
- BEGIN
- if (ParamStr(1) = '?') or (ParamStr(1) = '') then
- BEGIN
- Writeln('YEAR/N');
- halt(20);
- END;
- i:=StrToLong(ParamStr(1),year);
- if (year<1583) or (year>2299) then
- BEGIN
- Writeln('only years between 1583 and 2299 allowed');
- halt(20);
- END;
- Case year of
- 1583..1699 : BEGIN m:=22; n:=2; END;
- 1700..1799 : BEGIN m:=23; n:=3; END;
- 1800..1899 : BEGIN m:=23; n:=4; END;
- 1900..2099 : BEGIN m:=24; n:=5; END;
- 2100..2199 : BEGIN m:=24; n:=6; END;
- 2200..2299 : BEGIN m:=25; n:=0; END;
- end;
- a:=year mod 19;
- b:=year mod 4;
- c:=year mod 7;
- d:=(19*a+m) mod 30;
- e:=(2*b+4*c+6*d+n) mod 7;
- day:=22+d+e;
- if day<=31 then
- month:=3
- else
- BEGIN
- month:=4;
- day:=d+e-9;
- END;
- if (month=4) and (day=26) then day:=19;
- if (month=4) and (day=25) and (d=28) and (e=6) and (a>10) then day:=18;
- Write(year,'-');
- if month=3 then Write('Mar') else Write('Apr');
- Writeln('-',day);
- END.
|