In Programmen ist es häufig notwendig, Entscheidungen zu treffen, welche Strukturblöcke abgearbeitet werden sollen. Man trifft dabei mit Hilfe von logischen Ausdrücken, sogenannten Bedingungen, Entscheidungen, die den Ablauf eines Programms direkt beeinflussen.
Dafür gibt es in jeder Programmiersprache sogenannte Steueranweisungen, die die einzelnen Anweisungsblöcke einrahmen. Diese definieren den Beginn und das Ende der Steueranweisung und regeln den Ablauf innerhalb des Steuerkonstrukts.
In MATLAB gibt es für Entscheidungen zwei Strukturen, den sogenannten IF-Block oder die Auswahlanweisung, die in der Folge an konkreten Beispielen besprochen werden.
Die einfachste Form des IF-Blocks ist die einseitig bedingte Anweisung, die die bedingte Ausführung eines Anweisungsblocks erlaubt.
if Bedingung Anweisungsblock endDiese Form wird häufig auch in einer einzeiligen Version geschrieben:
if Bedingung, Anweisung; end
Diese einfachste Form kann durch beliebig viele elseif Anweisungen und maximal eine else Anweisungen erweitert werden. In ihrer vollständigen Form hat der IF-Block daher die folgende Form:
if Bedingung 1 Anweisungsblock 1 elseif Bedingung 2 Anweisungsblock 2 ... else Anweisungsblock n end
MATLAB EXAMPLE: | |
---|---|
Das Programmfragment erkennt, ob eine Zahl durch 2 und 3, bzw. nur durch 2 oder nur durch 3 oder gar nicht durch 2 und 3 teilbar ist. | |
if mod(x,2)==0 & mod(x,3)==0 disp('Durch 2 und 3 teilbar!') elseif mod(x,2)==0 disp('Nur durch 2 teilbar!') elseif mod(x,3)==0 disp('Nur durch 3 teilbar!') else disp('Nicht teilbar!') end |
Mit dem Befehl mod(a,b)
wird die Modulodivision
durchgeführt. Wenn diese Null ergibt ist die Zahl durch teilbar.
Es wird immer nur ein Anweisungsblock
ausgeführt, obwohl die Bedingungen bei mehreren erfüllt sein können.
|
Folgende wichtige Regeln gelten für IF-Blöcke:
Die Auswahlanweisung ist dem IF-Block sehr ähnlich und ermöglicht die Ausführung maximal eines Blocks von mehreren möglichen Anweisungsblöcken. Eine Auswahlanweisung hat folgende Form:
switch Schalter case Selektor 1 Anweisungsblock 1 case Selektor 2 Anweisungsblock 2 ... otherwise Anweisungsblock 2 end
Bei der Verwendung ist Folgendes zu beachten:
MATLAB EXAMPLE: | |
---|---|
switch sign(x) case -1 disp('x<0') case 1 disp('x>0') case 0 disp('x==0') end switch sign(x) case -1 disp('x<0') case 1 disp('x>0') otherwise disp('x==0') end |
Dieser Programmteil zeigt an, ob die Zahl kleiner, gleich oder größer
Null ist.
Als Schalter dient dafür die Signum-Funktion sign.
Im zweiten Teil wird wird an Stelle des dritten Falles einfach
otherwise
verwendet, da es sonst keine Möglichkeiten mehr gibt.
|
MATLAB EXAMPLE: | |
---|---|
switch str case 'a' disp('Fall a') case 'b' disp('Fall b') case {'c','d','e'} disp('Fall c, d, oder e') otherwise disp('Nicht bekannt!') end |
Dieser Programmteil zeigt an, ob ein String str gleich einem
bestimmten Buchstaben ist.
Als Schalter dient dafür einfach der String str.
Im dritten Fall wird eine Liste zum Vergleich herangezogen. Listen werden
in MATLAB mit dem Klammerpaar {} umschlossen.
|
MATLAB EXAMPLE: | |
---|---|
function [tage] = tagepromonat(monat,jahr) sj = 0; switch jahr > 1582 case 1 if mod(jahr, 4)==0, sj=1; end if mod(jahr,100)==0, sj=0; end if mod(jahr,400)==0, sj=1; end end switch monat case {4,6,9,11}, tage = 30; case {1,3,5,7,8,10,12}, tage = 31; case 2 switch sj case 0, tage = 28; case 1, tage = 29; end otherwise tage = 0; error('Falscher Monat'); end |
Dieses kleine Unterprogramm berechnet die Tage pro Monat in einem beliebigen
Jahr unter Berücksichtigung der Schaltjahre ab der Kalenderreform im Jahr
1582.
An diesem Beispiel sieht man die Verschachtelung von
switch-case- und if-Strukturen.
Wenn in der Zeile Platz ist, können die Keywörter und die Befehle in einer
Zeile stehen. Als Trennzeichen wird dann der Beistrich verwendet.
|
Winfried Kernbichler 2005-04-26