We gaan uit van de tabel uit de vorige paragraaf. We willen het totaal aantal geslaagden weten van alle jaren en van alle examens. We moeten dan alle elementen van de tabel bij elkaar optellen. In het volgende stukje gebeurt dat via een herhalingsstructuur binnen een andere herhalingsstructuur.
move zero to totaal perform with test after varying jaar-subs from 1 by 1 until jaar-subs >= 3 perform with test after varying examen-subs from 1 by 1 until examen-subs >= 4 add examen(jaar-subs, examen-subs) to totaal end perform end perform
We beginnen met het op nul zetten van het veld totaal. Daarna lopen we alle drie de jaren af en van elk jaar alle vier examens. De gegevens van elk examen tellen we bij het totaal op.
Dit is een eenvoudige en duidelijke methode. Er is eigenlijk weinig reden om het anders te doen, maar stel dat we niet met in-line performs werken, maar met het aanroepen van paragrafen. De totaalbepaling wordt dan:
move zero to totaal perform examen-afhandelen with test after varying jaar-subs from 1 by 1 until jaar-subs >= 3. examen-afhandelen. perform optellen with test after varying examen-subs from 1 by 1 until examen-subs >= 4. optellen. add examen(jaar-subs, examen-subs) to totaal.
In deze situatie hebben we veel paragrafen nodig. COBOL kent een iets kortere schrijfwijze. De twee perform-opdrachten worden dan samengevoegd. Zo ontstaat een versie van perform met after.
perform optellen with test after varying jaar-subs from 1 by 1 until jaar-subs >= 3 after examen-subs from 1 by 1 until examen-subs >= 4. optellen. add examen(jaar-subs, examen-subs) to totaal.
In deze versie van de perform geven we informatie over twee te variëren subscripts. De eerste is jaar-subs. Hij loopt van 1 naar 3. Bij elke waarde van jaar-subs doorloopt de tweede subscript, examen-subs, de waarden 1 tot en met 4. De tweede subscript varieert dus het snelst. We kunnen dit als volgt weergeven
jaar-subs 1 1 1 1 2 2 2 2 3 3 3 3 examen-subs 1 2 3 4 1 2 3 4 1 2 3 4
onthoud
Een perform met after mogen we alleen gebruiken bij een out-of-line perform, dus niet bij een in-line perform.