DruckenMister WongFacebook

Object Pascal

von Martin Strohal, Andreas Hausladen, Christian Rehn

Verzweigungen

if-else

Es gibt kaum ein Programm, bei dem immer alle Befehle hintereinander ausgeführt werden. Verzweigungen sind ein häufig eingesetztes Mittel. Es handelt sich hierbei um Fallunterscheidungen, die in der Regel mit if durchgeführt werden:

if <boolean-ausdruck> then <anweisung>;

oder

if <boolean-ausdruck> then <anweisung> else <anweisung>;

Eine Anweisung kann dabei wiederum aus einer neuen if-Bedingung bestehen.

Beispiel:

if x>0 then ...
else if x<0 then ...
else ...;

Das Beispiel bedeutet Folgendes: Ist x größer als Null, wird das ausgeführt, was hinter dem ersten then steht (die drei Punkte). Handelt es sich dabei um mehr als einen Befehl, muss der Block mit begin und end umgeben werden.

else, zu Deutsch "sonst", leitet eine Alternative ein. Wenn also die erste Bedingung nicht erfüllt ist, wird die zweite geprüft, hier, ob x vielleicht kleiner als Null ist. Trifft auch diese Bedingung nicht zu, bleibt noch ein else ohne Bedingung. Die letzten drei Punkte werden also immer dann ausgeführt, wenn die ersten beiden Bedingungen nicht zutreffen.

Wäre bereits die erste Bedingung erfüllt gewesen, so wären die folgenden else-Abschnitte gar nicht mehr geprüft worden.

Selbstverständlich muss so ein if-Block keine "else if"- oder "else"-Alternativen bieten. Das kommt immer auf die Situation an. Da sich das Ganze aber sehr stark an mathematische Logik anlehnt, dürfte die Notation nicht allzu schwer fallen.

Was allerdings zu beachten ist: In Delphi steht hinter dem letzten Befehl vor dem Wörtchen else kein Strichpunkt (Semikolon) wie sonst üblich - im Gegensatz zu C++.

Noch ein Beispiel, wobei jeweils mehrere Befehle ausgeführt werden:

var eingabe: integer;
...
if eingabe=1 then begin
eingabe := 0;
ausgabe := 'Sie haben eine 1 eingegeben';
end //kein Strichpunkt!
else if eingabe=2 then begin
eingabe := 0;
ausgabe := 'Sie haben eine 2 eingegeben';
end
else begin
eingabe := 0;
ausgabe := 'Sie haben eine andere Zahl als 1 oder 2 eingegeben';
end;

Hier sieht man besonders den Sinn von else. Wären die drei Fallunterscheidungen durch drei getrennte if-Abfragen dargestellt worden, dann hätten wir folgendes Problem: Angenommen eingabe ist 1, so ist die erste Bedingung erfüllt. Da hier eingabe jedoch auf 0 gesetzt wird, träfe nun auch die dritte Bedingung zu. Im obigen Beispiel mit else stellt das kein Problem dar.

case-Verzweigung

Müssten wir in obigem Beispiel mehr als nur zwei Zahlen prüfen, hätten wir ganz schön Tipparbeit. Für solche abzählbaren (ordinalen) Typen wie Integer und Char gibt es in Delphi eine Abkürzung:

case eingabe of
1: ausgabe := 'Sie haben 1 eingegeben';
2: ausgabe := 'Sie haben 2 eingegeben';
3: ausgabe := 'Sie haben 3 eingegeben';
else ausgabe := 'Sie haben nicht 1, 2 oder 3 eingegeben';
end;

Zugegeben, das Beispiel ist nicht besonders sinnvoll, da die Variable eingabe direkt in einen String umgewandelt werden könnte. Allerdings stellt es gut die Funktionsweise von case dar. Zu beachten ist, dass am Ende eines Case-Blocks ein end stehen muss. Gehören mehrere Anweisungen zusammen, können sie wie bei if durch begin und end als zusammengehörig gekennzeichnet werden.

Bei case steht (im Gegensatz zu if) vor dem Schlüsselwort else ein Strichpunkt!

Mit case ist auch Folgendes möglich:

case eingabe of
1,3,5,7,9: ausgabe := 'Sie haben eine ungerade Zahl kleiner als 10 eingegeben';
2,4,6,8,0: ausgabe := 'Sie haben eine gerade Zahl kleiner als 10 eingegeben';
10..20: ausgabe := 'Sie haben eine Zahl zwischen 10 und 20 eingegeben';
end;

So etwas ist natürlich auch bei if-Bedingungen möglich, dazu allerdings noch einen Einschub zum Thema Notation von logischen Bedingungen.