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