Nog meer lussen!


We hebben al de while en de do-while lussen gezien. Met deze twee hebben we meer dan genoeg om alle repeterende delen te programmeren. Bij beide soorten kun je allerlei voorwaarden stellen voor het beëindigen van de lus. Dat is zeker handig als je niet weet hoeveel maal een lus doorlopen moet worden, of als dat afhankelijk is van andere dingen in het programma. Er zijn echter ook veel gevallen waar we precies weten hoeveel keer we een lus willen doorlopen. En voor deze gevallen maken we gebruik van de for lus. Eigenlijk is een for lus niet meer dan een verkorte schrijfwijze van een while lus.

We illustreren het principe aan de hand van het volgende programma, dat verdacht veel lijkt op project_1.2.

Vierkanstwortels van even getallen kleiner dan 10.

Vierkanstwortels van even getallen kleiner dan 10.

Het programma ziet er als volgt uit:

De geheimen van de for lus.

De geheimen van de for lus.

Merk op dat we weer y niet initialiseren en dat de windows IDE daarover klaagt.

De enige lijn die we nog niet kennen is lijn 15. Daar wordt de for lus gedefinieerd. Eigenlijk spreekt het een beetje vanzelf wat er gebeurd. We schrijven: for (int x = 0; x < 10; x = x + 2).
Het keyword “for” definieert uiteraard een for lus. Alles wat tussen { en } staat is het for blok, net als bij het while en do-while commando.

We definiëren een aantal dingen in één keer, tussen de haakjes na het for keyword.

  • Eerst komt int x = 0. We definiëren hier dus een variabele x van het type integer, en initialiseren die met de waarde 0.
  • Dan komt de voorwaarde of test: x < 10, of x kleiner dan 10. Zolang x inderdaad kleiner is dan 10, zullen we de instructies binnen het for blok uitvoeren (trekken van de vierkantswortel en het resultaat op het scherm schrijven). Als x gelijk of groter is dan 10, stoppen we met het for blok en gaan we verder met de daaropvolgende instructie.
  • Als laatste schrijven we x = x + 2. Dit statement zorgt er voor dat er telkens 2 bij de huidige waarde van x geteld wordt, zolang de lus loopt. Ook hier hadden we x++ kunnen gebruiken, maar dan zou er telkens slechts 1 bij x worden opgeteld (probeer maar eens!).

Merken we nog op dat de variabele x slechts bestaat binnen het for blok, omdat hij in dat blok gedefinieerd is. Algemeen kan men stellen dat een variabele alleen gekend is binnen het blok waarin hij gedefinieerd is. Moest u na de for lus proberen de waarde van variabele x op het scherm te tonen, dan zal uw programma niet compileren. U krijgt een fout, waar de computer u zegt dat x “out of scope” is. Meer over scope later.

Tips

  • Typ het programma over. Dit helpt om de commando’s te leren, en je zult ze dan ook sneller onthouden.
  • Als het programma niet wil compileren, kijk na of je alles precies hebt overgetypt, en kijk vooral na of je nergens een puntkomma vergeten bent.
  • Maak u vooral geen zorgen als u niet alles direct begrijpt, dat komt wel. Als het echt niet gaat, schrijf u in op het forum en stel uw vraag daar.

U kunt de code hier downloaden, deze is voorzien van extra commentaar.

Vragen kunnen gesteld worden op het forum – op het C++ board.

Opdracht

  • Maak een nieuw project aan, met daarin een file “main”. Noem het “project_1.5”.
  • Typ het programma over en compileer.
  • Probeer het projekt 1.2 te herschrijven, ook de opdracht, maar gebruik nu for lussen.
  • Probeer eens een programma te maken dat de volgende uitvoer op het scherm zet (tip: gebruik 2 for lussen, de ene binnenin de andere, en gebruik de waarde van de variabele van de eerste for lus in de voorwaarde van de tweede lus). De oplossing staat bij de code download, maar niet valsspelen, eerst zelf proberen!
Sterretjes, met 2 for lussen ineen (geneste lussen).

Sterretjes, met 2 for lussen ineen (geneste lussen).

Advertisements

About justtheengineer

Ingenious engineer, slightly dotty...
This entry was posted in Cursus and tagged , , , , . Bookmark the permalink.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s