Niki der Roboter / mit Problem

seltsam!

Newbie
Registriert
März 2004
Beiträge
1
Hallo Leute, ich hab ein Problem ich soll eine Rekursive Prozedur schreiben, tappe aber völlig im dunkeln, kann mir vlt jemand von euch helfen?

Das Problem:
Der Roboter steht auf irgendeiner Stufe einer Treppe, die zwei Stockwerke miteinander verbindet, und schaut auf die Treppe. Die Anzahl der Stufen ist nicht bekannt. Niki soll programmiert werden, dass er einen Gegenstand, der auf dem unteren Stockwerk unmittelbar an der Treppe liegt aufnimmt, zum oberen Stockwerk trägt, dort ablegt und zur Ausgangsposition zurückkehrt.

niki1.jpg
niki2.jpg


VG Falco
 
Ich kann dir jetzt keinen Code dafür schreiben, aber die grundsätzliche Idee wohl liefern:

1. Gehe solange vorwärts, bis es nicht mehr weiter geht (while vorne frei gehe vor)
2. Dann einmal um 90° nach links drehen.
3. Solange vorwärts gehen, wie rechts nicht frei ist (oder solange, bis rechts frei ist, kann man machen wie man will)
4. Rechts drehen um 90°
5. rekursiver Aufruf
6. das gleich nur rückwärts
 
Mit dem Mist musste ich mich früher auch mal befassen. Hier mal eine allgemeine Lösung, kenn die Befehle net mehr auswendig.

zähler =0

*1=
gehe links prüfe ob unten strich wenn
ja : gehe rechts nimm gegenstand and goto *2
nein : gehe unten und zähler -1 führ *1 wieder aus

*2 = prüfe ob rechts strich falls
ja : gehe oben, gehe rechts und zähler+1 führe *2 wieder aus
nein : lege gegenstand ab rufe *3 auf (zähler mal)

*3 = gehe links gehe unten
 
Zuletzt bearbeitet:
die lösung von buccaneer ist itterativ, nicht rekursiv. eine rekursive methode erkennt man eindeutig am selbstaufruf, der fehlt bei dieser lösung.
kurz gesagt, stufe hochgehen, falls eine vorhanden ist. wenn der gegenstand nicht erreicht wurde --> das gleiche nochmal (selbstaufruf).
danach wieder zurück.

is schon cool, eine ähnliche umgebung mit nicki bekam ich in meinem informatikunterricht in der schule vor über 10 jahren.
damals lief das teil im textmodus. ;)
 
Ähm Green Mamba, die Methoden rufen sich selbst auf. *1 ruft in sich wider sich selbst auf und die *2 ebenfalls
 
oh ups, wohl 2 bier zu viel getrunken... ;)
in meiner lösung rennt nicki zudem auch noch zuerst in die falsche richtung! :cool_alt:

:n8:
 
Hmm wie wärs denn hiermit:


Code:
GeheHoch
{
  RoboterNachOben

  Wenn Oben -> LegeGegenstand
  Sonst GeheHoch

  RoboterNachUnten
}


GeheRunter
{
  RoboterNachUnten

  Wenn Unten -> NimmGegenstand, dann GeheHoch
  Sonst GeheRunter

  RoboterNachOben
}

HauptProgramm
{
  GeheRunter
}

Der Nachteil ist, dass wenn der Roboter oben ist, er erst wieder ganz nach unten und dann erst zur Mitte zurückkehrt. Kann man vermeiden, indem man erst GeheRunter aufruft (ohne dass geheRunter geheHoch aufruft) und wenn der Roboter dann wieder in der Mitte ist, GeheHoch aufruft. Damit wären es aber eigentlich schon 2 Prozeduren :)
 
Zuletzt bearbeitet:
Zurück
Oben