Hoe programmeer je loops in C++?
In een computerprogramma is het soms noodzakelijk dat bepaalde stukken code meer dan eens worden uitgevoerd. Daarbij maak je in de programmeertaal C++ vaak gebruik van conditionele lussen, ook wel 'loops' genoemd. Er zijn verschillende soorten loops mogelijk, bijvoorbeeld while en for. Hoe implementeer je ze?
Artikelindeling
While
Deze loop wordt uitgevoerd zolang de gegeven conditie (soms ook expressie genoemd) waar is. Zodra de conditie onwaar is, verlaat het programma de loop en gaat verder met het verwerken van de rest van de broncode. In het geval dat de conditie de eerste keer al onwaar is, wordt de code in de loop nul keer uitgevoerd.
Voorbeeld:
#include <iostream>
int main(){
int a = 3;
while(a>1)
{
std::cout << "Nog " << a << " seconden voor lancering van de raket." << std::endl;
a--;
}
std::cout << "Goede reis naar de maan!" << std::endl;
std::cin.get();
return 0;
}
We initialiseren een variabele genaamd 'a' van het datatype integer met waarde '3' (int a=3) en verminderen in de loop de waarde hiervan met '1' (a--). Het is duidelijk dat de conditie van de while loop (a>1) de eerste twee keer dat het wordt doorlopen waar is, want drie is groter dan één en twee is ook groter dan één. De uitvoer van het programma is dan ook als volgt:
Nog 3 seconden voor lancering van de raket.
Nog 2 seconden voor lancering van de raket.
Goede reis naar de maan!
Do while
Een do while loop lijkt op de vorige, met als verschil dat de code minstens eenmaal wordt uitgevoerd, ongeacht of de conditie waar of onwaar is.
Voorbeeld:
#include <iostream>
int main(){
int b = 3;
do
{
std::cout << "Ik heb " << b << " appels." << std::endl;
b += 2;
}while(b<5);
std::cin.get();
return 0;
}
De variabele 'b' heeft de eerste keer de waarde drie (int b=3). Vervolgens wordt b met twee verhoogd (b += 2, alhoewel b = b + 2 ook correct is) en is dus gelijk aan vijf en niet minder dan vijf. De conditie 'b<5' is nu niet meer waar. De uitvoer is kort maar krachtig:
Ik heb 3 appels.
For
Een for loop bestaat uit drie condities gescheiden door een puntkomma: begin, eind en teller. Zolang nog niet aan de eindconditie is voldaan, wordt de code uitgevoerd.
Voorbeeld:
#include <iostream>
int main(){
for(int c = 1; c<4; c++)
{
std::cout << "Aantal gekochte boeken: " << c << std::endl;
}
std::cin.get();
return 0;
}
De beginconditie is c=1, de eindconditie is c<4 en de teller is c++. Zolang c niet gelijk is aan vier wordt de code in de loop verwerkt. De uitvoer van dit programma is:
Aantal gekochte boeken: 1
Aantal gekochte boeken: 2
Aantal gekochte boeken: 3
If else
In deze loop zijn er twee mogelijkheden: de conditie is waar en de betreffende code in het 'if'-gedeelte wordt uitgevoerd, of de eerste conditie is niet waar en de code in het 'else'-gedeelte wordt uitgevoerd.
Voorbeeld:
#include <iostream>
int main(){
int d = 10;
if(d == 20)
{
std::cout << "Ik krijg " << d << " dagen vakantie." << std::endl;
}else{
std::cout << "Mag ik een paar extra dagen vrij?" << std::endl;
}
std::cin.get();
return 0;
}
Na initialisatie van de variabele 'd' met waarde '10' kan de conditie 'd is gelijk aan twintig' (d == 20) niet waar zijn, dus slaat het programma de code in het 'if'-gedeelte over en voert alleen de code in het volgende gedeelte van de loop uit. Dat betekent dat de uitvoer in dit geval het volgende bevat:
Mag ik een paar extra dagen vrij?
Er is een variant op deze constructie, waarbij 'else if' dezelfde functie heeft als 'if'. Als de conditie in het 'else if'-gedeelte onwaar is, wordt het overgeslagen.
Voorbeeld:
#include <iostream>
int main(){
int d = 10;
if(d == 20)
{
std::cout << "Ik krijg " << d << " dagen vakantie." << std::endl;
}else if(d == 15){
std::cout << "Ik krijg " << d << " dagen vakantie." << std::endl;
}else{
std::cout << "Mag ik een paar extra dagen vrij?" << std::endl;
}
std::cin.get();
return 0;
}
Switch
Als je veel if else constructies gebruikt, kan het onoverzichtelijk worden. Een switch loop lijkt hierop en is minstens zo geschikt om een bepaalde voorwaarde af te dwingen.
Voorbeeld:
#include <iostream>
int main(){
int cijfer = 7;
switch(cijfer)
{
case 8:
std::cout << "Ik wil graag een hoger cijfer." << std::endl;
break;
case 9:
std::cout << "Ik wil graag een hoger cijfer." << std::endl;
break;
case 10:
std::cout << "Ik heb het hoogste cijfer!" << std::endl;
break;
default:
std::cout << "Ik zal harder studeren." << std::endl;
break;
}
std::cin.get();
return 0;
}
Zoals je ziet, is de opbouw van een case (een voorwaarde, net zoals 'if' in de 'if else'-loop) steeds hetzelfde: het woord 'case', de mogelijke waarde, een dubbele punt, jouw code, en het woord 'break'. Er kunnen zoveel cases worden toegevoegd als je wilt.
Stel dat we als invoer een cijfer met de waarde '7' krijgen. Als een case van de switch overeenkomt met de conditie, wordt alleen dat stuk code uitgevoerd.
De case 'default' kan worden weggelaten, maar het is verstandig dit toch toe te voegen. Deze case wordt namelijk gebruikt als de invoer niet overeenkomt met de andere voorwaarden.
Als het cijfer gelijk zou zijn aan '10' is de uitvoer van het programma als volgt:
Ik heb het hoogste cijfer!
Echter, als het cijfer gelijk is aan '7' krijgen we de volgende uitvoer op het scherm:
Ik zal harder studeren.