fredoverflow/karel

AT-AT

Cadet 4th Year
Registriert
Sep. 2020
Beiträge
84
Hi, ich habe gestern angefangen zu programmieren mit diesem Programm. Soll ein gutes Programm sein zum Programmieren lernen, falls ihr es nicht kennt. Ich weiß nicht ob es sehr bekannt ist. Falls sich jemand mit diesem Programm auskennt, könnt ihr mir bitte bei meinem Problem helfen.

Und zwar bin ich bei "Level" 1.3.4 tile the floor. Da ist die Aufgabe das der Roboter von außen nach innen läuft und auf jedes Feld einen Beeper legt. Ich habe es mit dem Befehl "while(frontIsClear())" probiert, aber darf den noch nicht benutzen.

Ich habe damit probiert das der Roboter geradeaus läuft, bis ein Hindernis vor ihm ist und er auf jedem Feld ein Beeper platziert.
PHP:
void moveAroundAndDropBeeper()
{
    dropBeeper();
    if (frontIsClear()) {
        moveForward();
        dropBeeper();
    }
}
Allerdings läuft er nur ein Feld weit und bleibt dann stehen.
Ich weiß ich könnte ihm auch "repeat(9)" sagen, aber dann wäre der Code viel zu lang, wenn ich jedes mal "repeat" sagen sollte.

Falls mir jemand helfen kann, danke im Voraus
 
Wie waere es mit einer while schleife? Also nicht if front is clear, sondern while front is clear?
 
Die while Schleife darf ich noch nicht benutzen. Dafür muss man erst ein bestimmtes Level erreicht haben.
Aber trotzdem danke.
 
Man könnte es rekursiv lösen (Funktion bzw. Command ruft sich selbst auf). Aber wenn du noch kein while nutzen darfst, ist Rekursion wahrscheinlich auch nicht die richtige Lösung.

Vielleicht hilft es dir trotzdem weiter ohne dir direkt zu sagen wie der Code aussieht.
 
AT-AT schrieb:
Ich habe damit probiert das der Roboter geradeaus läuft, bis ein Hindernis vor ihm ist und er auf jedem Feld ein Beeper platziert.
[...]
Allerdings läuft er nur ein Feld weit und bleibt dann stehen.
Deine Funktion heißt moveAroundAndDropBeeper. Was sie macht ist aber dropBeeperAnd....ne, kein And, das wars. Nach dem Drop gibt es nichts mehr zu tun :-)
 
  • Gefällt mir
Reaktionen: ZuseZ3
hast du es mittlerweile geschafft oder brauchst du noch Hilfe?
 
  • Gefällt mir
Reaktionen: Hayda Ministral
void tileTheFloor()
{
setBeeper();
}

void setBeeper()
{
repeat(118)
{
if (frontIsClear() && !beeperAhead())
{
dropBeeper();
moveForward();
}
else
{
turnLeft();
}
}
dropBeeper();
}
ist jetzt vielleicht nicht die eleganteste Methode, aber da ich erst gestern damit begonnen habe programmieren zu lernen ist es denke ich relativ ok.
 
Zuletzt bearbeitet:
Da bluten ja die Augen..
Gab es heute bei den Tafeln Buchstabensuppe oder hat Dir nur noch niemand verraten wie man Code-Tags verwendet? Im Editorfenster die Drei Muscheln Punkte aufklappen, dann rechts die Tags für </> Code auswählen und den Code dort rein posten. Das ist deutlich besser zu lesen und zu zitieren. Abgesehen davon hast Du dem TE einen Fisch in die Hand gelegt. Es wäre hilfreicher ihm zu zeigen wie man Angelt, also nicht den fertigen Code zu präsentieren sondern ihn beim coden zu unterstützen.
 
Habe es selbst erst ein paar Tage nach dem Thread hier gelöst und dann leider nicht mehr daran gedacht, tut mir leid.
 
Code:
void tileTheFloor()
{
    repeat(100) {
        dropBeeper();
        moveForward();
        if(!frontIsClear() || beeperAhead()) {
            turnLeft();
        }
    }
}
 
  • Gefällt mir
Reaktionen: Jak0p und Hayda Ministral
@AT-AT
Sag Mal, wie kommst du darauf, dass du while-Schleifen noch nicht verwenden darfst?
Ich nutze fredoverflows Karel gerade selbst zum programmieren lernen und finde keinerlei solcher Anweisungen, habe gerade extra nochmal sowohl in der Anwendung als auch auf GitHub nachgesehen.
Habe ich etwas überlesen?
 
Zurück
Oben