Elke keer als iemand duizend dagen heeft geleefd, bereikt hij of zij een mijlpaal. Het programma mijlpalen bepaalt voor een persoon de dag waarop de eerstvolgende mijlpaal wordt bereikt.
Er zijn drie programma's bij de berekening betrokken. Een hoofdprogramma en twee subprogramma's. Elk van de drie programma's wordt apart gecompileerd.
illustratie: Geert Nijmolen
identification division. program-id. mijlpalen. *dit programma vraagt om een naam en geboortedatum; *laat de datum van de eerstvolgende mijlpaal uitrekenen *door subprogramma's en drukt de berekende datum af. *Andree Hollander; 1988/08/29 data division. working-storage section. 01 geboortedatum pic x(06). 01 mijlpaaldatum pic x(06). 01 huidige-datum pic x(06). 01 dagen-nu pic 9(05). 01 dagen-mijlpaal pic 9(05). 01 dagen-geboren pic 9(05). 01 dagen-oud pic 9(05). 01 duizendtal redefines dagen-oud pic 9(02). * duizendtal zijn de eerste twee posities van dagen-oud 01 volgende-mijlpaal pic 9(05). procedure division. structuur. perform gegevens-invoer perform berekeningen perform uitvoer stop run. gegevens-invoer. display "Eerstvolgende mijlpaal van een persoon." display "Geef geboortedatum in de vorm JJMMDD" accept geboortedatum accept huidige-datum from date. berekeningen. call "aantal-dagen" using by content huidige-datum by reference dagen-nu call "aantal-dagen" using by content geboortedatum by reference dagen-geboren compute dagen-oud = dagen-nu - dagen-geboren compute volgende-mijlpaal = (duizendtal + 1) * 1000 compute dagen-mijlpaal = dagen-geboren + volgende-mijlpaal call "bereken-datum" using by reference mijlpaaldatum by content dagen-mijlpaal. uitvoer. display "Eerstvolgende mijlpaal is " dagen-mijlpaal " dagen en wordt bereikt op " mijlpaaldatum. identification division. program-id. aantal-dagen. *dit subprogramma ontvangt een datum en berekent het aantal *dagen dat op die datum verstreken is sinds 1 jan 1901. data division. working-storage section. 01 maanddagen-tabel. 03 maanddagen pic 999, occurs 12 times. 01 rest pic 9. 01 dummy pic 99. linkage section. 01 datum. 03 jaar pic 99. 03 maand pic 99. 03 dag pic 99. 01 dagen pic 99999. procedure division using datum, dagen. berekening. divide jaar by 4 giving dummy remainder rest if rest = 0 then move "000031060091121152182213244274305335" to maanddagen-tabel else move "000031059090120151181212243273304334" to maanddagen-tabel end-if compute dagen = (jaar - 01) * 365.25 + maanddagen(maand) + dag exit program. identification division. program-id. bereken-datum is initial program. *dit subprogramma ontvangt een aantal dagen dat verstreken *is sinds 1 jan 1901 en berekent de bijbehorende datum. data division. working-storage section. 01 maanddagen-tabel value "312831303130313130313031" 03 maanddagen pic 99, occurs 12 times. 01 rest pic 9. 01 tijdelijk pic 99999. linkage section. 01 datum. 03 jaar pic 99. 03 maand pic 99. 03 dag pic 99. 01 dagen pic 99999. procedure division using datum, dagen. berekening. compute jaar = dagen / 365.25 compute tijdelijk = jaar * 365.25 compute dag = dagen - tijdelijk add 1 to jaar divide jaar by 4 giving tijdelijk remainder rest if rest = 0 then move 29 to maanddagen(2) end-if move 1 to maand perform with test before until dag < maanddagen(maand) subtract maanddagen(maand) from dag add 1 to maand end-perform exit program.