4.12 Perform met lopende variabele

In figuur 4.6 zie je een herhalingsstructuur in de vorm van een programmastructuurdiagram.

Figuur 4.6 Lusbesturing

psd

Een herhalingsstructuur noemt men ook wel eens een lus, of met een Engels woord een loop. Zulke structuren kwamen we al vaker tegen. Het volgende voorbeeld geeft als uitvoer de even getallen tot en met tien. Met de opdrachten die we tot nu toe hebben geleerd, kunnen we dit schemaatje als volgt coderen:

    move 2 to aantal
    perform with test before until aantal > 10
       add 2 to aantal
       display aantal
    end-perform
  

De variabele aantal zorgt voor de lusbesturing. Dat betekent dat aantal er voor zorgt dat de herhaling stopt. Dat gebeurt met de voorwaarde aantal > 10. Aantal krijgt als beginwaarde vooraf de waarde 2. In de herhaling stijgt de waarde van aantal telkens met 2. We noemen aantal: de lopende variabele. Hij loopt met alle herhalingen mee.

Een lopende variabele is meestal te herkennen aan drie verschijningsvormen:
- de variabele krijgt een beginwaarde voordat de herhaling wordt ingezet;
- de variabele verandert van waarde in de herhalingsstructuur;
- de variabele komt voor in de voorwaarde die de herhaling regelt.

Een herhaling met een lopende variabele komt zo vaak voor dat de meeste programmeertalen er een apart statement voor hebben. COBOL ook; die gebruikt daarvoor een variant van de perform-opdracht. In een enkele opdracht zit nu de gehele lusbesturing opgesloten:

    perform with test before 
            varying aantal from 2 by 2 until aantal > 10
       display aantal
    end-perform
  

onthoud

De perform-opdracht met varying is een speciale vorm van een herhalingsstructuur. Achter varying staat de naam van de lopende variabele. Achter from staat de beginwaarde. Achter by staat de verandering. Achter until staat de eindvoorwaarde.

Heel compact is deze manier van schrijven met varying in de perform-opdracht. In het voorbeeld blijft er, behalve de perform-opdracht zelf, alleen nog een display-opdracht over. We stoppen met de herhaling als de lopende variabele groter is dan de eindwaarde.

Wat gebeurt er precies bij zo'n perform met lopende variabele? Dat is bij with test before een beetje anders dan bij with test after. Allereerst de test vooraf. In de vorm van een PSD is de gang van zaken zoals in figuur 4.7 staat.

Figuur 4.7 Perform met de test vooraf

psd

In de vorm met de test achteraf is het verschil dat de opdrachten minstens één keer worden uitgevoerd. Pas daarna kijkt de computer naar de voorwaarde.

Figuur 4.7 Perform met de test vooraf

psd

Let erop dat de test plaatsvindt meteen nadat de opdrachten zijn uitgevoerd en voordat de lopende variabele een nieuwe waarde krijgt. Dat heeft gevolgen voor de conditie. Bij de test achteraf moeten we stoppen als de lopende variabele gelijk is aan de eindwaarde.

    perform with test after 
            varying aantal from 2 by 2 until aantal = 10
       display aantal
    end-perform
  

Als de variabele aantal gelijk is aan 10, moeten we stoppen met herhalen. Die waarde is dan namelijk al afgedrukt. We testen immers achteraf.

De opdrachten die herhaald moeten worden, kunnen in een aparte paragraaf staan. End-perform is dan overbodig.

     perform een-heleboel-opdrachten 
     varying temperatuur from -10 by 3 until temperatuur > 10
     stop run.

 een-heleboel-opdrachten.
*    deze paragraaf bevat een lange reeks opdrachten;
*    maar welke dat zijn, is voor het voorbeeld niet van belang
  

We zien dat na perform de naam van een paragraaf staat. Deze paragraaf heet een-heleboel-opdrachten. Hij wordt zeven keer uitgevoerd. De eerste keer heeft temperatuur (de lopende variabele) de waarde -10. De tweede keer -7 en daarna achtereenvolgens -4, -1, 2, 5 en 8.

omslag leerboek

Serie: leerboeken informatica

Titel: Tijd voor COBOL 1

Auteur: Andree Hollander

naamlogo