Niki der Roboter // mit Problem

Alle Arten von Programmen und Anwendungen: Egal ob Betriebssysteme, Systemtools, Grafikbearbeitung, Musikeditoren oder Textverarbeitung. Hier wird über alles gesprochen.
dARk
Lebende Legende
Lebende Legende

 
Beiträge: 2195
Registriert: 22.09.2001
Di 16. Mär 2004, 20:10 - Beitrag #1

Niki der Roboter // mit Problem

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.

Bild Bild

:shy: dARk

Fips
Good Member
Good Member

Benutzeravatar
 
Beiträge: 479
Registriert: 30.08.2002
Fr 19. Mär 2004, 10:29 - Beitrag #2

Ich weiß ja nicht in welcher Programmiersprache das jetzt genau ist, aber wenn du was rekursives machen musst, vielleicht so (in C):

$this->bbcode_second_pass_code('', '
// Gibt Anzahl der gewanderten Stufen zurück
unsigned char moveNikiSteps(unsigned char direction)
{
if (direction == 1)
...; // Niki eine Stufe abwärts gehn lassen
else if (direction == 2)
...; // Niki eine Stufe aufwärts gehn lassen
else
return 0; // Unbekannte Richtung
if (...) // Wenn Niki auf einem Stockwerk steht, und nicht mehr auf der Treppe
return 1;
else
return moveNikiSteps(direction) + 1; // Funktion nochmals aufrufen
}

void NikiTransportDownstairsUpstairs(void)
{
unsigned char count;
count = moveNikiSteps(1); // Niki abwärts gehn lassen, bis er die Treppe verlassen hat [1 = abwärts] - wir brauchen den Zähler später, um die ursprüngliche Position wiederherstellen zu können ==> count = Entfernung unteres Stockwerk <-> ursprüngliche Pos.
...; // Niki das Ding auf seinem aktuellen Feld aufnehmen lassen
count = moveNikiSteps(2) - count; // Niki aufwärts gehn lassen, bis er die Treppe verlassen hat [2 = aufwärts] - der Zähler wird wiederum gebraucht, nur dass die bereits gegangenen Stufen abgezogen werden müssen, da er ja in die andere Richtung geht ==> count = Entfernung oberes Stockwerk <-> ursprüngliche Pos. (wenn das vorherige count nicht abgezogen würde, wäre es oberes Stockwerk <-> unteres)
...; // Niki das aufgenommene Ding auf dem aktuellen Feld ablegen lassen
...; // Niki [I]count[/I] Stufen abwärts gehn lassen --> ursprüngliche Position
}

')

Ich hoffe mal, dass das verständlich war ;)
Wofür die Funktion allerdings rekursiv sein soll, ist mir nicht ganz klar - für mich wäre das mit einer for-Schleife besser gelöst.

Fips

Anm.: Natürlich dürfen die Entfernungen Ausgangsposition <-> Stockwerke 255 Stufen nicht überschreiten, da die Variablen sonst zu klein sind.

dARk
Lebende Legende
Lebende Legende

 
Beiträge: 2195
Registriert: 22.09.2001
Fr 19. Mär 2004, 15:13 - Beitrag #3

$this->bbcode_second_pass_code('', '
PROCEDURE hole_von_unten;
BEGIN
gehe_eins_nach_unten;
IF unten_angekommen THEN gegenstand_nehmen
ELSE hole_von_unten;
gehe_eins_nach_oben;
END;

PROCEDURE bringe_nach_oben;
BEGIN
gehe_eins_nach_oben;
IF oben_angekommen THEN gegenstand_ablegen;
ELSE bringe_nach_oben;
gehe_eins_nach_unten;
END;

PROCEDURE mach_es;
BEGIN
hole_von_unten;
bringe_nach_oben;
END.


BEGIN
mach_es;
END.
')

das hats auch getan :P


Zurück zu Software

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 12 Gäste