8.581
Bearbeitungen
Jneug (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
Jneug (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
||
(8 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
{{Karte}} | {{Karte|Hilfe=9}} | ||
Wenn ein Algorithmus zu groß und komplex wird, dann ist es hilfreich, die Strukturierte Zerlegung (siehe dazu {{Pfad|17|Karte 17}}) anzuwenden, um ihn in kleiner Teilprobleme zu zerlegen. In Java nutzt man dazu ''Methoden''. | Wenn ein Algorithmus zu groß und komplex wird, dann ist es hilfreich, die Strukturierte Zerlegung (siehe dazu {{Pfad|17|Karte 17}}) anzuwenden, um ihn in kleiner Teilprobleme zu zerlegen. In Java nutzt man dazu ''Methoden''. | ||
Zeile 17: | Zeile 17: | ||
* Bessere Lesbarkeit des Quelltextes. | * Bessere Lesbarkeit des Quelltextes. | ||
* Leichtere Aufteilung im Team. ("Ich implementiere <code>fahre</code>, du implementierst <code>drehe</code>.") | * Leichtere Aufteilung im Team. ("Ich implementiere <code>fahre</code>, du implementierst <code>drehe</code>.") | ||
{{Lösung:End}} | |||
In Java wird eine ''Methode'' so definiert: | |||
<syntaxhighlight lang="java"> | |||
public void dreimalFahre() { | |||
fahre(); | |||
fahre(); | |||
fahre(); | |||
} | |||
</syntaxhighlight> | |||
Sie besteht aus einem ''Methodenkopf'' und einem ''Methodenrumpf''. Der Rumpf enthält die Befehle, die ausgeführt werden sollen. Der Kopf besteht aus den Schlüsselwörtern <code>public void</code> und einem ''Bezeichner'' für den neuen Befehl. Den Bezeichner kannst du frei wählen, aber er sollte aussagekräftig sein. | |||
{{Aufgabe:Start|Icon=Greenfoot Rover.png}} | |||
# Implementiere eine Methode <code>public void umdrehen()</code>, die den Rover um 180 Grad dreht. | |||
# Implementiere eine Methode <code>public void vierVorUndRechts()</code>, die den Rover vier vor fahren lässt und ihn dann nach rechts dreht. | |||
{{Aufgabe:End}} | |||
{{Lösung:Start}} | |||
<syntaxhighlight lang="java"> | |||
public void umdrehen() { | |||
drehe("rechts"); | |||
drehe("rechts"); | |||
} | |||
public void vierVorUndRechts() { | |||
fahre(); | |||
fahre(); | |||
fahre(); | |||
fahre(); | |||
drehe("rechts"); | |||
} | |||
</syntaxhighlight> | |||
{{Lösung:End}} | {{Lösung:End}} | ||
Zeile 22: | Zeile 52: | ||
Der Rover steht vor dem gezeigten Hügelsystem. | Der Rover steht vor dem gezeigten Hügelsystem. | ||
[[Datei:Rover Karte19 Raute. | [[Datei:Rover Karte19 Raute.jpg|center]] | ||
# Zerlege das Problem in deinem Heft in sinnvolle Teilprobleme. | # Zerlege das Problem in deinem Heft in sinnvolle Teilprobleme. | ||
# Implementiere jedes Teilproblem für sich in einer Methode. (Wähle sinnvolle Bezeichner für die Methoden.) | # Implementiere jedes Teilproblem für sich in einer Methode. (Wähle sinnvolle Bezeichner für die Methoden.) | ||
# Implementiere eine Lösung des Problems unter Verwendung der Methoden aus 2. | # Implementiere eine Lösung des Problems unter Verwendung der Methoden aus 2. | ||
{{Aufgabe:End}}{{Aufgabe:Start|Für Fortgeschrittene|Icon=Greenfoot Rover.png}} | |||
Entwirf das Programm so, dass die Größe des Hügels egal ist. Die Form einer Raute bleibt aber erhalten. Lade die Karte <code>"karte18_huegelraute"</code> in die Planetenwelt für eine zufällige Raute bei jedem Reset. | |||
{{Aufgabe:End}} | |||
{{Lösung:Start}} | |||
Mögliche Zerlegung: | |||
; <code>rauteAbfahren()</code> | |||
: Lösung des Problems: Die gesamte Raute wird abgefahren und die Steine gesammelt. | |||
; <code>fahreSeite()</code> | |||
: Fährt eine Seite der Raute ab, wenn der Rover mit Blickrichtung zur Raute steht. | |||
; <code>fahreUmHuegel()</code> | |||
: Fährt um einen einzelnen Huegel an einer Seite der Raute. | |||
<syntaxhighlight lang="java"> | |||
{{ | public void fahreUmHuegel() { | ||
drehe("links"); | |||
fahre(); | |||
drehe("rechts"); | |||
fahre(); | |||
} | |||
public void fahreSeite() { | |||
fahreUmHuegel(); | |||
fahreUmHuegel(); | |||
fahreUmHuegel(); | |||
drehe("rechts"); // Blickrichtung zur Raute | |||
} | |||
public void rauteAbfahren() { | |||
fahreSeite(); | |||
analysiereGestein(); // Analysiere das Gestein am Ende der Seite | |||
fahreSeite(); | |||
analysiereGestein(); | |||
fahreSeite(); | |||
analysiereGestein(); | |||
fahreSeite(); | |||
} | |||
</syntaxhighlight> | |||
{{Lösung:End}} | |||
{{Lösung:Start|Lösung des fortgeschrittenen Problems}} | |||
<syntaxhighlight lang="java"> | |||
public void fahreUmHuegel() { | |||
drehe("links"); | |||
fahre(); | |||
drehe("rechts"); | |||
fahre(); | |||
} | |||
public void fahreSeite() { | |||
// Solange kein Hügel vorhanden | |||
while( !huegelVorhanden("vorne") ) { | |||
fahreUmHuegel(); | |||
} | |||
// Blickrichtung zur Raute | |||
drehe("rechts"); | |||
} | |||
public void rauteAbfahren() { | |||
fahreSeite(); | |||
analysiereGestein(); // Analysiere das Gestein am Ende der Seite | |||
fahreSeite(); | |||
analysiereGestein(); | |||
fahreSeite(); | |||
analysiereGestein(); | |||
fahreSeite(); | |||
} | |||
</syntaxhighlight> | |||
{{Lösung:End}} | |||
{{Inhalt/Lerntheke}} | {{Inhalt/Lerntheke}} |
Bearbeitungen