Jahrgangsstufe Q1 - Informatik - Donnerstag, der 11. März 2021


Rekursion

Mein Name:
Jahrgang/Klasse:
Meine E-Mail-Adresse:

Information 1:

Ganz nützlich für viele Situationen können die folgenden beiden Methoden sein:

  public void turnAround()
  { kara.turnLeft();
    kara.turnLeft();
  }

  public void moveBack()
  { turnAround();
    kara.move();
    turnAround();
  }

Information 2:

Kara hat für Blätter nur den Sensor kara.onLeaf(), kann also nur feststellen, ob ein Blatt direkt unter ihm liegt. Wir wissen aber, wie man Funktionen programmiert, die ebenso einen booleschen Wert true oder false zurückliefern. Hier ein Beispiel:

  public boolean leafFront()
  { boolean blatt=false; // false, wenn vorne Baum steht
    if (!kara.treeFront())
         { // jetzt muss man nachschauen
           kara.move();
           blatt=kara.onLeaf(); // blatt uebernimmt den booleschen
           moveBack();         // Funktionswert von onLeaf()
         }
    return blatt;
  }

Nun kann man in einem Programm (nach der Ergänzung von leafLeft()) auch Abfragen wie

  if(leafFront() || leafLeft())

machen. Das erfordert zwar etwas mehr sportliche Bewegung für den Marienkäfer, aber das tut in Corona-Zeiten jedem ganz gut.

Auftrag:

Kara steht auf dem ersten Blatt einer Blätterspur, die durch einen Wald führt und an einem Pilz endet (kara.mushroomFront()=true). Er soll rekursiv die Spur entlanglaufen bis zum Pilz, sich umdrehen und den gleichen Weg (den er sich rekursiv "gemerkt hat) zurückgehen. Die nötigen Methoden zum Nachsehen, wo der Weg jeweils weitergeht, sind noch zu ergänzen (siehe oben).
Das Programm kann wieder folgendermaßen strukturiert sein:

import javakara.JavaKaraProgram;
public class PacmanDurchWald extends JavaKaraProgram
{
  public void einenSchrittWeiter()
  { if ()
         {
         }
    else if ()
         {
         }
    else if ()
         {
         }
    else {
         }
  } // Ende von einenSchrittWeiter

  public void myProgram()
  {  einenSchrittWeiter(); }
}  // Ende der Klasse PacmanDurchWald

Gib das komplette Programm hier ein.