Lernpfad:Lerntheke Marsrover/19: Unterschied zwischen den Versionen

Aus Informatik-Box
Zur Navigation springen Zur Suche springen
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
 
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 2)}}
{{Lösung:Start|Lösung zu 1)}}
<syntaxhighlight lang="Java">
<syntaxhighlight lang="Java">
     public void act() {
     public void act() {
Zeile 30: Zeile 30:
         entferneMarke();
         entferneMarke();
         drehe("links");
         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>
</syntaxhighlight>

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);
    }