Lernpfad:Lerntheke Marsrover/19: Unterschied zwischen den Versionen

Aus Informatik-Box
Zur Navigation springen Zur Suche springen
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
 
(3 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
{{Karte}}
{{Karte|Hilfe=9,10,11}}


{{Kasten|
{{Aufgabe:Start|Icon=Greenfoot Rover.png}}
Diese Karte ist noch nicht ganz fertig. Such dir erstmal eine der anderen Karten im Index aus.
# Zerlege jeweils das Problem in sinvolle Teilprobleme (mindestens eins). Implementiere dann pro Teilproblem eine Methode und kombiniere die neuen Befehle dann zu einer Gesamtlösung.
|Farbe={{Farbe:Warnung}}}}
{{Aufgabe:End}}
<!-- Methoden implementieren. -->
 
{| {{Prettytable}}
| '''1)'''
| Der Rover soll das Gestein analysieren. Dazu soll er dem Weg aus Marken folgen, indem er immer bis zur nächsten Marke fährt und sich nach links dreht.
| {{Roverkarte|.\nM....M\n.M.......M\n........G.....M\n.\n.\n...M........M\n.\n...M.M\n.\n.M..........M\nM.....R..M....M}}
|-
| '''2)'''
| Der Rover soll auf jedem Feld eine Marke ablegen.
| {{Roverkarte|HHHHHHHHHHHHHHH\nH...H.........H\nH.........H...H\nH....H........H\nH..........H..H\nH...H.........H\nH.............H\nH......H......H\nH..H..........H\nH........H....H\nHR..H.........H\nHHHHHHHHHHHHHHH}}
|}
 
{{Lösung:Start|Lösung zu 1)}}
<syntaxhighlight lang="Java">
    public void act() {
        while( !gesteinVorhanden() ) {
            fahreZuMarke();
        }
        analysiereGestein();
    }
 
    public void fahreZuMarke() {
        while( !markeVorhanden() && !gesteinVorhanden() ) {
            fahre();
        }
        entferneMarke();
        drehe("links");
    }
</syntaxhighlight>
{{Lösung:End}}
{{Lösung:Start|Lösung zu 2)}}
<syntaxhighlight lang="Java">
    public void act() {
        String richtung = "links";
        do {
            fahreBisHuegel();
            fahreUmHuegel();
            fahreBisHuegel();
            wechseleReihe(richtung);
            if( richtung == "links" )
                richtung = "rechts";
            else
                richtung = "links";
        } while( !huegelVorhanden("links") );
    }
 
    public void fahreBisHuegel() {
        while( !huegelVorhanden("vorne") ) {
            setzeMarke();
            fahre();
        }
        setzeMarke();
    }
   
    public void fahreUmHuegel() {
        drehe("links");
        if( !huegelVorhanden("vorne") ) {
            fahre();
            drehe("rechts");
            fahre();
            fahre();
            drehe("rechts");
            fahre();
            drehe("links");
        } else {
            drehe("links");
            drehe("links");
            fahre();
            drehe("links");
            fahre();
            fahre();
            drehe("links");
            fahre();
            drehe("rechts");
        }
    }
   
    public void wechseleReihe( String pRichtung ) {
        drehe(pRichtung);
        fahre();
        drehe(pRichtung);
    }
</syntaxhighlight>
{{Lösung:End}}


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

Aktuelle Version vom 1. Dezember 2020, 09:47 Uhr

Programme strukturieren II
Greenfoot Rover.png
Arbeitsauftrag
  1. Zerlege jeweils das Problem in sinvolle Teilprobleme (mindestens eins). Implementiere dann pro Teilproblem eine Methode und kombiniere die neuen Befehle dann zu einer Gesamtlösung.


1) Der Rover soll das Gestein analysieren. Dazu soll er dem Weg aus Marken folgen, indem er immer bis zur nächsten Marke fährt und sich nach links dreht.
Kartendaten:
".\nM....M\n.M.......M\n........G.....M\n.\n.\n...M........M\n.\n...M.M\n.\n.M..........M\nM.....R..M....M"
2) Der Rover soll auf jedem Feld eine Marke ablegen.
Kartendaten:
"HHHHHHHHHHHHHHH\nH...H.........H\nH.........H...H\nH....H........H\nH..........H..H\nH...H.........H\nH.............H\nH......H......H\nH..H..........H\nH........H....H\nHR..H.........H\nHHHHHHHHHHHHHHH"
Lösung zu 1)
    public void act() {
        while( !gesteinVorhanden() ) {
            fahreZuMarke();
        }
        analysiereGestein();
    }

    public void fahreZuMarke() {
        while( !markeVorhanden() && !gesteinVorhanden() ) {
            fahre();
        }
        entferneMarke();
        drehe("links");
    }
Lösung zu 2)
    public void act() {
        String richtung = "links";
        do {
            fahreBisHuegel();
            fahreUmHuegel();
            fahreBisHuegel();
            wechseleReihe(richtung);
            if( richtung == "links" )
                richtung = "rechts";
            else
                richtung = "links";
        } while( !huegelVorhanden("links") );
    }

    public void fahreBisHuegel() {
        while( !huegelVorhanden("vorne") ) {
            setzeMarke();
            fahre();
        }
        setzeMarke();
    }
    
    public void fahreUmHuegel() {
        drehe("links");
        if( !huegelVorhanden("vorne") ) {
            fahre();
            drehe("rechts");
            fahre();
            fahre();
            drehe("rechts");
            fahre();
            drehe("links");
        } else {
            drehe("links");
            drehe("links");
            fahre();
            drehe("links");
            fahre();
            fahre();
            drehe("links");
            fahre();
            drehe("rechts");
        }
    }
    
    public void wechseleReihe( String pRichtung ) {
        drehe(pRichtung);
        fahre();
        drehe(pRichtung);
    }