Terug naar de inhoudsopgave

Les 5 – Waar en niet waar in C++

In deze les bespreken we de volgende onderwerpen:

Logica in C++

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++.

True en false opslaan

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;
}
	

Logische operatoren

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;
}
	

Het if-statement

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.";
	}
}
	

En anders...

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.

Bij de les