IDENTIFICATION DIVISION.
*
PROGRAM-ID. EASTER.
*
DATE-WRITTEN. 08/30/98.
*
* Calculate Date of Easter.
*
* *******************************
* * *
* * Judson D. McClendon *
* * Sun Valley Systems *
* * 4522 Shadow Ridge Pkwy *
* * Pinson, AL 35126-2192 *
* * 205-680-0460 *
* * *
* *******************************
*
ENVIRONMENT DIVISION.
*
DATA DIVISION.
*
WORKING-STORAGE SECTION.
*
*
*
******************************************************************
* *
* E A S T E R W O R K A R E A *
* *
******************************************************************
*
01 EASTER-WORK-AREA.
03 EW-DATE PIC 9(08) VALUE ZEROS.
03 EW-DATE-X REDEFINES EW-DATE.
05 EW-YEAR PIC 9(04).
05 EW-MONTH PIC 9(02).
05 EW-DAY PIC 9(02).
03 EW-GOLDEN-NBR PIC 9(06).
03 EW-CENT PIC 9(03).
03 EW-LEAP-CENT PIC 9(06).
03 EW-LUNAR-CORR PIC 9(08).
03 EW-SUNDAY-CORR PIC 9(08).
03 EW-EPACT PIC 9(08).
03 EW-FULL-MOON PIC 9(08).
03 EW-WORK1 PIC 9(08).
03 EW-WORK2 PIC 9(08).
03 EW-MONTH-NAMES VALUE
"JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC".
05 EW-MONTH-NAME OCCURS 12 TIMES
PIC X(03).
*
PROCEDURE DIVISION.
*
*
000000-CONTROL.
*
DISPLAY "ENTER YEAR FOR EASTER".
ACCEPT EW-YEAR.
*
PERFORM 001000-EASTER-CALC
THRU 001000-EXIT.
*
DISPLAY "EASTER FALLS ON "
EW-MONTH-NAME(EW-MONTH)
" "
EW-DAY.
*
000000-EXIT.
STOP RUN.
*
*
*
******************************************************************
* *
* E A S T E R C A L C *
* *
* *
* CALCULATES THE DATE OF EASTER FOR ANY DATE IN THE *
* GREGORIAN CALENDAR. *
* *
* USAGE: MOVE <EASTER YEAR> TO EW-YEAR. *
* PERFORM 001000-EASTER-CALC *
* THRU 001000-EXIT. *
* *
* RESULT: EW-DATE = DATE OF EASTER IN YYYYMMDD FORM. *
* *
******************************************************************
*
001000-EASTER-CALC.
*
**** COMPUTE EW-GOLDEN-NBR =
**** FUNCTION REM (EW-YEAR, 19) + 1.
DIVIDE 19 INTO EW-YEAR GIVING EW-WORK1
REMAINDER EW-GOLDEN-NBR.
ADD 1 TO EW-GOLDEN-NBR.
*
COMPUTE EW-CENT =
(EW-YEAR / 100) + 1.
*
COMPUTE EW-LEAP-CENT =
((3 * EW-CENT) / 4) - 12.
*
COMPUTE EW-LUNAR-CORR =
((8 * EW-CENT + 5) / 25) - 5.
*
COMPUTE EW-SUNDAY-CORR =
((5 * EW-YEAR) / 4) - EW-LEAP-CENT - 10.
*
**** COMPUTE EW-EPACT =
**** FUNCTION REM ((11 * EW-GOLDEN-NBR + 20
**** + EW-LUNAR-CORR - EW-LEAP-CENT), 30).
COMPUTE EW-EPACT =
11 * EW-GOLDEN-NBR + 20 + EW-LUNAR-CORR - EW-LEAP-CENT.
DIVIDE 30 INTO EW-EPACT GIVING EW-WORK1
REMAINDER EW-EPACT.
*
IF (EW-EPACT = 24)
OR
( (EW-EPACT = 25)
AND
(EW-GOLDEN-NBR > 11) )
ADD 1 TO EW-EPACT.
*
COMPUTE EW-FULL-MOON = 44 - EW-EPACT.
IF (EW-FULL-MOON < 21)
ADD 30 TO EW-FULL-MOON.
*
**** COMPUTE EW-DAY =
**** EW-FULL-MOON + 7
**** - FUNCTION REM ((EW-SUNDAY-CORR + EW-FULL-MOON), 7).
ADD EW-SUNDAY-CORR EW-FULL-MOON GIVING EW-WORK1.
DIVIDE 7 INTO EW-WORK1 GIVING EW-WORK2
REMAINDER EW-WORK1.
COMPUTE EW-DAY =
EW-FULL-MOON + 7 - EW-WORK1.
*
IF (EW-DAY > 31)
MOVE 4 TO EW-MONTH
SUBTRACT 31 FROM EW-DAY
ELSE
MOVE 3 TO EW-MONTH.
MOVE EW-YEAR TO EW-YEAR.
*
001000-EXIT.
EXIT.
¤ Dauer der Verarbeitung: 0.15 Sekunden
(vorverarbeitet)
¤
|
Haftungshinweis
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.
|