1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
|
---
section: Bedingte Wiederholung
title: Bedingte Wiederholung
---
:::{.no-print}
::::{.tipp}
Vergiss nicht das Arbeitsblatt: %section% herunterzuladen.
::::
:::
:::{.terminal}
Um unser gesuchtes Mineral zu finden, wollen wir Gesteinsproben untersuchen.
Der Rover kann Gestein unter sich aufnehmen, damit es später genauer analysiert werden kann.
Es ist deine Aufgabe eine **Methode** zu schreiben, mit der der Rover auf das Gestein vor ihm fährt und es aufsammelt.
Das letzte Team hat die folgenden Vorschläge gemacht.
[_]{.blink}
:::
::: {.columns}
:::: {.column width=33%}

```java
void sucheGestein()
{
fahre();
fahre();
nimmGestein();
}
```
::::
:::: {.column width=33%}

```java
void sucheGestein()
{
fahre(); fahre(); fahre();
fahre(); fahre(); fahre();
fahre(); fahre();
nimmGestein();
}
```
::::
:::: {.column width=33%}

```java
void sucheGestein()
{
wiederhole solange kein Stein vorhanden
fahre();
nimmGestein();
}
```
::::
:::
:::{.merke data-class="Merke: Wiederholung mit Bedingung"}
Mit einer **Wiederholung mit Bedingung** (while-Schleife) können bestimmte [Anweisungen]{color="orange"} mehrmals ausgeführt werden.
Solange die [Bedingung]{color="magenta"} *wahr* ist, wird die Sequenz wiederholt.
Wenn die Bedingung *falsch* ist, wird der Programmcode nach der Wiederholung fortgesetzt.
::: {.columns}
:::: {.column width=33%}
**Programmcode:**
<code style="white-space: pre;">
while([Bedingung]{color="magenta"})<br>
{<br>
[Anweisungen]{style="color: orange; margin-left: 20px;"}<br>
}
</code>
::::
:::: {.column width=33%}
**Programmablauf:**

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

::::
:::
:::
{.center}
:::{.terminal}
Der letzte Vorschlag unseres Teams sieht schon nicht schlecht aus.
Leider ist der vorgeschlagene Code noch kein korrektes Java Programm.
In Java kann das **kein** in "*kein Gestein*" durch ein Ausrufezeichen `!`{style="color: red;"} ausgedrückt werden.
[_]{.blink}
:::
:::{.aufgabe data-class="Aufgabe 4.1"}
Übertrage die Methode `sucheStein()` in die drei Darstellungsformen.
:::: {.columns}
::::: {.column width=33%}
**Programmcode:**
<div style="height: 10cm;"></div>
:::::
::::: {.column width=33%}
**Programmablauf:**
:::::
::::: {.column width=33%}
**Struktogramm:**
:::::
::::
:::
:::{.tipp style="margin-top: 1rem;"}
Vergiss nicht einen Screenshot deiner Lösung abzugeben unter Planet: Aufgabe 4.1
{style="margin-top: 5px;"}
:::
:::{.terminal}
Unsere Ausbildungsabteilung hat folgende Trainingsaufgaben als Aufwärmübungen für angehende Pilot*innen empfohlen.
[_]{.blink}
:::
:::{.no-print}
<summary>
**Aufwärmübung**
<details>
<iframe allowfullscreen data-external="1" src="https://jwinf.de/task/1800" width="100%" height="500px">
</iframe>
</details>
</summary>
:::
:::{.terminal}
Nun bist du auf dich selbst gestellt.
Schaffst du die unterschiedlichen Aufgaben auf der Planetenoberfläche?
[_]{.blink}
:::
#### Schritt 4.1
Vervöllständige die Methode `sammleSteine()`{.java} der Klasse `Rover` in der [Online-IDE](online-ide.de), mit der der Rover eine beliebig lange Gesteinsreihe aufsammeln kann.
{.center}
Teste die Methode in der Datei **SammleSteine**.
#### Schritt 4.2
Mit der Methode `bergketteAbfahren()`, kann der Rover an einer beliebig langen Bergkette entlang fahren.
Der Programmablaufplan beschreibt den Aufbau der Methode.
::: {.columns}
:::: {.column width=60%}

::::
:::: {.column width=40%}
{style="max-height:6cm;"}
::::
:::
* Überlege dir zunächst genau, wo der Rover nach Aufruf der Methode steht und an welchen Stellen er Marken gesetzt hat.
* Setze die Methode `bergketteAbfahren()`{.java} in der [Online-IDE](online-ide.de) in der Klasse `Rover` um.
* Teste die Methode in der Datei **BergketteAbfahren** und finde heraus, ob deine Vermutung richtig war.
:::{.page-break}
:::
#### Schritt 4.3
::: {.columns}
:::: {.column width=50%}
:::::{.aufgabe data-class="Aufgabe 4.2"}
Analysiere die folgenden Wiederholungen im abgebildeten Szenario, indem du jeweils angibst, wie oft die Bedingung überprüft wird, wie oft die Anweisung ausgeführt wird, auf welchen Feldern eine Marke gesetzt wird und auf welchem Feld der Rover nach Ausführung des Programms steht.
Überprüfe deine Lösung unter Planet: Aufgabe 4.2.

:::::
::::
:::: {.column width=50%}

::::
:::
<table style="font-size: 0.9em;">
<tr>
<td>
**Code A**
```java
while(huegelVorhanden("links"))
{
fahre();
}
```
</td>
<td>
**Code B**
```java
while(huegelVorhanden("rechts"))
{
fahre();
}
```
</td>
<td>
**Code C**
```java
while(!huegelVorhanden("links"))
{
fahre();
}
```
</td>
</tr>
<tr>
<td>
**Code D**
```java
while(!huegelVorhanden("rechts"))
{
fahre();
}
```
</td>
<td>
**Code E**
```java
while(huegelVorhanden("rechts"))
{
fahre();
setzeMarke();
}
```
</td>
<td>
**Code F**
```java
while(!huegelVorhanden("links"))
{
fahre();
}
setzeMarke();
```
</td>
</tr>
</table>
::: {.columns}
:::: {.column width=50%}
:::::{.aufgabe data-class="Aufgabe 4.3"}
Der Rover soll alle Gesteine sammeln.
Dazu hat Tim einen Algorithmus verfasst und ihn als Struktogramm dargestellt.
Beschreibe, welches Problem im abgebildeten Szenario auftritt.
:::::
::::
:::: {.column width=50%}


::::
:::
::: {.columns}
:::: {.column width=50%}
:::::{.aufgabe data-class="Aufgabe: 4.4"}
Im nebenstehenden Code befinden sich **6** Fehler.
Gib die Zeilennummern der Fehler an und beschreibe den Fehler kurz.
:::::
::::
:::: {.column width=50%}
```{.java .numberLines}
boolean tueWas()
{
while(!gesteinVorhanden()
{
fahre();
}
drehe("rechts");
while(!huegelVorhanden(vorne))
fahre();
}
nimmGestein()
}
```
::::
:::
:::{.erledigt}
:::
:::{.no-print}
<< Zurück zu TODO: %section%
:::
|