====== Ein- und zweiseitige Alternative ======= Häufig ist es notwendig, die Ausführung eines Algorithmus in Abhängigkeit von bestimmten Bedingungen zu verzweigen. Dazu verwendet man Alternativen bzw. Verzweigungen. In diesem Abschnitt werden die ein- und zweiseitige Alternative vorgestellt. Im nächsten die Mehrfachverzweigung. \\ \\ \\ \\ ===== Allgemeine Formulierung ===== ==== Verbale Kurzbeschreibung ==== === Einseitige Alternative === **Wenn** die Bedingung erfüllt ist, **dann** führe die Anweisungen a1 bis an aus. === Zweiseitige Alternative === **Wenn** die Bedingung erfüllt ist, **dann** führe die Anweisungen a1 bis an aus, **anderenfalls** führe die Anweisungen b1 bis bn aus. ==== Struktogramm ==== Das Struktogramm für die ein- bzw. zweiseitige Alternative besteht zunächst aus einem Rechteck, welches in drei Dreiecke aufgeteilt ist. Im mittleren Dreieck wird die Bedingung formuliert. Im linken Dreieck steht "wahr", im rechten Dreieck "falsch". Unter dem linken Dreieck erscheinen nun alle Anweisungen, die ausgeführt werden, wenn die Bedingung erfüllt ist, unter dem rechten Dreieck erscheinen alle Anweisungen, die ausgeführt werden, wenn die Bedingung nicht erfüllt ist. Bei der einseitigen Alternative stehen unter dem rechten Dreieck keine Anweisungen. === Einseitige Alternative === {{ :python:einseit.png?direct&180 |}} === Zweiseitige Alternative === {{ :python:zweiseit.png?direct&200 |}} ==== Python-Syntax ==== === Einseitige Alternative === if : a1 ... an Die einseitige Alternative wird in Python mit der ''%%if%%''-Anweisung umgesetzt. Danach folgt die . Dies ist ein Ausdruck vom Datentyp **bool**, der die Werte ''%%True%%'' oder ''%%False%%'' annehmen kann. Nach der Bedingung folgt ein Doppelpunkt. Ab der nächsten Zeile wird dann der Quelltext eingerückt. Wenn die Bedingung den Wert ''%%True%%'' annimmt, wird der eingerückte Quelltext ausgeführt. === Zweiseitige Alternative === if : a1 ... an else: b1 ... bn Bei der zweiseitigen Alternative gibt es zusätzlich noch eine ''%%else%%''-Anweisung, die von einem Doppelpunkt gefolgt wird. Auch danach wird der Quelltext eingerückt. Dieser Quelltext wird ausgeführt, wenn die Bedingung den Wert ''%%False%%'' annimmt. ===== Beispiel ===== Im folgenden werden die verschiedenen Darstellungsformen der ein- und zweiseitigen Alternative demonstriert. ==== Verbale Beschreibung ==== Zunächst soll eine ganze Zahl eingegeben werden. Wenn die Zahl durch Zwei teilbar ist, soll ausgegeben werden: "Die Zahl ist gerade.". Zusätzlich soll nun noch ausgegeben werden "Die Zahl ist ungerade.", wenn Zahl nicht durch Zwei teilbar ist. ==== Struktogramm ==== {{ :python:einseit_beispiel.png?direct&230 |}} {{ :python:zweiseit_beispiel.png?direct&300 |}} ==== Pythonprogramm ==== zahl = int(input)) if zahl%2 == 0: print("Die Zahl ist gerade.") zahl = int(input)) if zahl%2 == 0: print("Die Zahl ist gerade.") else: print("Die Zahl ist ungerade.") ===== Formulierung der Bedingung ===== Wie schon weiter oben erklärt, muss die Bedingung vom Datentyp **bool** sein. Analysieren wir die wir die Bedingung "Die Zahl ist gerade." aus dem Beispiel. Wie lässt sich diese Bedingung in Python formulieren, so dass ein Wahrheitswert entsteht? Anstelle von "Die Zahl ist gerade." könnte man auch sagen "Die Zahl ist durch 2 teilbar.". Eine Zahl ist genau dann durch 2 teilbar, wenn ihr Rest bei der Division durch 2 (in Python: ''%%zahl%2%%'') gleich Null ist (in Python ''%%==0%%''), also formuliert man als Bedingung man den Vergleich ''%%zahl%2 == 0%%''. Bedingungen werden meist mit Hilfe von [[python:shell#vergleichsoperatoren|Vergleichsoperatoren]] formuliert. Mehrere Bedingungen können mit Hilfe von [[python:shell#logische_operatoren|logischen Operatoren]] verknüpft werden. **Weitere Beispiele für mögliche Bedingungen:** ^ Bedingung ^ Wirkung | | ''%%a%3 == 1%%'' | Der Wert der Variable a lässt bei der Division durch 3 den Rest 1. | | ''%%a > 5 and a != 10%%'' | Der Wert der Variablen ist größer als 5 und ungleich 10.| | ''%%eingabe == "Ja"%%'' | Der Wert der Variablen ''%%eingabe%%'' ist ''%%"Ja"%%''.| ===== Erklärvideo ===== Im folgenden Video werden einige Inhalte dieser Seite nochmal erklärt. {{youtube>P2dxMcpE6VQ}} \\ [[https://structorizer.fisch.lu/| Download Structorizer]] \\ ===== Verschachtelte Alternativen ===== Man kann auch mehrere Alternativen ineinander schachteln. Als Beispiel verändern wir das Beispiel aus dem Video: Nach Eingabe zweier ganzer Zahlen a und b soll zunächst entschieden werden ob a größer als b ist. In diesem Fall soll ausgegeben werden "a ist größer als b", anderenfalls soll entschieden werden, ob b größer als a ist. In diesem Fall soll ausgegeben werden "b ist größer als a", anderenfalls soll ausgegeben werden "a ist gleich groß wie b". \\ **Darstellung des Algorithmus als Struktogramm:** {{ :python:struktogramm_verschachtelt.png?direct&450 |}} In den **falsch** - Zweig der ersten Alternative steht die zweite Alternative. \\ **Python-Programm** a = int(input("a = ")) b = int(input("b = ")) if a > b: print("a ist größer als b") else: if a < b: print("b ist größer als a") else: print("a ist gleich groß wie b") Im ''%%else%%''-Zweig der ersten ''%%if%%''-Anweisung steht die zweite ''%%if%%''-Anweisung. Innerhalb dieser wird der Quelltext um eine weitere Ebene eingerückt. Hier stehen alle Anweisungen die im ''%%if%%''- bzw. ''%%else%%''-Zweig der inneren Verzweigung ausgeführt werden sollen. ===== Vertiefung ===== Im Lehrbuch inf-Schule wird das Thema nochmal vertieft: * https://www.inf-schule.de/programmierung/imperativeprogrammierung/konzepteimp/entscheidungen * https://www.inf-schule.de/programmierung/imperativeprogrammierung/konzepteimp/bedingungen ===== Aufgaben ===== **Aufgabe 1** Schreibe ein Programm, welches nach Eingabe einer Note als Zahl das entsprechende Worturteil ausgibt. In verbaler Kurzform könnte man den Algorithmus so formulieren: Eingabe: Note \\ WENN Note = 1, DANN Ausgabe "sehr gut" \\ WENN Note = 2, DANN Ausgabe "gut\\ WENN Note = 3, DANN Ausgabe "befriedigend"\\ WENN Note = 4, DANN Ausgabe "ausreichend"\\ WENN Note = 5, DANN Ausgabe "mangelhaft"\\ WENN Note = 6, DANN Ausgabe "ungenügend"\\ Erstelle auch ein Struktogramm! //Zusatzaufgabe: Verändere das Programm so, dass bei Eingabe einer falschen Note ausgegeben wird: "Falsche Eingabe!"//. **Aufgabe 2** Schreiben Sie ein Programm, dass nach Eingabe der Längen der drei Seiten ausgibt, ob ein Dreieck vorliegt oder nicht. (Stichwort Dreicksungleichung) \\ [[python:loesungen:alternative| >> Lösungen]] [[python:mehrfach|>> Mehrfachverzweigungen]] \\ ~~DISCUSSION | Hier können Fragen zum Inhalt der Seite gestellt werden. ~~