MATLAB Language
Voorwaarden
Zoeken…
Syntaxis
- als expressie ... einde
- als expressie ... anders ... einde
- als expressie ... anders expressie ... einde
- als expressie ... anders expressie ... anders ... einde
parameters
Parameter | Beschrijving |
---|---|
uitdrukking | een uitdrukking die logische betekenis heeft |
ALS staat
Voorwaarden zijn een fundamenteel onderdeel van bijna elk deel van de code. Ze worden gebruikt om sommige delen van de code alleen in sommige situaties uit te voeren, maar niet in andere. Laten we eens kijken naar de basissyntaxis:
a = 5;
if a > 10 % this condition is not fulfilled, so nothing will happen
disp('OK')
end
if a < 10 % this condition is fulfilled, so the statements between the if...end are executed
disp('Not OK')
end
Output:
Not OK
In dit voorbeeld zien we dat het if
uit 2 delen bestaat: de voorwaarde en de code die moet worden uitgevoerd als de voorwaarde waar is. De code is alles geschreven na de voorwaarde en vóór het end
daarvan if
. Aan de eerste voorwaarde is niet voldaan en daarom is de code erin niet uitgevoerd.
Hier is nog een voorbeeld:
a = 5;
if a ~= a+1 % "~=" means "not equal to"
disp('It''s true!') % we use two apostrophes to tell MATLAB that the ' is part of the string
end
De bovenstaande voorwaarde is altijd waar en geeft de uitvoer weer. It's true!
.
We kunnen ook schrijven:
a = 5;
if a == a+1 % "==" means "is equal to", it is NOT the assignment ("=") operator
disp('Equal')
end
Deze keer is de voorwaarde altijd onwaar, dus we zullen de uitvoer nooit Equal
.
Er is echter niet veel gebruik voor voorwaarden die altijd waar of onwaar zijn, want als ze altijd onwaar zijn, kunnen we dit deel van de code eenvoudig verwijderen en als ze altijd waar zijn, is de voorwaarde niet nodig.
ALS-ELSE staat
In sommige gevallen willen we een alternatieve code uitvoeren als de voorwaarde false is, hiervoor gebruiken we het optionele else
gedeelte:
a = 20;
if a < 10
disp('a smaller than 10')
else
disp('a bigger than 10')
end
Hier zien we dat omdat a
niet kleiner is dan 10
het tweede deel van de code, nadat de else
is uitgevoerd en we de uitvoer a bigger than 10
. Laten we nu eens kijken naar een andere poging:
a = 10;
if a > 10
disp('a bigger than 10')
else
disp('a smaller than 10')
end
In dit voorbeeld wordt getoond dat we niet hebben gecontroleerd of a
inderdaad kleiner is dan 10, en we krijgen een verkeerd bericht omdat de voorwaarde alleen de expressie controleert zoals deze is, en ELK geval dat niet gelijk is aan waar ( a = 10
) zal de tweede deel uit te voeren.
Dit type fout is een veel voorkomende valkuil voor zowel beginners als ervaren programmeurs, vooral wanneer de omstandigheden complex worden, en moet altijd in gedachten worden gehouden
IF-ELSEIF staat
else
we een taak uitvoeren als niet aan de voorwaarde is voldaan. Maar wat als we een tweede voorwaarde willen controleren voor het geval dat de eerste fout was. We kunnen het op deze manier doen:
a = 9;
if mod(a,2)==0 % MOD - modulo operation, return the remainder after division of 'a' by 2
disp('a is even')
else
if mod(a,3)==0
disp('3 is a divisor of a')
end
end
OUTPUT:
3 is a divisor of a
Dit wordt ook wel "geneste voorwaarde" genoemd , maar hier hebben we een speciel geval dat de leesbaarheid van de code kan verbeteren en de kans op een anr-fout kan verminderen - we kunnen schrijven:
a = 9;
if mod(a,2)==0
disp('a is even')
elseif mod(a,3)==0
disp('3 is a divisor of a')
end
OUTPUT:
3 is a divisor of a
met behulp van de elseif
we een andere uitdrukking binnen hetzelfde blok van voorwaarden controleren, en dit is niet beperkt tot één poging:
a = 25;
if mod(a,2)==0
disp('a is even')
elseif mod(a,3)==0
disp('3 is a divisor of a')
elseif mod(a,5)==0
disp('5 is a divisor of a')
end
OUTPUT:
5 is a divisor of a
Wees extra voorzichtig als u ervoor kiest om elseif
op een rij te gebruiken, omdat slechts één ervan wordt uitgevoerd vanuit het if
to end
blok. Dus als we in ons voorbeeld alle delers van a
(van degenen die we expliciet controleren) willen weergeven, is het bovenstaande voorbeeld niet goed:
a = 15;
if mod(a,2)==0
disp('a is even')
elseif mod(a,3)==0
disp('3 is a divisor of a')
elseif mod(a,5)==0
disp('5 is a divisor of a')
end
OUTPUT:
3 is a divisor of a
niet alleen 3, maar ook 5 is een deler van 15, maar het deel dat de deling door 5 controleert, wordt niet bereikt als een van de bovenstaande uitdrukkingen waar was.
Ten slotte kunnen we een toe te voegen else
(en slechts één) nadat alle elseif
voorwaarden om een code wanneer geen van de bovenstaande voorwaarden wordt voldaan uit te voeren:
a = 11;
if mod(a,2)==0
disp('a is even')
elseif mod(a,3)==0
disp('3 is a divisor of a')
elseif mod(a,5)==0
disp('5 is a divisor of a')
else
disp('2, 3 and 5 are not divisors of a')
end
OUTPUT:
2, 3 and 5 are not divisors of a
Geneste voorwaarden
Wanneer we een voorwaarde binnen een andere voorwaarde gebruiken, zeggen we dat de voorwaarden "genest" zijn. Een speciaal geval van geneste voorwaarden wordt gegeven door de elseif
optie, maar er zijn talloze andere manieren om geneste voorwaarden te gebruiken. Laten we de volgende code bekijken:
a = 2;
if mod(a,2)==0 % MOD - modulo operation, return the remainder after division of 'a' by 2
disp('a is even')
if mod(a,3)==0
disp('3 is a divisor of a')
if mod(a,5)==0
disp('5 is a divisor of a')
end
end
else
disp('a is odd')
end
Voor a=2
is de uitvoer a is even
, wat correct is. Voor a=3
is de uitvoer a is odd
, wat ook correct is, maar mist de controle of 3 een deler is van a
. Dit komt omdat de voorwaarden genest zijn, dus alleen als de eerste true
, gaan we naar de binnenste en als a
oneven is, worden geen van de innerlijke voorwaarden zelfs gecontroleerd. Dit is enigszins tegengesteld aan het gebruik van elseif
waar alleen als de eerste voorwaarde false
dan controleren we de volgende. Hoe zit het met het controleren van de verdeling door 5? alleen een getal met 6 als deler (zowel 2 als 3) wordt gecontroleerd op de deling door 5 en we kunnen testen en zien dat voor a=30
de uitvoer is:
a is even
3 is a divisor of a
5 is a divisor of a
We moeten ook twee dingen opmerken:
- De positie van het
end
op de juiste plaats voor elkeif
is cruciaal voor de set voorwaarden om te werken zoals verwacht, dus inspringen is meer dan een goede aanbeveling hier. - De positie van de
else
verklaring is ook van cruciaal belang, want we moeten weten in welkeif
(en er een aantal van hen zou kunnen zijn) we iets willen doen in het geval van de expressie alsfalse
.
Laten we een ander voorbeeld bekijken:
for a = 5:10 % the FOR loop execute all the code within it for every a from 5 to 10
ch = num2str(a); % NUM2STR converts the integer a to a character
if mod(a,2)==0
if mod(a,3)==0
disp(['3 is a divisor of ' ch])
elseif mod(a,4)==0
disp(['4 is a divisor of ' ch])
else
disp([ch ' is even'])
end
elseif mod(a,3)==0
disp(['3 is a divisor of ' ch])
else
disp([ch ' is odd'])
end
end
En de output zal zijn:
5 is odd
3 is a divisor of 6
7 is odd
4 is a divisor of 8
3 is a divisor of 9
10 is even
we zien dat we slechts 6 regels voor 6 nummers hebben, omdat de voorwaarden zijn genest op een manier die slechts één afdruk per nummer garandeert, en ook (hoewel niet direct vanuit de uitvoer te zien) geen extra controles worden uitgevoerd, dus als een getal is niet eens, het heeft geen zin om te controleren of 4 een van de delers is.