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:

  1. Die Position des end am richtigen Ort für jedes if ist entscheidend, damit die Bedingungen wie erwartet funktionieren. Daher ist die Einrückung hier mehr als eine gute Empfehlung.
  2. 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 , wenn false .

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.



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow