Fachkonzept
Fachkonzept - Fallunterscheidung
Eine Fallunterscheidung dient dazu, alternative Abläufe zu beschreiben.
Fallunterscheidungen gibt es in zwei Varianten, als zweiseitige und als einseitige Fallunterscheidung. Diese Varianten sollen jetzt genauer betrachtet werden.
Zweiseitige Fallunterscheidung
Eine zweiseitige Fallunterscheidung wird mit einer WENN-Anweisung beschrieben, die aus einer Bedingung und zwei Anweisungssequenzen besteht – einer für den Fall, dass die Bedingung erfüllt ist, und einer für den anderen Fall.
WENN [Bedingung]:
[Anweisungssequenz]
SONST:
[Anweisungssequenz]
Die Ausführung einer zweiseitigen Fallunterscheidung lässt sich mit dem folgenden Flussdiagramm verdeutlichen:
Bei der Ausführung einer zweiseitigen Fallunterscheidung wird zunächst überprüft, ob die Bedingung erfüllt ist. Ist das der Fall, so werden die Anweisungen der entsprechenden Anweisungssequenz ausgeführt. Andernfalls werden die Anweisungen der anderen Anweisungssequenz ausgeführt.
Einseitige Fallunterscheidung
Eine einseitige Fallunterscheidung wird mit einer WENN-Anweisung beschrieben, die aus einer Bedingung und nur einer Anweisungssequenz besteht.
WENN [Bedingung]:
[Anweisungssequenz]
Die Ausführung einer einseitigen Fallunterscheidung lässt sich mit dem folgenden Flussdiagramm verdeutlichen:
Bei der Ausführung einer einseitigen Fallunterscheidung wird zunächst überprüft, ob die Bedingung erfüllt ist. Ist das der Fall, so werden die Anweisungen der Anweisungssequenz ausgeführt. Andernfalls geschieht gar nichts.
Mehrfache Fallunterscheidung
Sollen mehr als zwei Fälle unterschieden werden, verwendet man eine mehrfache Fallunterscheidung. Sie besteht aus mehreren Bedingungen mit je einer Anweisungssequenz. Am Ende kann eine weitere Anweisungssequenz für den Fall stehen, dass keine der Bedingungen erfüllt ist.
WENN [Bedingung 1]:
[Anweisungssequenz 1]
SONST WENN [Bedingung 2]:
[Anweisungssequenz 2]
SONST:
[Anweisungssequenz 3]
Die Ausführung einer mehrfachen Fallunterscheidung lässt sich mit dem folgenden Flussdiagramm verdeutlichen:
Bei der Ausführung einer mehrfachen Fallunterscheidung werden die Bedingungen der Reihe nach überprüft. Sobald eine Bedingung erfüllt ist, werden die Anweisungen der zugehörigen Anweisungssequenz ausgeführt – und nur diese. Die weiteren Bedingungen werden dann gar nicht mehr überprüft. Ist keine der Bedingungen erfüllt, so werden die Anweisungen der SONST-Anweisungssequenz ausgeführt. Fehlt der SONST-Fall, geschieht dann gar nichts.
Bei einer mehrfachen Fallunterscheidung kommt es auf die Reihenfolge der Bedingungen an: Es wird immer nur die Anweisungssequenz der ersten erfüllten Bedingung ausgeführt.
Ein Beispiel: Die Argo soll Engstellen markieren und einzelnen Asteroiden ausweichen. Der Fall der Engstelle muss als Erstes
geprüft werden. Stünde er weiter unten, wäre bei einer Engstelle schon die Bedingung rockLeft()
erfüllt – die Argo würde ausweichen und mit dem Asteroiden auf der anderen Seite kollidieren.
if rockLeft() and rockRight():
putPow()
move()
elif rockLeft():
turnRight()
move()
turnLeft()
elif rockRight():
turnLeft()
move()
turnRight()
Implementierung in Python
In der Programmiersprache Python wird eine Fallunterscheidung mit einer WENN-Anweisung wie folgt dargestellt:
if [Bedingung]:
[Anweisungssequenz]
else:
[Anweisungssequenz]
bzw.
if [Bedingung]:
[Anweisungssequenz]
bzw.
if [Bedingung]:
[Anweisungssequenz]
elif [Bedingung]:
[Anweisungssequenz]
else:
[Anweisungssequenz]
Eingeleitet wird sie mit dem Schlüsselwort if. Wichtig ist der Doppelpunkt nach der
Bedingung. Die Anweisungen der WENN-Anweisungssequenz müssen dann um eine feste Anzahl von Leerzeichen
(in der Regel sind es 4 Einheiten) eingerückt werden.
Der SONST-Fall wird mit else gefolgt von einem
Doppelpunkt eingeleitet. Auch hier müssen die Anweisungen der SONST-Anweisungssequenz entsprechend eingerückt werden.
Jeder weitere Fall einer mehrfachen Fallunterscheidung wird mit elif eingeleitet – kurz für
else if, also SONST WENN. Darauf folgen eine Bedingung, ein Doppelpunkt und die eingerückte Anweisungssequenz.
Es dürfen beliebig viele elif-Teile aufeinander folgen. Der abschließende
else-Teil darf auch fehlen.
Fachkonzept - Logische Operatoren
Komplexere Bedingungen lassen sich mit Hilfe logischer Operatoren aufbauen.
Ein Beispiel für eine solche komplexere Bedingung ist die Bedingung not rockFront().
Hier wird neben der Argo-Grundoperation rockFront() zusätzlich der sog. not-Operator benutzt.
Aus der Bedingung vor einem Asteroiden
wird mit diesem Operator das Gegenteil nicht vor einem Asteroiden
gebildet.
Logische Operatoren werden benötigt, um Bedingungen zusammenzusetzen.
Die folgenden Tabellen zeigen, wie die drei logischen Grundoperatoren
not, and und or
festgelegt sind.
Der not-Operator beschreibt das logische nicht
.
| a | not a |
|---|---|
| False | True |
| True | False |
Der not-Operator kehrt also den Wahrheitswert einer Bedingung um.
Mit dem and-Operator wird eine logisches und
beschrieben:
| a | b | a and b |
|---|---|---|
| False | False | False |
| False | True | False |
| True | False | False |
| True | True | True |
Eine mit dem and-Operator zusammengesetzte Bedingung ist also nur dann erfüllt,
wenn beide Teilbedingungen erfüllt sind - die erste und die zweite.
Mit dem or-Operator wird eine logisches (nicht-ausschließendes) oder
beschrieben:
| a | b | a or b |
|---|---|---|
| False | False | False |
| False | True | True |
| True | False | True |
| True | True | True |
Eine mit dem or-Operator zusammengesetzte Bedingung ist also dann erfüllt,
wenn mindestens eine der beiden Teilbedingungen erfüllt ist – die erste oder die zweite oder beide.