4.16 Voorbeeld: paasdatum

Pasen valt elk jaar op een verschillende zondag. Volgens de kerkelijke regel valt Pasen op de eerste zondag na de eerste volle maan na 21 maart. Er moet een programma komen dat een lijstje afbeeldt met de paasdata voor de jaren 1999 tot en met 2005.

 4/04/1999: Pasen
23/04/2000: Pasen
15/04/2001: Pasen
31/03/2002: Pasen
20/04/2003: Pasen
11/04/2004: Pasen
27/03/2005: Pasen
  

Voor het bepalen van de paasdatum bestaat een algoritme. Het structuurdiagram Bereken-paasdatum beschrijft dit algoritme. Deze subroutine verwacht dat de variabele jaartal gevuld is met een getal uit de reeks 1900 - 2099. Als resultaat van de subroutine zijn de variabelen paasdag en paasmaand gevuld.

Opgave 4.33 van het werkboek is een vervolg op dit voorbeeld en vraagt als uitbreiding op dit programma om de dag en de maand van hemelvaartsdag en pinksteren te berekenen.

Figuur 4.9 PSD Herhaling

PSD

Figuur 4.10 PSD Bepaalpaasdatum

PSD

illustratie: Geert Nijmolen

cartoon

 IDENTIFICATION DIVISION
 PROGRAM-ID. Paasdatum.
*Auteur: Andree Hollander
*Datum:  1988/06/21

 DATA DIVISION.
 WORKING-STORAGE SECTION.
 01 hulpvariabelen.
    02 A                pic 99.
    02 B                pic 9.
    02 C                pic 99.
    02 D                pic 99.
    02 E                pic 9.
    02 F                pic S99.
    02 doet-er-niet-toe pic 9.
    02 tussenresultaat  pic 999.
 01 paasvariabelen.
    02 paasmaand        pic 9.
    02 paasdag          pic 99.
 01 afdrukregel.
    02 dag              pic Z9/.
    02 maand            pic 99/.
    02 jaar             pic 9(4).
    02 filler           pic XX value ": ".
    02 feest            pic X(15).

 PROCEDURE DIVISION.
 Herhaling.
     Perform with test before 
     varying jaartal from 1999 by 1 until jaartal > 2005
        perform Bepaal-Paasdatum
        move paasdag to dag
        move paasmaand to maand
        move "Pasen" to feest
        display afdrukregel
     end-perform
     stop run.

 Bepaal-Paasdatum.
* Algoritme van de wiskundige Gauss
     divide jaar by 19 giving doet-er-niet-toe remainder A
     divide jaar by  4 giving doet-er-niet-toe remainder B
     divide jaar by  7 giving doet-er-niet-toe remainder C
     compute tussenresultaat = 19 * A + 24
     divide tussenresultaat by 30 giving doet-er-niet-toe
         remainder D
     compute tussenresultaat = 5 + 2 * B + 4 *C + 6 * D
     divide tussenresultaat by  7 giving doet-er-niet-toe
         remainder E
     compute F = D + E - 9
     if F > 0 then
        move 4 to paasmaand
        if F = 26 then
           move 19 to paasdag
        else
           if F = 25 and D = 28 then
              move 18 to paasdag
           else
              move F to paasdag
           end-if
        end-if
     else
        move 3 to paasmaand
        add F to 31 giving paasdag
     end-if.
  
omslag leerboek

Serie: leerboeken informatica

Titel: Tijd voor COBOL 1

Auteur: Andree Hollander

naamlogo