In deze les bespreken we de volgende onderwerpen:
Vorige les hebben we ons uitgebreid beziggehouden met logica, maar dat deden we allemaal op papier (of het virtuele papier van Word). Deze les bekijken we hoe we de logica toe kunnen passen in C++.
Net zoals er een type is om de uitkomst van een rekenkundige expressie op te slaan - namelijk int - zo is er ook een type om de uitkomst van een logische expressie op te slaan: bool. Een variabele van het type bool kan, geheel volgens verwachting, één van twee waarden hebben: true of false.
// declareer een boolean bool myTruth; // wijs waarde toe aan de waarheid myTruth = false;
We kunnen nu dus een programma schrijven dat de leeftijden vraagt van Miranda en Peter en vervolgens uitrekent of Miranda ouder is dan Peter.
/* Programmeur: dhr. Ronkes Agerbeek Programma: Miranda en Peter Omschrijving: Bepaalt of Miranda ouder is dan Peter. */ #include <iostream> using namespace std; // het programma start hier void main() { // declareer variabelen om leeftijden op te slaan int myMirandaAge, myPeterAge; // declareer variabele om op te slaan of Miranda ouder // is dan Peter bool myAnswer; // vraag leeftijd van Miranda cout << "Hoe oud is Miranda? "; cin >> myMirandaAge; // vraag leeftijd van Peter cout << "Hoe oud is Peter? "; cin >> myPeterAge; // bepaal of Miranda ouder is dan Peter myAnswer = myMirandaAge > myPeterAge; // schrijf antwoord naar scherm cout << "De uitspraak 'Miranda is ouder dan Peter' is " cout << myAnswer; }
We hebben vorige keer drie logische operatoren gezien: AND, OR en NOT. C++ kent deze operatoren ook, maar in C++ schrijf je ze iets anders. AND is &&, OR is || en NOT is !. Dus in C++ schrijf je de logische expressie a OR (NOT (b AND c)) als a || (!(b && c).
We kunnen nu dus een programma schrijven dat de leeftijden en lengtes vraagt van Miranda en Peter en vervolgens uitrekent of Miranda ouder en kleiner is dan Peter.
/* Programmeur: dhr. Ronkes Agerbeek Programma: Miranda en Peter Omschrijving: Bepaalt of Miranda ouder is dan Peter. */ #include <iostream> using namespace std; // het programma start hier void main() { // declareer variabelen om leeftijden op te slaan int myMirandaAge, myPeterAge; // declareer variabelen om leeftijden op te slaan int myMirandaLength, myPeterLength; // declareer variabele om op te slaan of Miranda ouder // en kleiner is dan Peter bool myAnswer; // vraag leeftijd van Miranda cout << "Hoe oud is Miranda? "; cin >> myMirandaAge; // vraag lengte van Miranda cout << "Hoe lang is Miranda? "; cin >> myMirandaLength; // vraag leeftijd van Peter cout << "Hoe oud is Peter? "; cin >> myPeterAge; // vraag lengte van Peter cout << "Hoe lang is Peter? "; cin >> myPeterLength; // bepaal of Miranda ouder en langer is dan Peter myAnswer = (myMirandaAge > myPeterAge) && (myMirandaLength < myPeterLength); // schrijf antwoord naar scherm cout << "De uitspraak 'Miranda is ouder en kleiner dan " cout << "Peter' is " myMirandaIsOlder; }
Heel vaak willen we bepaalde code alleen maar uit laten voeren als een of andere logische expressie waar is. Hiervoor gebruiken we het if-statement. In algemene vorm ziet het if-statement er als volgt uit:
// controleer of de expressie waar is if (myLogicalExpression) { // voer deze code alleen uit als de expressie waar is }
Achter het woord if komt tussen haakjes een logische expressie te staan. Als deze expressie waar is, dan wordt de code uitgevoerd die tussen de accolades staat. Is de expressie niet waar, dan wordt alle code tussen de accolades overgeslagen en gaat C++ verder met de code na de sluitaccolade.
Laten we ons Miranda en Peter voorbeeld eens zó aanpassen, dat de uitvoer wat duidelijker is.
/* Programmeur: dhr. Ronkes Agerbeek Programma: Miranda en Peter Omschrijving: Bepaalt of Miranda ouder is dan Peter. */ #include <iostream> using namespace std; // het programma start hier void main() { // declareer variabelen om leeftijden op te slaan int myMirandaAge, myPeterAge; // vraag leeftijd van Miranda cout << "Hoe oud is Miranda? "; cin >> myMirandaAge; // vraag leeftijd van Peter cout << "Hoe oud is Peter? "; cin >> myPeterAge; // is Miranda ouder dan Peter? if (myMirandaAge > myPeterAge) { // ja, schrijf naar het scherm cout << "Miranda is ouder dan Peter."; } }
In bovenstaand voorbeeld schrijven we iets naar het scherm als Miranda ouder is dan Peter, maar als dat niet zo is, dan komt er helemaal niets op het scherm te staan. We hebben dus een manier nodig om ook code uit te voeren als de expressie niet waar is. Dit doen we door aan een if een else toe te voegen. De gaat als volgt.
/* Programmeur: dhr. Ronkes Agerbeek Programma: Miranda en Peter Omschrijving: Bepaalt of Miranda ouder is dan Peter. */ #include <iostream> using namespace std; // het programma start hier void main() { // declareer variabelen om leeftijden op te slaan int myMirandaAge, myPeterAge; // vraag leeftijd van Miranda cout << "Hoe oud is Miranda? "; cin >> myMirandaAge; // vraag leeftijd van Peter cout << "Hoe oud is Peter? "; cin >> myPeterAge; // is Miranda ouder dan Peter? if (myMirandaAge > myPeterAge) { // ja, schrijf naar het scherm cout << "Miranda is ouder dan Peter."; } else { // nee, schrijf naar het scherm cout << "Miranda is niet ouder dan Peter."; } }
De code die tussen de accolades na else staat, wordt alleen maar uitgevoerd als de logische expressie die achter if staat niet waar is. In feite is het dus een keuze die gemaakt wordt: als de expressie waar is, voer dan de code uit tussen de eerste twee accolades en voer anders de code uit tussen de tweede twee accolades.
Een verzameling van statements binnen twee accolades noemen we een compound statement.