Lernpfad:Lerntheke Marsrover/19: Unterschied zwischen den Versionen

Aus Informatik-Box
Zur Navigation springen Zur Suche springen
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
 
(Eine dazwischenliegende Version desselben Benutzers wird nicht angezeigt)
Zeile 7: Zeile 7:
{| {{Prettytable}}
{| {{Prettytable}}
| '''1)'''
| '''1)'''
| Der Rover soll auf jedem Feld eine Marke ablegen.
| 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|HHHHHHHHHHHHHHH\nH...H.........H\nH.........H...H\nHH............H\nH..........H..H\nH...H.........H\nH.............H\nH......H......H\nH..H..........H\nH........H....H\nHR...........HH\nHHHHHHHHHHHHHHH}}
| {{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)'''
| '''2)'''
| 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.
| Der Rover soll auf jedem Feld eine Marke ablegen.
| {{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}}
| {{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);
    }