_TITLE "Calculate Easter Sunday For Any Year" ' PROGRAM: EASTER SUNDAY
' ***************************************************************************************
' THIS PROGRAM CALCULATES THE DATE EASTER FALLS ON FROM
' 1583 TO AN INFINITE FUTURE DATE.
' ORIGINAL CODE FROM COMMODORE 64 TO QB64
'
' ORIGINAL PROGRAM FOR 8-BIT COMPUTERS BY BY ERIC BURGESS F.R.A.S. (NOV, 1984)
' CODE IS FROM THE BOOK "CELESTIAL BASIC" BY ERIC BURGESS (REVISED IN 1985)
'
' MODIFIED TO RUN IN QB64 BY GEORGE MCGINN (SEPT, 2020)
' REWORKED THE CODE TO BE MORE STRUCTURED THAN IT WAS WITH ITS ORIGINAL LINE NUMBERS
' ALSO REMOVED THE FORMULA THAT CALCULATED MOD AS QB64 HAS A MOD STATEMENT
' ADDED A SECTION TO DIPLAY INFO BOXES (showAbout).
' ***************************************************************************************
MAIN_LOGIC:
EXPLANATION:
'***************************************************************************************************
' *** Show the about box. Comment out the next line to prevent the About alert
' *** from showing up when the program starts.
result = showAbout(1)
PAUSE
INTRODUCTION:
result = showAbout(2)
PRINT "AN ASTRONOMY PROGRAM" PRINT "*********************" PRINT "* EASTER SUNDAY *" PRINT "*********************" PRINT "BY ERIC BURGESS F.R.A.S." PRINT "ALL RIGHTS RESERVED BY" PRINT "S+T SOFTWARE SERVICES" PRINT "AMERICAN ONLY. INC." PRINT TAB(5);
"ORIGINAL CODE: NOVEMBER 1984" PRINT TAB(5);
"FROM THE BOOK 'CELESTIAL BASIC' BY ERIC BURGESS (REVISED IN 1985)" PRINT "MODIFIED BY GEORGE MCGINN FOR QB64" PRINT TAB(5);
"MODIFIED CODE: SEPTEMBER 2020 + MARCH 2021"
GET_EXPLANATION:
INPUT "DO YOU WANT AN EXPLANATION? Y/N "; A$
RETRIEVE_YEAR:
INPUT "YEAR (REQURED-YYYY) "; Y
PRINT "YEAR MUST BE AFTER 1582"
WEBB_ALGORITHM:
'*** START OF WEBB ALGORITHM
QC = .05: QX = Y / .8: B1 = 19: B2 = 30: B3 = 7: Y2 = Y / 100
L
= INT((Y
/ B1
- INT(Y
/ B1
)) * B1
+ QC
) * SGN(Y
/ B1
) A
= (11 * (L
+ 4) + INT(.32 * (1 + INT(Y2
)) + .2) - INT(.75 * (1 - INT(Y2
)))) E
= INT((A
/ B2
- INT(A
/ B2
)) * B2
+ QC
) * SGN(A
/ B2
) IF E
<= (L
/ 10) THEN E
= E
+ 1 F
= INT(QX
) - E
+ 3 - INT(.75 * (1 - INT(YZ
))) F2
= INT((F
/ B3
- INT(F
/ B3
)) * B3
- QC
) * SGN(F
/ B3
) D = 26 - E - F2
D = D + 31
M = 3
M$ = "MARCH"
M = 4
M$ = "APRIL"
'*** END OF WEBB ALGORITHM
DISPLAY_EASTER_DATE:
'*** DISPLAYS THE DATE EASTER FALLS ON THE YEAR SELECTED
PRINT "EASTER SUNDAY IN "; Y;
" IS ON ... "; M$;
" "; D
ENDPROCESS:
'*** END OF PROGRAM ROUTINE OR PROCESS ANOTHER YEAR
INPUT "DO YOU WANT ANOTHER YEAR "; A$
endPROG:
PRINT "Thanks for using the EASTER SUNDAY date program."
'*************************************************************************************
'*** SUBROUTINES AND FUNCTIONS
'
' =============================== PAUSE ================================
' The Pause subprogram simply creates a pause in the action until the
' user presses a key at the keyboard
' ======================================================================
'*************************************************************************************
' Shows different About alerts when the program calls it with a parameter.
about$
= "" + CHR$(10) + "THIS PROGRAM CALCULATES THE DATE" about$
= about$
+ CHR$(10) + "OF EASTER SUNDAY FOR ANY YEAR" about$
= about$
+ CHR$(10) + "AFTER 1582." about$
= about$
+ CHR$(10) + CHR$(10) + "THE PROCESS TO CALULATE EASTER WAS" about$
= about$
+ CHR$(10) + "BASED ON AN ADAPTATION OF:" about$
= about$
+ CHR$(10) + " THE WEBB ALGORITHM" about$
= about$
+ CHR$(10) + CHR$(10) + "PRESS [OK] TO CONTINUE " about$
= "" + CHR$(10) + "AN ASTRONOMY PROGRAM" about$
= about$
+ CHR$(10) + CHR$(10) + "EASTER SUNDAY" about$
= about$
+ CHR$(10) + " _______________" about$
= about$
+ CHR$(10) + CHR$(10) + "BY ERIC BURGESS F.R.A.S." about$
= about$
+ CHR$(10) + "ORIGINAL CODE: NOVEMBER 1984" about$
= about$
+ CHR$(10) + "FROM THE BOOK 'CELESTIAL BASIC' BY ERIC BURGESS (REVISED IN 1985)" about$
= about$
+ CHR$(10) + "ALL RIGHTS RESERVED BY" about$
= about$
+ CHR$(10) + "S+T SOFTWARE SERVICES" about$
= about$
+ CHR$(10) + "A DIVISION OF" about$
= about$
+ CHR$(10) + "AMERICAN ONLY. INC." about$
= about$
+ CHR$(10) + CHR$(10) + "MODIFIED BY GEORGE MCGINN FOR TECHBASIC/QB64" about$
= about$
+ CHR$(10) + "MODIFIED CODE: SEPTEMBER 2020 + MARCH 2021" about$
= about$
+ CHR$(10) + CHR$(10) + "PRESS [OK] TO CONTINUE "