Kezdőoldal » Számítástechnika » Programozás » Mi baj van Karellal, a robottal?

Mi baj van Karellal, a robottal?

Figyelt kérdés

Sziasztok!

Most épp Karelon, a roboton tanulunk programozni C nyelven a suliban. Sajnálatos módon a tanár nem igazán magyarázta el, hogy hogyan is bánjunk vele, főleg nem az if ciklust, ezért kérek tőletek segítséget. A feladat az lenne, hogy egy lépcsőzetes "falon" helyenként találhatóak jelek(Beepers), és olyan programot kellene összehoznom, hogy Karel feljusson a lépcső legtetejére, és csak ott szedje össze a jeleket, ahol vannak.

Nos, én írtam egy programot if-fet és esle-t használva, de a 2. lépcsőfoknál nem tud tovább menni, mert, azt írja, hogy nem talál jelet. Mit rontottam el?


[link] <- A programom és egy ábra is itt található. Nagyon kezdő vagyok, és még nem igazán értem az egésznek a lényegét. Köszönök minden kedves választ!


2015. szept. 29. 19:59
 1/5 tabaki ***** válasza:

Fogalmam sincs Karelról, ennek ellenére volna néhány megjegyzésem:


1. Az if-else nem ciklus, hanem a feltételes vezérlés egyik módja. A program egyébként ordít a valódi ciklusért (tehát ugyanannak a műveletsornak a többszöri végrehajtásáért), lehet, hogy erről is szó volt, és ez hagyott benned valami emléknyomot.

2. Az else ágak teljességgel fölöslegesek, hiszen akár talál, akár nem, mindenképpen balra, majd jobbra lépés lesz a következő, tehát az is mehet a feltételvizsgálat után. Az else nem kötelező, tehát nem kell csak azért odaírnod, hogy legyen.

3. Ez a boldogtalan robot csak balra tud fordulni? Nincs mondjuk turnRight(), hogy három balra fordulás helyett egyszer forduljon jobbra?

4. Nem tudom, mi írja ki, hogy nem talál jelet, hiszen a programod ilyen szöveget nem tartalmaz. Viszont gyanús, hogy a feltételvizsgálat csak egy nevet tartalmaz, semmi egyebet. Nem lehet, hogy ez valami igaz/hamis értéket adó függvényhívás, ami után zárójelpár kéne, mondjuk így: if(beepersPresent()) ?

2015. szept. 29. 22:00
Hasznos számodra ez a válasz?
 2/5 tabaki ***** válasza:
+ Esetleg if(beepersPresent==1) vagy efféle.
2015. szept. 29. 22:02
Hasznos számodra ez a válasz?
 3/5 tabaki ***** válasza:

+ A fenébe, én is lehagytam a zárójeleket...

if(beepersPresent()==1)

2015. szept. 29. 22:04
Hasznos számodra ez a válasz?
 4/5 tabaki ***** válasza:

Hát, bocsi, a leírások alapján valóban úgy tűnik, hogy csak balra forog, a turnRight csak úgy oldható meg, ha csinálsz egy ilyen funkciót. Az általatok használt tájszólást egyébként nem találtam meg, a legközelebbiben is nagy kezdőbetűvel íródtak a funkciók nevei. A tiédhez hasonlót csak a C++-változatban (Karel++) láttam.


Elnézést, ha hülyeséget írok, tényleg nem értek a C-hez, de valami ilyesfélét képzelek el:


#include <karel.h>


void turnRight()

{

      turnLeft();

      turnLeft();

      turnLeft();

}


int main(void){

      turnOn("stairs2.kw");

      movek();

      for(i=0;i<5;i++;){

            turnLeft();

            movek();

            turnRight();

            movek();

            if(beepersPresent()){

                  pickBeeper();

            }

      }

      noBeepersInBag(); // Gyanús, hogy ezt is vizsgálnod kéne, nem csak meghívni

      turnOff();

      return 0;

}


Pascalban megpróbáltam lemodellezni, ott működött:

[link]

...de nem biztos, hogy le tudtam fordítani.


Ez az oldal a te programodhoz hasonlóval foglalkozik, csak nem ellenőrzi hogy van-e jel, mert van:

[link]


Ez meg gyakorlatilag pont a tiéddel, viszont C++, de ötletadónak jó lehet:

[link]

Eszerint a ciklus csak loop(5){...} lenne. Lehet, hogy a C-verzióban is ilyen egyszerű.

2015. szept. 30. 02:08
Hasznos számodra ez a válasz?
 5/5 A kérdező kommentje:
Nagyon köszönöm mindenkinek a választ! Most sikerült végigfuttatnom. Tettem zárójeleket, kitöröltem az else-t, és beindult. Nagyon hálás vagyok a segítségekért, tényleg!!! Sokat segítettetek!
2015. szept. 30. 10:26

Kapcsolódó kérdések:





Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!