Een programma laten stoppen met herhalen
Een lus herhaalt opdrachten. Een zolang-lus controleert vóór elke ronde een voorwaarde. Hij herhaalt alleen zolang die voorwaarde waar is. Om te stoppen moet iets ervoor zorgen dat de voorwaarde uiteindelijk onwaar wordt.
Beantwoord vóór het schrijven drie vragen: Waar begin ik? Wat verandert er elke ronde? Wanneer moet ik stoppen?
Tel af voor een lancering
Denk aan een aftelling: drie, twee, één, lancering. Als de omroeper steeds drie zegt en het getal nooit verlaagt, komt de lancering nooit.
Hetzelfde kan in een programma gebeuren. Een voorwaarde wordt opnieuw gecontroleerd, maar door die controle veranderen de waarden niet vanzelf.
Schrijf een stopvoorwaarde
# taal: nl
laat resterend = 3
zolang resterend > 0:
zeg resterend
zet resterend = resterend - 1
zeg "Lancering!"
De beginwaarde is drie. Elke ronde trekt één af. Wanneer de waarde nul wordt, is resterend > 0 onwaar. Het programma gaat dan verder na de lus. Dit voorbeeld wacht niet tussen de berichten: ze verschijnen snel achter elkaar.
Voorspel en probeer
Zal de lus ook nul tonen?
3
2
1
Lancering!
Nee. De volgende controle gebeurt voordat de lus nul zou kunnen tonen. Als de beginwaarde al nul was, zou de inhoud van de lus helemaal niet worden uitgevoerd.
Jouw uitdaging
Begin bij vijf. Verander daarna de regel zodat nul ook verschijnt. Welke vergelijking heb je daarvoor nodig? Volg beide versies op papier, zodat je precies ziet wanneer ze stoppen.
Een veelgemaakte fout
Als je het aftrekken vergeet, blijft resterend hetzelfde. In de logica van het programma ontstaat dan een oneindige lus. Je hoeft die niet uit te voeren om het probleem te onderzoeken: een volgtabel laat het al zien. Gebruik Stop als een programma onverwacht blijft draaien.
Pliro heeft uitvoergrenzen om vastlopende herhalingen te helpen opvangen. Een bereikte grens is een aanwijzing om de stopregel te bekijken, niet om steeds de grens te verhogen. In een interactief spel kan een lus bewust blijven lopen totdat een speler stopt. Ook dan zijn een stopmogelijkheid en passend wachten of gebeurtenisafhandeling nodig.
