EASTER| begin comment library A1, A4, A5, A15; procedure get the date of Easter Sunday (Easter day, Easter month, given year); value given year; integer given year, Easter month, Easter day; begin procedure divide (dividend, divisor, quotient, remainder); value dividend, divisor; integer dividend, divisor, quotient, remainder; begin integer q; q := dividend ÷ divisor; remainder := dividend - divisor × q; quotient := q; end divide; integer a, b, c, h; divide(given year, 19, Easter month, a); divide(given year, 100, b, c); divide(b, 4, Easter day, given year); divide(19 × a + b - Easter day + 15 - ((8 × b + 13) ÷ 25), 30, Easter month, h); divide(c, 4, b, Easter day); divide(2 × (given year + b) - h - Easter day + 32, 7, Easter month, c); h := h + c - 7 × ((a + 11 × h + 19 × c) ÷ 433); Easter month := (h + 90) ÷ 25; divide(33 × Easter month + h + 19, 32, b, Easter day) end get the date of Easter Sunday; procedure show a range of dates (first year, final year); value first year, final year; integer first year, final year; begin integer this year; for this year := first year step 1 until final year do begin get the date of Easter Sunday(Easter day, Easter month, this year); write text(30, [In*]); write(30, format([dddds_]), this year); write text(30, [Easter*Sunday*is*on*]); write(30, format([dd_]), Easter day); write text(30, [/]); write(30, format([dd_]), Easter month); write text(30, [*and*KDF9*is_]); write(30, format([s-nd_]), this year - 1964); write text(30, [*years*old_[c_]]); end end show a range of dates; integer Easter day, Easter month, data year; open(20); data year := read(20); close(20); write text(30, [These*are*the*21*years*of*KDF9:[c_]]); show a range of dates (1960, 1980); if data year > 2009 then begin write text(30, [These*are*the*years*of*ee9:[c_]]); show a range of dates (2009, data year); end; write text(30, [These*are*the*next*21*years_]); if data year > 2020 then write text(30, [*(making*optimistic*assumptions)]); write text(30, [[c_]]); show a range of dates (data year + 1, data year + 21); close(30); end | 2021; |