Inhaltsverzeichnis
Verzweigungen
Häufig ist es notwendig, die Ausführung eines Algorithmus in Abhängigkeit von bestimmten Bedingungen zu verzweigen. Dazu verwendet man Alternativen bzw. Verzweigungen. Diese werden hier vorgestellt.
Die Beispiele aus diesem Abschnitt können in einem Jupyternotebook nachvollzogen werden. Es muss zusammen mit den Bilddateien vorher entpackt werden.
Danach kann man das Notebook zusammen mit den Bildern z.B. bei https://jupyter.org/try → JupyterLab hochladen und öffnen.
Einfache Verzweigung mit und ohne Alternative
Bei einfachen Verzweigungen steht am Anfang immer eine Frage, die mit ja oder nein beantwortet werden kann. Diese Frage wird auch Bedingung genannt, die wahr (entspricht ja) oder falsch (entspricht nein) sein kann. In Ahängikeit von der Beantwortung der Frage werden nun die Anweisungen des Algorithmus ausgeführt.
Verzweigung ohne Alternative
Bei der Verzweigung ohne Alternative (, auch einseitige Verzweigung oder einseitige Alternative genannt,) werden Anweisungen nur ausgeführt, wenn die Frage mit ja beantwortet wird bzw. wenn diie Bedingung wahr ist.
Im Satz könnte man formulieren:
Wenn die Bedingung wahr ist, dann führe Anweisungen aus.
Im Struktogramm kann man sie wie folgt darstellen:
Das Struktogramm für eine einfache Alternative besteht zunächst aus einem Rechteck mit drei Dreiecken. Im zentralen Dreieck wird die Frage oder die Bedingung formuliert, im linken Dreieck steht dann wahr oder ja, im rechten Dreieck steht falsch oder nein. Unter dem linken Dreieck erscheint dann ein Rechteck mit einer oder mehreren Anweisungen, die ausgeführt werden, wenn die Bedingung erfüllt ist oder die Frage mit ja beantwortet wird. Bei der Verzweigung ohne Alternative bleibt das Rechteck unter dem rechten Dreieck leer bzw. man schreibt man das Symbol der leeren Menge $\emptyset$ hinein.
In Python kann die Verzweigung ohne Alternative (einseitige Verzweigung) mit der if
-Anweisung umgesetzt werden:
if Bedingung: ... Anweisungen ...
Hinter dem if
steht die Bedingung. Das ist ein Ausdruck mit dem Datentyp bool, also er kann die Werte True
oder False
annehmen. Danach kommen die Anweisungen, die im Fall True
ausgeführt werden sollen. Sie werden um dieselbe Tiefe eingerückt. Um das Programm nach der if
-Anweisung fortzusetzen, muss der Quellcode wieder genau so tief eingerückt werden wie das if
.
Beispiel 1
Es ist ein Programm zu erstellen, dass nach Eingabe einer ganzen Zahl entscheidet, ob die Zahl negativ ist. Zusätzlich soll der Betrag der Zahl ausgegeben werden.
Stichwortartige Beschreibung des Algorithmus
Eingabe: Ganze Zahl n Wenn n negativ ist:
- Ausgabe: Die Zahl ist negativ
- Ausgabe: -n
Darstellung des Algorithmus als Struktogramm
Algorithmus als Pythonprogramm
n = int(input("n = ")) if n < 0: print("Die Zahl n ist negativ.") print("Betrag von n:", -n)
Verzweigung mit Alternative
Bei der Verzweigung mit Alternative (, auch zweiseitige Verzweigung oder zweiseitige Alternative genannt,) werden Anweisungen ausgeführt, wenn die Frage mit ja beantwortet wird bzw. wenn diie Bedingung wahr ist. Wenn Frage mit ja beantwortet wird bzw. die Bedingung falsch ist werden andere Anweisungen ausgeführt.
Im Satz könnte man formulieren:
Wenn die Bedingung wahr ist, dann führe Anweisungen aus, anderenfalls führe andere Anweisungen aus.
Im Struktogramm kann man sie wie folgt darstellen:
Das Struktogramm ist zunächst genau so aufgebaut, wie bei der Verzweigung ohne Alternative. Im Unterschied zu Verzweigung ohne Alternative stehen jetzt unter dem rechten Dreieck die Anweisungen, die ausgeführt werden, wenn die Bedingung nicht erfüllt ist bzw. wenn die Frage mit nein beantwortet wird.
In Python kann die Verzweigung mit Alternative (zweiseitige Verzweigung) mit der if
-else
-Anweisung umgesetzt werden:
if Bedingung: ... Anweisungen ... else: ... Anweisungen ...
Hinter dem if
steht die Bedingung. Das ist ein Ausdruck mit dem Datentyp bool, also er kann die Werte True
oder False
annehmen. Danach kommen die Anweisungen, die im Fall True
ausgeführt werden sollen. Sie werden um dieselbe Tiefe eingerückt. Danach erscheint in derselben Einrücktiefe wie das if
das else
gefolgt von einem Doppelpunkt. Die nach dem else
eingerückten Anweisungen werden ausgeführt, wenn die Bedingung nicht erfüllt ist. Um das Programm nach der else
-Anweisung fortzusetzen, muss der Quellcode wieder genau so tief eingerückt werden wie das if
.
Beispiel 2
s ist ein Programm zu erstellen, dass nach Eingabe einer ganzen Zahl entscheidet, ob die Zahl negativ oder nichtnegativ ist. Zusätzlich soll der Betrag der Zahl ausgegeben werden.
Stichwortartige Beschreibung des Algorithmus
Eingabe: Ganze Zahl n
Wenn n negativ ist:
- Ausgabe: Die Zahl ist negativ
- Ausgabe: -n
anderenfalls
- Ausgabe: „Die Zahl ist nicht negativ.“
- Ausgabe: n
Darstellung des Algorithmus als Struktogramm
Algorithmus als Pythonprogramm
n = int(input("n = ")) if n < 0: print("Die Zahl n ist negativ.") print("Betrag von n:", -n) else: print("Die Zahl n ist nicht negativ.") print("Betrag von n:", n)
Verschachtelte Verzweigungen
Wir wollen nun unser Beispiel erweitern. Nachdem wir festgestellt haben, dass die Zahl nicht negativ ist, soll noch festgestellt werden, ob die Zahl Null ist, oder ob die Zahl positiv ist. Im Struktogramm könnte der Algorithmus so aussehen:
Beispiel 3
In diesem Struktogramm befindet sich im else
-Zweig eine weitere Verzweigung. Hier rückt man den Quelltext nach dem inneren if
bzw. else
noch weiter ein.
n = int(input("n = ")) if n < 0: print("Die Zahl n ist negativ.") print("Betrag von n:", -n) else: if n > 0: print("Die Zahl n ist positiv.") else: print("Die Zahl n ist Null.") print("Betrag von n:", n)
Formulierung der Bedingung
Im Abschnitt Grundlegendes zu Python haben wir die folgenden Operatoren kennengelernt:
Arithmetische Operatoren
Operator | Wirkung bei | ||
---|---|---|---|
int | float | str | |
+ | Addition | Addition | Verkettung |
- | Subtraktion | Subtraktion | |
* | Multiplikation | Multiplikation | |
/ | Division | Division | |
// | ganzzahlige Division | ganzzahlige Division | |
% | ganzzahliger Rest (Modulo) | Rest | |
** | Potenzieren | Potenzieren, Radizieren |
Vergleichsoperatoren
Operator | Wirkung |
---|---|
> | größer |
< | kleiner |
>= | größer gleich |
<= | kleiner gleich |
== | gleich |
!= | ungleich |
Logische Operatoren
Operator | Wirkung |
---|---|
A and B | ist wahr, wenn A und B wahr sind |
A or B | ist wahr, wenn A oder B oder beide wahr sind |
not A | ist wahr, wenn A nicht wahr (falsch) ist |
Diese Opratoren können benutzt werden um die Bedingung zu formulieren. Die Bedingung muss vom Datentyp bool sein.
Manchmal ist die Bedingung nich offensichtlich und man muss sich etwas einfallen lassen
Beispiel 4
„Die Zahl n ist durch 3 teilbar“ kann man auch formulieren als „Die Zahl n lässt bei der Division durch 3 den Rest 0“ und dass lässt sich in Python ausdrücken als:
n%3 == 0
Mehrfachverzweigung
In Python gibt es auch die Möglichkeit, in eine Verzweigung mehrere Bedingenungen einzugeben. Im Beispiel zu verschachtelten Verweigungen gibt es insgesamt drei Bedingungen:
- n > 0
- n == 0
- n < 0
Wenn noch mehr Bedingungen nötig sind, wird die Verzweigung noch weiter verschachtelt und der Quellcode wird unübersichtlich. Deshalb hat man in Python die if-elif- else
-Anweisung eingeführt:
if Bedingung1: ... Anweisungen ... elif Bedingung2: ... Anweisungen ... elif Bedingung3: ... Anweisungen ... ... else: ... Anweisungen ...
In Python würde das geänderte Beispiel 3 so aussehen:
Beispiel 4
n = int(input("n = ")) if n < 0: print("Die Zahl n ist negativ.") print("Betrag von n:", -n) elif n > 0: print("Die Zahl n ist positiv.") print("Betrag von n:", n) else: print("Die Zahl n ist Null.") print("Betrag von n:", n)
Am Beispiel 4 möchte ich auch zeigen, wie man eine Mehrfachverzweigung im Struktogramm darstellt:
Übungen
Im folgenden Jupyternotebook finden sich einige Übungsaufgaben zum Thema.