Lernpfad:Lerntheke Marsrover/31: Unterschied zwischen den Versionen

keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
Zeile 114: Zeile 114:
      
      
}
}
</syntaxhighlight>


Die Turingmaschine schreibt eine "1" (eine Marke) auf das Band und macht dann nichts mehr (terminiert).
Die Turingmaschine schreibt eine "1" (eine Marke) auf das Band und macht dann nichts mehr (terminiert). Da die Maschine nur einen Zustand hat, handelt es sich um einen "Fleißigen Biber" (bzw. "Fleißigen Rover"), der die maximale Anzahl "1" auf das Band schreibt, die mit genau einem Zustand möglich ist.
{{Lösung:End}}
 
{{Aufgabe:Start|Icon=Greenfoot Rover.png}}
# Implementiere einen "Fleißigen Rover" mit zwei Zuständen.
# Implementiere einen "Fleißigen Rover" mit drei Zuständen.
 
Probiere selber, eine möglichst gute lösung zu finden. Wenn du eine Lösung hast, kannst du dein Ergebnis mit der maximalen Anzahl vergleichen, die unten in der Lösung steht.
{{Aufgabe:End}}
{{Lösung:Start|Hinweis zum Biber mit drei Zuständen}}
Der "Fleißige Biber" mit drei Zuständen kann maximal 21 "1" auf das Band schreiben. Da unser Band nur 15 Felder hat, wirst du auch bei optimaler Lösung nicht alle "1" schreiben können.
{{Lösung:End}}
{{Lösung:Start|Maximale Anzahl "1" bei fester Anzahl an Zuständen}}
* Ein Zustand: 1-mal "1"
* Zwei Zustände: 6-mal "1"
* Drei Zustände: 21-mal "1"
* Vier Zustände: 107-mal "1"
{{Lösung:End}}
{{Lösung:Start|Lösung für zwei Zustände}}
<syntaxhighlight lang="java">
    private int zustand = 0;
 
    public void act() {
        switch( zustand ) {
            case 0:
                zustand = zustand0();
                break;
            case 1:
                zustand = zustand1();
                break;
        }
    }
   
    public int zustand0() {
        if( markeVorhanden() ) {
            links();
            return 1;
        } else {
            setzeMarke();
            rechts();
            return 1;
        }
    }
   
    public int zustand1() {
        if( markeVorhanden() ) {
            rechts();
            return 2;
        } else {
            setzeMarke();
            links();
            return 0;
        }
    }
</syntaxhighlight>
{{Lösung:End}}
{{Lösung:Start|Lösung für drei Zustände}}
<syntaxhighlight lang="java">
    private int zustand = 0;
 
    public void act() {
        switch( zustand ) {
            case 0:
                zustand = zustand0();
                break;
            case 1:
                zustand = zustand1();
                break;
            case 2:
                zustand = zustand2();
                break;
        }
    }
   
    public int zustand0() {
        if( markeVorhanden() ) {
            rechts();
            return 3;
        } else {
            setzeMarke();
            rechts();
            return 1;
        }
    }
   
    public int zustand1() {
        if( markeVorhanden() ) {
            rechts();
            return 1;
        } else {
            rechts();
            return 2;
        }
    }
   
    public int zustand2() {
        if( markeVorhanden() ) {
            links();
            return 0;
        } else {
            setzeMarke();
            links();
            return 2;
        }
    }
</syntaxhighlight>
</syntaxhighlight>
{{Lösung:End}}
{{Lösung:End}}


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

Bearbeitungen