'===========================================================================
' Subject: When is Easter                     Date: 06-16-02 (  :  )       
'  Author: David Williams                     Code: Qbasic,QB,PDS          
'  Origin: david.williams@ablelink.org      Packet: DATETIME.ABC
'===========================================================================
' EASTER.BAS 
' Calculates (Gregorian-calendar) month and day of Easter Sunday. 
  
' QBASIC code by David Williams, 2002 
' david.williams@ablelink.org 
  
' Algorithm includes all rules for finding Easter, as 
' used in western countries. 
  
DECLARE SUB EaSun (Year%, Month%, Day%) 
  
DEFINT A-Z 
  
CLS 
  
PRINT "Easter Sunday calculator." 
PRINT 
PRINT "Hit <ENTER> to quit." 
  
DO 
  
  PRINT 
  INPUT "What year"; Y$ 
  IF Y$ = "" THEN EXIT DO 
  Year = VAL(Y$) 
  PRINT 
  
  IF Year >= 1582 THEN 
  
    CALL EaSun(Year, Month, Day) 
  
    IF Month = 3 THEN 
      M$ = "March" 
    ELSE ' Month must be 4 
      M$ = "April" 
    END IF 
  
    PRINT "In the year"; STR$(Year); 
    PRINT ", Easter Sunday is on "; M$; STR$(Day); "." 
  
  ELSE 
  
    BEEP 
    PRINT "Gregorian calendar not used before 1582." 
  
  END IF 
  
LOOP 
  
END 
  
SUB EaSun (Year, Month, Day) ' Finds month and day of Easter Sunday 
  
  J = Year MOD 19 
  K = Year \ 100 
  L = Year MOD 100 
  M = K \ 4 
  N = K MOD 4 
  O = L \ 4 
  P = L MOD 4 
  Q = (8 * K + 13) \ 25 
  R = (19 * J + K - M - Q + 15) MOD 30 
  S = (J + 11 * R) \ 319 
  T = (2 * (N + O) - P - R + S + 32) MOD 7 
  U = R - S + T 
  
  Month = (U + 90) \ 25 
  Day = (U + Month + 19) MOD 32 
  
END SUB 
  
