--- section: Bedingte Anweisung title: Bedingte Anweisung --- :::{.no-print} :::{.tipp} Vergiss nicht das Arbeitsblatt: %section% herunterzuladen. :::: ::: :::{.terminal} Auf unserem Weg durch das Geröllfeld liegt manchmal direkt vor uns ein Hügel. Wir müssen diese Situationen erkennen und die Berge umfahren. Dazu verwenden wir eine **bedingte Anweisung**. [_]{.blink} ::: #### Schritt 5.1.1 ::::{.tipp style="margin-top: 1em;"} Unser Ausbildungsteam hat einen Learningsnack dazu erstellt: Learningsnack: Bedingte Anweisung. ::: :::{.merke data-class="Merke: Bedingte Anweisung"} Mit einer **bedingten Anweisung** (*if-Anweisung*) können bestimmte [Anweisungen]{color="orange"} unter gewissen Bedingungen ausgeführt werden. [Nur]{.underline} falls (engl. *if*) die [Bedingung]{color=Magenta} **wahr** ist, werden die Anweisungen ausgeführt. :::: {.columns} ::::: {.column width=33%} **Programmcode:** if([Bedingung]{color="magenta"})
{
[Anweisungen]{style="color: orange; margin-left: 20px;"}
}
::::: ::::: {.column width=33%} **Programmablauf:** ![](if-flowchart.svg) ::::: ::::: {.column width=33%} **Struktogramm:** ![](if-struktogramm.svg) ::::: :::: ::: :::{.terminal} Unsere Ausbildungsabteilung hat auch zu diesem Thema eine kleine Aufwärmübungen parat, bevor es an den echten Rover geht. [_]{.blink} ::: :::{.no-print} **Aufwärmübung**
::: :::{.aufgabe data-class="Aufgabe 5.1.1"} ::: {.columns} :::: {.column width=50%} Der Rover soll nur dann fahren, wenn vor ihm kein Hügel ist. Mit dem Methodenaufruf `huegelVorhanden("vorne")` kannst du prüfen, ob vor dem Rover ein Hügel liegt. :::: :::: {.column width=50%} ![](img/rover-hill.png) :::: ::: :::: {.columns} ::::: {.column width=50%} **Programmcode:** ::::::{.solution} if([huegelVorhanden("vorne")]{color="magenta"})
{
[drehe("rechts");]{style="color: orange; margin-left: 20px;"}
[fahre();]{style="color: orange; margin-left: 20px;"}
[drehe("links");]{style="color: orange; margin-left: 20px;"}
[fahre();]{style="color: orange; margin-left: 20px;"}
[fahre();]{style="color: orange; margin-left: 20px;"}
[drehe("links");]{style="color: orange; margin-left: 20px;"}
[fahre();]{style="color: orange; margin-left: 20px;"}
[drehe("rechts");]{style="color: orange; margin-left: 20px;"}
}
:::::: ::::: ::::: {.column width=50%} **Struktogramm:** :::::{.solution} ![](umfahren-struktogramm.svg) ::::: ::::: :::: ::: #### Schritt 5.1.2 Der Rover kann Gesteine aufheben. Um Energie zu sparen, soll er jedoch nur danach greifen, wenn auch wirklich Gestein unter ihm liegt. :::{.aufgabe data-class="Aufgabe 5.1.2"} Implementiere die neue Methode `nimmGesteinFallsVorhanden()` der Klasse `Rover`. Dabei soll der Rover nur dann versuchen Gestein aufzuheben, wenn unter ihm wirklich welches ist. ::::{.tipp style="margin-top: -0.5em; margin-bottom: 0.5em;"} **Hinweis:** Mit seinem Sensor kann er überprüfen, ob Gestein vorhanden ist (→ Methode: `gesteinVorhanden()`). :::: ::: #### Schritt 5.1.3 ::: {.columns} :::: {.column width=65%} Wie du bereits weißt, kann der Rover Felder mit einem Hügel nicht befahren. Mit seinem Sensor kann er überprüfen, ob sich auf dem Feld vor ihm ein Hügel befindet (→ Methode: `huegelVorhanden("vorne")`{.java}). Ist dies der Fall, soll er sich nach rechts drehen und den Hügel umfahren. :::: :::: {.column width=35%} ![](umfahren.svg) :::: ::: :::{.aufgabe data-class="Aufgabe 5.1.3"} :::: {.columns} ::::: {.column width=70%} Vervollständige die entsprechende Methode `huegelUmfahren()` in der Klasse `Rover`. Teste deine Methoden mit der Datei `Bedingte Anweisung` in der Online-IDE. ::::: ::::: {.column width=30%} ![](img/oide-bedingteAnweisung.png) ::::: :::: :::: {.scorm-autoembed style="width:100%; height:620px;" .no-print} Test: Huegel Umfahren :::: ::: :::{.terminal} Unserem Wissenschafts-Team ist eben aufgefallen, dass es praktisch wäre, wenn man einfach gerade ausfahren kann, wenn *kein* Hügel vor dem Rover ist. Die Technik-Abteilung meint aber der Rover und du ihr bekommt das schon hin. [_]{.blink} ::: #### Schritt 5.1.4 :::{.merke data-class="Merke: Bedingte Anweisung mit Alternative"} Mit einer **bedingten Anweisung mit Alternative** (*if-else-Anweisung*) werden im Gegensatz zur bedingten Anweisung im *else*-Teil alternative Anweisungen ([Anweisungen 2]{color="orange"}) ausgeführt, falls die [Bedingung]{color=Magenta} **falsch** ist. ::: {.columns} :::: {.column width=33%} **Programmcode:** if([Bedingung]{color="magenta"})
{
[Anweisungen 1]{style="color: orange; margin-left: 20px;"}
} else
{
[Anweisungen 2]{style="color: orange; margin-left: 20px;"}
}
:::: :::: {.column width=33%} **Programmablauf:** ![](if-else-flowchart.svg) :::: :::: {.column width=33%} **Struktogramm:** ![](if-else-struktogramm.svg) :::: ::: ::: :::{.aufgabe data-class="Aufgabe 5.1.4"} Der Rover soll nur dann fahren, wenn kein Hügel vorhanden ist. Ansonsten soll er außenrumfahren. ::: {.columns} :::: {.column width=60%} Kein Hügel vorhanden? Dann fahre vorwärts! ![](img/rover-clear1.png){.center} :::: :::: {.column width=5%} **→** :::: :::: {.column width=35%} ![](img/rover-clear2.png) :::: ::: ::: {.columns} :::: {.column width=60%} Hügel vorhanden? Dann fahre am Hügel vorbei! ![](img/rover-hill-compact.png){.center} :::: :::: {.column width=5%} **→** :::: :::: {.column width=35%} ![](img/rover-behind-hill-compact.png) :::: ::: :::: {.columns} ::::: {.column width=50%} **Programmcode:** ::::::{.solution} if([huegelVorhanden("vorne")]{color="magenta"})
{
[drehe("rechts");]{style="color: orange; margin-left: 20px;"}
[fahre();]{style="color: orange; margin-left: 20px;"}
[drehe("links");]{style="color: orange; margin-left: 20px;"}
[fahre();]{style="color: orange; margin-left: 20px;"}
[fahre();]{style="color: orange; margin-left: 20px;"}
[drehe("links");]{style="color: orange; margin-left: 20px;"}
[fahre();]{style="color: orange; margin-left: 20px;"}
[drehe("rechts");]{style="color: orange; margin-left: 20px;"}
} else {
[fahre();]{style="color: orange; margin-left: 20px;"}
}
:::::: ::::: ::::: {.column width=50%} **Struktogramm:** ::::::{.solution} ![](umfahren-else-struktogramm.svg) :::::: ::::: :::: ::: #### Schritt 5.1.5 ::: {.columns} :::: {.column width=50%} :::::{.aufgabe data-class="Aufgabe 5.1.5"} Beschreibe nebenstehende bedingte Anweisungen mit Alternative (Code 1 und Code 2). Verwende folgende Begriffe: *if-Teil*, *else-Teil*, *Methode*, *Bedingung*, *wahr*, *falsch*. ::::: ```{.java .numberLines} if(gesteinVorhanden()) { fahre(); } else { setzeMarke(); } ``` :::: :::: {.column width=50%} ```{.java .numberLines} if(huegelVorhanden("rechts")) { fahre(); drehe("rechts"); fahre(); fahre(); drehe("rechts"); fahre(); fahre(); drehe("rechts"); fahre(); fahre(); drehe("rechts"); } else { setzeMarke(); } ``` :::: ::: ::: {.columns} :::: {.column width=50%} :::::{.aufgabe data-class="Aufgabe 5.1.6"} Analysiere die Methode `wastueich()` und skizziere, wie die abgebildete Welt nach Aufruf der Methode aussieht. ::::: ![](img/wastueich.png) :::: :::: {.column width=50%} ```{.java .numberLines} void wasTueIch() { while(!markeVorhanden()) { if(huegelVorhanden("links")) { if(gesteinVorhanden()) { nimmGestein(); } } fahre(); } } ``` :::: ::: :::{.h5p-autoembed .no-print} Planet: wasTueIch ::: :::{.erledigt} ::: ### Aufgaben für Schnelle :::{.aufgabe data-class="Zusatzaufgabe 5.1.1" style="margin-top: 3rem"} Zeichne die Struktogramme zum **Code aus Aufgabe 5.1.5 und 5.1.6**. Verwende dazu das Online-Tool, der Uni Dresden: ::: :::{.no-print} ::: :::{.no-print} << Zurück zu TODO: %section% :::