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
end
Diese 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 | |
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
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
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