'EASTER.BAS '17 April 1995 by Marc Kummel aka Treebeard. 'Contact mkummel@rain.org, http://www.rain.org/~mkummel/ ' 'Use O'Beirne algorithm to calculate date of Easter Sunday. 'Only works for years 1900-2099 (but doesn't complain). 'From Eric Burgess, _Celestial Basic_, p.15f ' 'This code is freeware. For more interesting BASIC software with source 'code, check out Treebeard's Basic Vault on the Web at ' http://www.rain.org/~mkummel/basic/ '--------------------------------------------------------------------------- CONST loyear = 1900: hiyear = 2099 CONST maxcount = 34 REDIM dcnt%(maxcount) REDIM ycnt%(loyear TO hiyear) 'Uncomment to make table for 1900-2099 ' GOSUB Main2 ' END Main: CLS PRINT "Enter year or press to quit." PRINT DO INPUT "figure Easter for year: ", year% IF year% = 0 THEN EXIT DO GOSUB FigureEaster PRINT "Easter Sunday in"; year%; "is "; month$; day%, count%; " days after equinox" PRINT LOOP END Main2: CLS FOR year% = loyear TO hiyear GOSUB FigureEaster PRINT "Easter Sunday in"; year%; "is "; month$; day%, "count ="; count% dcnt%(count%) = dcnt%(count%) + 1 ycnt%(year%) = count% NEXT year% END FigureEaster: n = year% - 1900 a = n / 19 a = 19 * (a - INT(a)) b = INT((7 * a + 1) / 19) m = (11 * a + 4.0001 - b) / 29 x = m - INT(m) m = 29 * x q = INT(n / 4) w = (n + q + 31 - m) / 7 w = 7 * (w - INT(w)) w = INT(w) d% = INT(25 - m - w) DO WHILE d% < -9 d% = d% + 9 LOOP IF d% > 0 THEN month$ = "April" day% = d% ELSE month$ = "March" day% = 31 - ABS(d%) END IF 'kludge to add 1 extra week. Round-off error somewhere? SELECT CASE year% CASE 1902, 1906, 1930, 1943, 1950 d% = d% + 7 day% = day% + 7 CASE 1957, 1970, 1974, 1977, 1984, 1997 d% = d% + 7 day% = day% + 7 CASE 2001, 2011, 2025, 2038, 2045 d% = d% + 7 day% = day% + 7 CASE 2052, 2055, 2065, 2069, 2072, 2079, 2092, 2096, 2099 d% = d% + 7 day% = day% + 7 CASE 1926, 1994, 2021, 2075, 2089 d% = d% + 7 day% = day% + 7 - 31 month$ = "April" END SELECT count% = d% + 9 RETURN