AND, OR en NOT

Home / Programmeren / Basic / And or not

In de vorige les heb je gezien dat je eenvoudige controles op waardes uit kunt voeren met IF, ELSEIF en ELSE. Het zal echter meer dan eens voor gaan komen dat je meer dan 1 waarde tegelijk wilt controleren. Laten we maar meteen met een goed voorbeeld beginnen: je hebt 2 variabelen, en je wilt een stukje code alleen in werking laten gaan als beide variabelen groter dan 20 zijn. Daarvoor kun je dit gebruiken:

CLS
DIM getal%
DIM getal2%
INPUT "Voer eens een getal in!", getal%
INPUT "Voer nog eens een getal in!", getal2%
IF (getal%>10) THEN
IF (getal2%>10) THEN
Eventuele code wordt alleen uitgevoerd als zowel getal% als getal2% groter dan 10 zijn.
ENDIF
ENDIF
END

In dit geval is het niet zo'n probleem, je stopt gewoon 2 IF's in elkaar. Helaas wordt het een stuk moeilijker als er meer dan 2 voorwaardes komen. Gelukkig is daar een oplossing voor. Je kunt in een IF voorwaarde meerdere expressies tegelijk stoppen en die onafhankelijk van elkaar laten controleren. We gaan het bovenstaande voorbeeld nu verbeteren met de constructie AND. Met AND kun je 2 voorwaardes aan elkaar verbinden in een IF.

CLS
DIM getal%
DIM getal2%
INPUT "Voer eens een getal in!", getal%
INPUT "Voer nog eens een getal in!", getal2%
IF (getal%>10) AND (getal2%>10) THEN
Eventuele code wordt alleen uitgevoerd als zowel getal% als getal2% groter dan 10 zijn.
ENDIF
END

OR, NOT en XOR

OR

Er zijn echter nog 3 andere "verbinders": OR, NOT en XOR. NOT werk iets anders dan de andere, maar dat zie je snel genoeg. We beginnen nu met OR. We nemen het vorige voorbeeld er weer bij en veranderen het zodanig dat we OR erin gebruiken.

CLS
DIM getal%
DIM getal2%
INPUT "Voer eens een getal in!", getal%
INPUT "Voer nog eens een getal in!", getal2%
IF (getal%>10) OR (getal2%>10) THEN
Eventuele code wordt alleen uitgevoerd als getal% of getal2% groter zijn dan 10.
ENDIF
END

Ook dit voorbeeld is niet zo moeilijk te begrijpen: er wordt gecontroleerd of getal% groter is dan 10 en of getal2% groter is dan 10. Is een van de 2 (of allebei) groter dan 10, dan gaat de code in werking.

NOT

NOT werkt iets anders dan de andere. NOT gaat namelijk in werking als een bepaalde voorwaarde niet waar is. Een voorbeeld:

CLS
DIM getal%
INPUT "Voer eens een getal in!", getal%
IF NOT(getal%=10) THEN
Eventuele code wordt alleen uitgevoerd als getal% niet gelijk is aan 10.
ENDIF
END

Dit ziet er natuurlijk een beetje stom uit, omdat je dit ook kunt bereiken met (getal% <> 10) maar je zult zien dat NOT toch wel erg handig kan zijn.

XOR

De laatste van de 4 is XOR. XOR lijkt heel veel of OR, maar is net iets anders. OR zorgt voor een koppeling waarbij een van de 2, of beide waar moeten zijn. XOR echter, zorgt ervoor dan een van de twee waar moet zijn, maar is niet waar als ze allebei waar zijn. Kort samengevat werkt XOR dus hetzelfde als OR, maar is onwaar als beide waar zijn.

Schematisch overzicht

Het bovenstaande is misschien een beetje verwarrend, en daarom verduidelijk ik het even met een aantal schema's.

AND

Voorwaarde 1Voorwaarde 2Uitkomst
waarwaarwaar
onwaarwaaronwaar
waaronwaaronwaar
onwaaronwaaronwaar

OR

Voorwaarde 1Voorwaarde 2Uitkomst
waarwaarwaar
onwaarwaarwaar
waaronwaarwaar
onwaaronwaaronwaar

XOR

Voorwaarde 1Voorwaarde 2Uitkomst
waarwaaronwaar
onwaarwaarwaar
waaronwaarwaar
onwaaronwaaronwaar

NOT

VoorwaardeUitkomst
waaronwaar
onwaarwaar

Meer controle: haakjes

Je hebt gezien dat je met AND, OR, NOT en XOR geavanceerdere controles uit kunt voeren. Het kan echter nog gecompliceerder door de voorwaardes te "nesten" met haakjes. Stel: je hebt een programma dat mensen helpt bij hun belastingaangifte. Je hebt 2 variabelen: de leeftijd en het inkomen van de persoon die het programma gebruikt. Als hij/zij ouder is dan 12 en meer dan 2000 euro per jaar verdient, ouder is dan 18 of precies 18 is moet er een bepaalde toeslag worden betaald. Je moet dan controleren of deze persoon of "ouder is dan 12 en meer dan 200 euro verdient" of "ouder is dan 18 of precies 18". Dat doe je ongeveer zo:

Deze code is weggelaten. Hier worden de variabelen leeftijd%, verdient% en betalen% aangemaakt
IF (leeftijd% > 18) OR ((leeftijd% > 12) AND (verdient% > 2000)) THEN
PRINT "Toeslag x moet worden betaald"
betalen = betalen + 200
ENDIF

Dit voorbeeld komt precies overeen met hoe het daarnet is uitgelegd. Allereerst kijkt de computer of de inhoud van de variabele leeftijd groter is dan 18. Zo ja, dan wordt de code meteen uitgevoerd. Zo niet, dan wordt eerst gekeken of de leeftijd groter is dan 12 en of deze persoon meer dan 2000 euro verdient. Zijn beide waar, dan wordt de code ook uitgevoerd.

Je kunt haakjes zo veel als je wilt combineren. Maak daar gebruik van maar maak het niet te bont. Het moet wel begrijpelijk blijven.