Lernpfad:Lerntheke Marsrover/18: Unterschied zwischen den Versionen

keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
 
(10 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 19: Zeile 19:
{{Lösung:End}}
{{Lösung:End}}


{{Aufgabe:Start|Icon=Mars Rover.png}}
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}}
 
{{Aufgabe:Start|Icon=Greenfoot Rover.png}}
Der Rover steht vor dem gezeigten Hügelsystem.  
Der Rover steht vor dem gezeigten Hügelsystem.  
[[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.


''Für Fortgeschrittene'': Entwirf das Programm so, dass die Größe des Hügels egal ist. Die Form einer Raute bleibt aber erhalten. Lade die Karte "Karte19_Huegelraute" in die Planetenwelt für eine zufällige Raute bei jedem Reset.
<syntaxhighlight lang="java">
{{Aufgabe:End}}
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}}
8.581

Bearbeitungen