---
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:**

:::::
::::: {.column width=33%}
**Struktogramm:**

:::::
::::
:::
:::{.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%}

::::
:::
:::: {.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}

:::::
:::::
::::
:::
#### 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%}

::::
:::
:::{.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%}

:::::
::::
:::: {.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:**

::::
:::: {.column width=33%}
**Struktogramm:**

::::
:::
:::
:::{.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!
{.center}
::::
:::: {.column width=5%}
**→**
::::
:::: {.column width=35%}

::::
:::
::: {.columns}
:::: {.column width=60%}
Hügel vorhanden?
Dann fahre am Hügel vorbei!
{.center}
::::
:::: {.column width=5%}
**→**
::::
:::: {.column width=35%}

::::
:::
:::: {.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}

::::::
:::::
::::
:::
#### 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.
:::::

::::
:::: {.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%
:::