program ESTRPSAK { www.merlyn.demon.co.uk >= 2001-09-26 cf Remy Landau E-mails Aug 2001 } ; { IN: HEBPESAK.DAT : each line is four numbers - . Gregorian Year, Month, and Day of Pesach, and 1 for Sunday . Hebrew Pesach = Passover = 15 Nisan OUT: HEBPESAK.OUT : . Gregorian Y M D of Pesach; . M D of G Easter, comparison; M D of J Easter, comparison } uses DateProx ; var F, G : text ; MJD : MJdate ; QY : integer ; PY, PM, PD, PW : word ; GM, GD, JM, JD : byte ; procedure Report ; const Lt = '< ' ; Eq = ' = ' ; Gt = ' >' ; Sgn : array [boolean] of string [5] = (Lt, Gt) ; var Q : integer ; S : string [5] ; begin Q := integer(PM*40+PD) - integer(GM*40+GD) ; if Q=0 then S := Eq else S := Sgn[Q>0] ; Write(G, GM:4, GD:3, '':3, S) end {Report} ; const DoW : array [0..7] of string [2] = ('Sa', 'Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa') ; procedure Head ; begin Writeln(G, ^M^J, ' Year Hebrew D Greg Julian '^M^J, ' Pesach o Easter G Easter J '^M^J, ' Greg Greg W Sunday P<=>E Sunday P<=>E'^M^J) end {Head} ; BEGIN ; Assign(F, 'HEBPESAK.DAT') ; Reset(F) ; Assign(G, 'HEBPESAK.ouT') ; Rewrite(G) ; Writeln(G, ^M^J, 'Ordering of Pesach and Easters':39, ^M^J, ^M^J, 'All dates are Gregorian':36, ^M^J) ; Head ; while not EoF(F) do begin Readln(F, PY, PM, PD, PW) ; Write(G, PY:5, PM:4, PD:3, DoW[PW]:4) ; Easter(PY, GM, GD) ; Report ; OldEaster(PY, JM, JD) ; MJD := YMD_to_MJD(JulCal, PY, JM, JD) ; MJDtoYMD(MJD, QY, GM, GD) ; Report ; Writeln(G) end ; Head ; Writeln(G, ^M^J, '------':26) ; Close(G) ; Close(F) ; END.