MATLAB Language
Bedingungen
Suche…
Syntax
- wenn Ausdruck ... Ende
- wenn Ausdruck ... sonst ... Ende
- wenn Ausdruck ... elseif Ausdruck ... Ende
- wenn Ausdruck ... elseif Ausdruck ... sonst ... Ende
Parameter
Parameter | Beschreibung |
---|---|
Ausdruck | ein Ausdruck, der eine logische Bedeutung hat |
WENN Bedingung
Bedingungen sind ein grundlegender Bestandteil von fast jedem Teil des Codes. Sie werden verwendet, um einige Teile des Codes nur in bestimmten Situationen auszuführen, andere jedoch nicht. Schauen wir uns die grundlegende Syntax an:
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
Ausgabe:
Not OK
In diesem Beispiel sehen wir das if
aus 2 Teilen: der Bedingung und dem auszuführenden Code, wenn die Bedingung wahr ist. Der Code wird alles nach der Bedingung und vor deren end
, if
. Die erste Bedingung wurde nicht erfüllt und daher wurde der Code nicht ausgeführt.
Hier ist ein anderes Beispiel:
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
Die obige Bedingung ist immer wahr und zeigt die Ausgabe an. It's true!
.
Wir können auch schreiben:
a = 5;
if a == a+1 % "==" means "is equal to", it is NOT the assignment ("=") operator
disp('Equal')
end
Diesmal ist die Bedingung immer falsch, so dass wir niemals die Ausgabe Equal
.
Bedingungen, die immer wahr oder falsch sind, sind nicht sinnvoll. Wenn sie jedoch immer falsch sind, können Sie diesen Teil des Codes einfach löschen. Wenn sie immer wahr sind, ist die Bedingung nicht erforderlich.
IF-ELSE-Bedingung
In einigen Fällen möchten wir einen alternativen Code ausführen, wenn die Bedingung falsch ist. Dazu verwenden wir den optionalen else
Teil:
a = 20;
if a < 10
disp('a smaller than 10')
else
disp('a bigger than 10')
end
Hier sehen wir, dass, weil a
nicht kleiner als 10
der zweite Teil des Codes, nachdem der else
ausgeführt wird und wir die Ausgabe a bigger than 10
. Nun sehen wir uns einen anderen Versuch an:
a = 10;
if a > 10
disp('a bigger than 10')
else
disp('a smaller than 10')
end
In diesem Beispiel zeigt , dass wir nicht , ob geprüft haben a
in der Tat kleiner als 10 ist , und wir bekommen eine falsche Botschaft , weil die Bedingung nur den Ausdruck überprüfen , wie es ist, und jeder Fall, der nicht gleich wahr macht ( a = 10
) bewirkt , dass die zweiter Teil ausgeführt werden.
Diese Art von Fehler ist sowohl für Anfänger als auch für erfahrene Programmierer eine sehr häufige Gefahr, vor allem, wenn die Bedingungen komplex werden und immer im Auge behalten werden sollten
IF-ELSEIF-Bedingung
Mit else
wir einige Aufgaben ausführen, wenn die Bedingung nicht erfüllt ist. Was aber, wenn wir eine zweite Bedingung prüfen wollen, falls die erste falsch war? Wir können es so machen:
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
Dies wird auch als "verschachtelte Bedingung" bezeichnet . Hier haben wir jedoch einen speziellen Fall, der die Lesbarkeit des Codes verbessern und die Wahrscheinlichkeit eines anr-Fehlers verringern kann.
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
Mit dem elseif
wir einen anderen Ausdruck innerhalb desselben Bedingungsblocks prüfen, und das ist nicht auf einen Versuch beschränkt:
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
Bei der Verwendung von elseif
in einer Reihe ist besondere Vorsicht geboten, da von allen if
to- end
Blocks nur einer von ihnen ausgeführt wird. Wenn wir also in unserem Beispiel alle Divisoren a
anzeigen möchten (von denen wir explizit prüfen), ist das obige Beispiel nicht gut:
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
Nicht nur 3, sondern auch 5 ist ein Divisor von 15, aber der Teil, der die Division durch 5 überprüft, wird nicht erreicht, wenn einer der obigen Ausdrücke wahr ist.
Schließlich können wir eine else
(und nur eine ) nach allen elseif
Bedingungen elseif
, um einen Code auszuführen, wenn keine der oben genannten Bedingungen erfüllt ist:
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
Verschachtelte Bedingungen
Wenn wir eine Bedingung innerhalb einer anderen Bedingung verwenden, sagen wir, dass die Bedingungen "verschachtelt" sind. Ein Sonderfall verschachtelter Bedingungen wird durch die elseif
Option angegeben, es gibt jedoch zahlreiche andere Möglichkeiten, verschachtelte Bedingungen zu verwenden. Untersuchen wir den folgenden Code:
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
Bei a=2
ist die Ausgabe a is even
, was korrekt ist. Für a=3
ist die Ausgabe a is odd
, was ebenfalls korrekt ist, aber die Prüfung verfehlt, ob 3 ein Teiler von a
. Dies liegt daran, dass die Bedingungen verschachtelt sind, also nur wenn die erste true
, dann bewegen wir uns zur inneren und wenn a
ungerade ist, wird keine der inneren Bedingungen geprüft. Dies ist etwas elseif
bei der Verwendung von elseif
wobei nur dann, wenn die erste Bedingung false
, die nächste Bedingung elseif
wird. Was ist mit der Überprüfung der Division um 5? Nur eine Zahl mit 6 als Divisor (beide 2 und 3) wird für die Division durch 5 geprüft, und wir können testen und sehen, dass für a=30
die Ausgabe lautet:
a is even
3 is a divisor of a
5 is a divisor of a
Wir sollten auch zwei Dinge beachten:
- Die Position des
end
am richtigen Ort für jedesif
ist entscheidend, damit die Bedingungen wie erwartet funktionieren. Daher ist die Einrückung hier mehr als eine gute Empfehlung. - Die Position der
else
Aussage ist auch entscheidend, weil ich in denen müssen wissen ,if
(und es könnte einige von ihnen sein) wollen wir etwas bei dem Ausdruck tun , wennfalse
.
Schauen wir uns ein anderes Beispiel an:
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
Und die Ausgabe wird sein:
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
Wir sehen, dass wir nur 6 Zeilen für 6 Zahlen haben, weil die Bedingungen so verschachtelt sind, dass nur ein Ausdruck pro Nummer gewährleistet ist. Außerdem werden (obwohl nicht direkt aus der Ausgabe gesehen) keine zusätzlichen Prüfungen durchgeführt, also eine Zahl ist nicht einmal es gibt keinen Grund zu überprüfen, ob 4 einer ihrer Divisoren ist.