[Turbo-Pascal] Niki Problem

bobewerk

Newbie
Registriert
Apr. 2004
Beiträge
2
Niki Problem

Hallo zusammen!

bei dem u.g. Programm fehlt mir leider das richtige Ende: Niki soll am Ende (=startposition) stehen bleiben und den aufgenommenen Gegenstand wieder ablegen.

Hat einer von euch eine idee, was ich im Code ändern muss?

Vielen Dank für eure Hilfe!

Dennis

PROGRAM Labyrinth;

PROCEDURE drehe_rechts;
BEGIN
drehe_links;
drehe_links;
drehe_links
END;


PROCEDURE dreh_um;
BEGIN
drehe_links;
drehe_links
END;

PROCEDURE dl;
BEGIN
drehe_links
END;

PROCEDURE dr;
BEGIN
drehe_rechts
END;

PROCEDURE v;
BEGIN
vor
END;

PROCEDURE suche;
BEGIN
IF vorne_frei THEN v;
IF vorne_frei AND NOT hat_vorrat THEN suche
ELSE
BEGIN
IF NOT rechts_frei AND NOT vorne_frei THEN drehe_links;
IF platz_belegt THEN nimm_auf;
BEGIN
IF hat_vorrat AND NOT links_frei AND NOT rechts_frei AND NOT vorne_frei THEN gib_ab;
IF hat_vorrat AND rechts_frei THEN dr;
END;
END;
IF (links_frei) OR (rechts_frei) OR (vorne_frei) THEN suche
END;


BEGIN
suche
END.
 
Re: Niki Problem

Also besonders lang haste noch kein Informatik oder? Dein Deklarationsteil ist voll ünnützer Sachen.Du deklarierst schon die Procedure drehe_rechts und deklarierst hinterher nochmal die Proceduere dr um dir Tipparbeit zu sparen, warum nicht gleich:
PROCEDURE dr;
BEGIN
drehe_links;
drehe_links;
drehe_links;
END;
Da haste dann ne ganze Procedure gespart! Ganz ganz faule deklarieren auch erst drehe_um und dann drehe_rechts.
Zu deiner Frage: Ich vermute mal die Aufgabe soll auf einen rekursiven Programmablauf abzielen, das bedeutet, das Niki den selben Weg nimmt, den er gekommen ist. Er muss also alle Schritte nochmal machen, aber in die entgegengesetzten Reihenfolge und Richtung.
Der Trick ist das Prog. zu verschachteln. z.B. so:

IF irgendwas THEN
BEGIN
mach_irgendwas;
gegenteil_von_mach_irgendwas;
END;

Aus der Prcedur mach_irgendwas gehts dann weiter.
Wenn die Bedingung erfüllt wird beginnt Niki mit etwas (neue Procedur wird aufgerufen), wenn er damit fertig ist kehrt er zurück, und macht das genaue Gegenteil.
Verstanden? Nein? Hier ein Bsp: Niki soll vor bis zur Wand, danach zurück zur Ausgangsposition.


...Üblicher Kram...

PROCEDURE go;
BEGIN
IF vorne_frei THEN BEGIN
vor;
go; //Die Procedure ruft sich selbst auf!!!
END ELSE drehe_um;
vor;
END

BEGIN
go;
END

Wenn Niki die Wand nach sagen wir 7 Zügen erreicht hat dreht er sich um, da die Procedure 7x aufgerufen wurde führt er sie auch 7x zu Ende, geht also 7 Schritte zurück.
Hoffe es wurde soweit verstanden!

mfG Basti
 
Hi Baaschan!

habe wirklich noch nicht lange mit Informatik zu tun.

Muß das Programm bis Ende der Woche fertig bekommen, aus deinen ausführungen verstehe ich leider nicht, wie ich Niki am Ende (Gehen, ding aufnehmen, rekursiven weg zurück) dazu bekomme das ding abzulegen und stehen zu bleiben. er legt bei meinem proggie einfach nicht ab und geht wieder von neuem los! das finde ich seltsam.

wenn jemand sich gut damit auskennt, würde ich gerne auch die "programm" + "labyrinth" datei zumailen, schätze mal, ich habe nur einen kleinen fehler drin, den ich einfach nicht erkenne.

vielen dank!

gruß

dennis
 
Zurück
Oben