Computerhilfen.de Logo
Forum
Tipps
News
Frage stellen

Niki - Der Roboter

Hallo liebe Community
wir nehmen immoment im Infounterricht Pascal mithilfe von Niki durch. Ich habe jedoch immoment ein Problem .... also das arbeitsfeld sieht so aus: http://www.bilder-space.de/show.php?file=09.11Obo20euZFN6k06e.JPG
Niki startet auf der linken Seite und soll auf dem weg zu rechten seite alle objekte einsammeln... am ende soll niki dann wieder zu anfang zurück und dort stehen bleiben.

Bis jetzt hab ich alles geschafft außer, dass er, wenn er wieder am anfang ist, nicht stehen bleibt...
Sieht immoment so aus:
Program test2;

 Procedure drehe_um;
 Begin;
 drehe_links;drehe_links;
 End;
 
 Procedure drehe_rechts;
 Begin;
 drehe_links;drehe_links;drehe_links;
 End;
 
 Procedure go;
 Begin;
 If Not vorne_frei Then vor Else
   Begin
   vor;
       Begin
       If Not vorne_frei Then drehe_um
       End;
        Begin
        If Platz_belegt Then nimm_auf
        End;
   If links_frei Then drehe_links Else
    Begin
    If rechts_frei Then drehe_rechts;
    End;
   go;
   End;
 End;
 
Begin
go;
End.

Weis vllt jemand wie ich das hinkriegen kann? Ach ja Koordinaten haben wir bis jetzt noch nicht durchgenommen.


Antworten zu Niki - Der Roboter:

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Gibt es denn irgendein Erkennungsmerkmal (woran Niki erkennen kann, dass er wieder am Anfang ist)? Oder kennt Niki die Entfernung bis zum Ziel und kann seine Schritte mitzählen?

Ein erkennungmerkmal gibt es leider nicht und ich weis nicht wie ich machen kann das er seine schritte mitzählen kann ^^..... unser lehrer hats uns ja mal gezeigt aber eben nur kurz und ich habs schon wieder vergessen... ich weis aber noch das er eine Procedure in sich selber verwendet hat

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button
1 Leser hat sich bedankt

Vielleicht so:

PROGRAM test2;

VAR steps : INTEGER;
    max_steps : INTEGER;

PROCEDURE drehe_um;
BEGIN
    drehe_links;
    drehe_links;
    max_steps := steps;
    steps := 0;
END;
 
PROCEDURE drehe_rechts;
BEGIN
    drehe_links;
    drehe_links;
    drehe_links;
END;

PROCEDURE gehe_vor;
BEGIN
    vor;
    steps := steps + 1;
END;
 
PROCEDURE go;
BEGIN;
    IF NOT steps = max_steps THEN
    BEGIN
        IF Platz_belegt THEN nimm_auf;
       
        IF vorne_frei THEN gehe_vor ELSE
        BEGIN
            IF links_frei THEN drehe_links ELSE
            IF rechts_frei THEN drehe_rechts ELSE
            drehe_um;
        END;
        go;
    END;
END;

BEGIN
    steps := 0;
    max_steps := -1;
    go;
END.

Der Roboter zählt seine Schritte. Wenn er umdreht, geht er die selbe Anzahl Schritte wieder zurück. So muss man die Anzahl der nötigen Schritte nicht wissen. Funktioniert genau dann, wenn der Weg nicht verzweigt.

da gibts nur ein problem den befehl mit der variablen kannste streichen weil niki keine variablen kennt


das kann man mit einer rekursion machen  (procedure ruft sich selber auf)

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Das Problem dabei ist, dass du die Rekursion ja irgendwann beenden musst. Und wenn du keine Variablen zum Mitzählen und kein Erkennungsmerkmal für das Ziel hast, hast du keine Chance, Niki jemals wieder anzuhalten.
Ist ja logisch. Wenn du irgendwo hingehen sollst, aber keine Möglichkeit hast, zu sehen, ob du schon da bist und nicht weißt, wie lange du schon unterwegs bist, kannst du allenfalls irgendwo zufällig anhalten und hoffen, dass du das Ziel getroffen hast.


« Ping Pong TutorialJava Programmierer Schulung/Kurs »
 

Schnelle Hilfe: Hier nach ähnlichen Fragen und passenden Tipps suchen!

Fremdwörter? Erklärungen im Lexikon!
Programm
Siehe Software...

Notebook
Ein Notebook ist ein kleiner, zusammklappbarer Computer für unterwegs. Er besteht aus Tastatur, Touchpad oder ähnlichem Mausersatz, Bildschirm und dem Innenlebe...

Eingabefelder
Als Eingabefelder werden in einem Programm oder in Online-Formularen die Stellen bezeichnet, an denen Informationen eingetippt werden können. Die Beschriftung neben ...