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;
|