Lernpfad:Lerntheke Marsrover/25: Unterschied zwischen den Versionen

keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
 
(7 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 27: Zeile 27:
Innerhalb der runden Klammern steht die Bedingung. Eine Bedinung ist immer entweder ''wahr'' (<code>true</code>) oder ''falsch'' (<code>false</code>). Mit dem Ausrufungszeichen kann die Bedungung ''negiert'' werden (aus <code>true</code> wird <code>false</code> und umgekehrt).
Innerhalb der runden Klammern steht die Bedingung. Eine Bedinung ist immer entweder ''wahr'' (<code>true</code>) oder ''falsch'' (<code>false</code>). Mit dem Ausrufungszeichen kann die Bedungung ''negiert'' werden (aus <code>true</code> wird <code>false</code> und umgekehrt).


Der Rover hat einige ''Anfragen'', die als Bedingung genutzt werden können:
{| {{prettytable}}
|+ Anfragen des Mars-Rovers
|-
|''Anfrage''
|<code>boolean huegelVorhanden(String richtung)</code>
|-
|
|Prüft, ob sich in der angegebenen Richtung ("rechts", "links" oder "vorne") ein Hügel befindet.
|-
|''Anfrage''
|<code>boolean gesteinVorhanden()</code>
|-
|
|Prüft, ob auf dem Feld des Rovers ein Gestein vorhanden ist.
|-
|''Anfrage''
|<code>boolean markeVorhanden()</code>
|-
|
|Prüft, ob auf dem Feld des Rovers eine Marke vorhanden ist.
|}
{{Aufgabe:Start|Icon=Greenfoot Rover.png}}
# Teste die Lösung des Problems oben.
# Implementiere eine Schleife, die den Rover bis zum nächsten Hügel fahren lässt.
{{Aufgabe:End}}
{{Lösung:Start}}
# <syntaxhighlight lang="Java">
public void act() {
while( !gesteinVorhanden() ) {
fahre();
}
analysiereGestein();
}
</syntaxhighlight>
# <syntaxhighlight lang="Java">
public void act() {
while( !huegelVorhanden("vorne") ) {
fahre();
}
}
</syntaxhighlight>
{{Lösung:End}}
{{Aufgabe:Start|Icon=Greenfoot Rover.png}}
Der Rover steht neben einem Rechteck aus Hügeln und soll einmal um den gesammten Hügel fahren. Dazu legt er zunächst eine Marke ab und fährt dann solange, bis er die Marke wieder erreicht hat.
Implementiere einen Algorithmus, der den Rover für beliebig große Rechtechte eine Runde fahren lässt.
[[Datei:Rover Karte25 Rechteck.jpg|center]]
Du kannst die Karte <code>"karte25_rechteck"</code> im Planetenszenario laden, um eine zufällige Raute zu erzeugen.
{{Aufgabe:End}}
{{Lösung:Start|Lösungshinweis}}
Der Rover muss viermal eine Seite des Rechtecks abfahren. Dazu muss er jeweils solange fahren, wie rechts von ihm noch ein Hügel ist.
Wiederholungen können auch innerhalb von Wiederholungen vorkommen!
{{Lösung:End}}
{{Lösung:Start}}
<syntaxhighlight lang="Java">
public void act() {
setzeMarke();
    fahre();
while( !markeVorhanden() ) {
while( huegelVorhanden("rechts") ) {
fahre();
}
        drehe("rechts");
        fahre();
    }
}
</syntaxhighlight>
{{Lösung:End}}
{{Aufgabe:Start|Icon=Greenfoot Rover.png}}
Der Rover steht vor einer Reihe mit Marken. Auf jedem Feld können eine oder auch mehrere Marken liegen.
Der Rover soll vorwärts fahren, bis er auf einem Feld ankommt, das keine Marke enthält, und auf dem Weg ''alle'' Marken einsammeln.
{{Aufgabe:End}}
{{Roverkarte|.\n.\n.\n.\n..(MR)(MMM)(MM)(MMM)M(MM)(M)(MMM).}}
{{Lösung:Start}}
<syntaxhighlight lang="Java">
public void act() {
while( markeVorhanden() ) {
    while( markeVorhanden() ) {
        entferneMarke();
        }
        fahre();
    }
}
</syntaxhighlight>
{{Lösung:End}}




{{Inhalt/Lerntheke}}
{{Inhalt/Lerntheke}}