Hol van a hiba ebben a megirt kodban?
C nyelvben irtam egy kodot ennek a feladat megoldasara( [link] ,de nem mukodik
Megirt kod illetve hibauzenet
en csakk annyit latok hogy az nem
main{}
{
}
hanem
main()
{
}
kerek zarojellel es szinten nem climbstair{} hanem climbstair() kerek zarojellel
#1
Totál igazad van. Ha nem nagyítok rá fel sem tűnik...
(szinte) mindenhol ahol {} használtál ezt kellett volna: ()
Azért az legyen világos, hogy ez tulajdonképpen egy „Karel-nyelv”, ami csak nyomokban hasonlít a C-re. A ténylegesen C nyelvű rész előled rejtve, egy másik fájlban van, amelyet a kód elejére írt #include "karel.h" sorral építesz be a programodba. Itt vannak megírva a Karel tanulóprogram utasításai, függvények formájában. A Karel-programod tehát C függvények meghívásának sorozata, ezért is kell tartanod magad a C szabályaihoz. A C-ben a függvények hívásakor mindig ki kell tenni közönséges zárójelpárt a függvény neve után -- ezek között lehetne átadni a szükséges adatokat, de ha ilyenek nincsenek, a fordító akkor is megtudja belőlük, hogy a függvények közt kell keresgélnie, nem csak valami ottfelejtett szövegszemetet talált. Ez a szerepe tehát az utasításokat követő, számodra tulajdonképpen fölösleges sima zárójelpároknak. A kapcsos zárójeleknek más a feladatuk. Te magad is építhetsz föl saját függvényeket, amelyek utasítások sorozatából állnak. A fordítónak tudnia kell, hogy mely utasítások tartoznak a függvényhez, ezért a sorozat elejét és végét jelzed a kapcsos zárójelekkel.
Vagyis: A Karel nyelv elemi utasításai egy függvénynévből és a kötelező SIMA zárójelből állnak, például movek(), turnLeft(), pickBeeper(). Világos, hogy itt követted el a hibát: KAPCSOS zárójeleket használsz, tehát a fordító szempontjából nézve
1. Ott van egy szöveg, amelyikről nem lehet tudni, mi a fene. Rendes függvény nem lehet, hiszen nincs utána ().
2. Utána meg ott van egy üres utasításblokk, amely nem tartozik sehova, pedig egy függvény kellene elé.
Példa a saját függvényre:
A robot csak balra tud fordulni, a turnLeft() függvényhívással. Ezt a fogyatékosságát orvosolod a turnRight() saját függvény létrehozásával, amely háromszor balra fordítja, ezzel ugyanazt az eredményt éri el. Szerintem így a legelején még értelemzavaró lehet, hogy a turnRight() milyen szépen illeszkedik a többi utasítások logikájába -- a meg nem értésére utal, hogy a kód másolásakor elfelejtetted lezárni a blokkot. Vedd észre, hogy a turnRight() NEM része a nyelv kész elemeinek, ezért ezt a függvényt egyéb néven is létrehozhatnád, pl.:
void Jobbra(){
turnLeft();
turnLeft();
turnLeft();
}
Ezek után a Jobbra(); ugyanúgy működne, mint eddig a turnRight();
Talán érdemes még egy kissé felfejteni az if() működését is, mivel az összevissza kapcsos zárójelek tanúsága szerint ez sem tiszta előtted. A programodban látható esetben az alapszerkezete a következő:
if(feltétel){teendők}
Tehát az if() sima zárójelpárja most nem marad üresen, hanem kapnia kell egy adatot, amelynek alapján dönthet, hogy elvégezze-e a kapcsos zárójelek közt felsorolt utasításokat. Értelemszerűen a feltételnek egy igaz vagy hamis eredményt adó műveletnek kell lennie. Ebben az esetben egyetlen teendő van: A bigyó felvétele, vagyis a pickBeeper() utasítás elvégzése -- bigyónak azt a tökmindegymicsodát nevezem, amit Karel gyűjtöget. De mi a feltétel? A Karel-nyelvben létezik egy beepersPresent() függvény, amelyik azt vizsgálja, hogy a robot közelében van-e felvehető bigyó. Ha igen, akkor igaz, ha nem, akkor hamis értékkel tér vissza. Az if() paramétereként tehát ezt a függvényt adod meg, így amikor a program elvégzi, az if() a kapott érték alapján dönthet:
if(beepersPresent()){pickBeeper()}
Magyarul:
Ha a „van-e bigyó a közelben” kérdésre igen a válasz, vedd föl a bigyót.
Félmagyar-félKarel keveréknyelven:
if(vanBigyó()){veddFelABigyót};
+ Khm... a veddFelABigyót() ugyanúgy függvény, mint a többi, tehát az után is kell a sima zárójelpár:
if(vanBigyó()){veddFelABigyót()};
Bocs.
Na, még két megjegyzés:
Hasztalanul kerestem az általad használt Karel-tájszólás offline változatát, ezért lehet, hogy a technikai alapjai mások, mint ahogyan írtam. Mivel azonban ezt a verziót kifejezetten a C nyelv oktatására hozták létre, a formai követelmények szempontjából igazak a fentiek.
A Karelt sok programnyelv oktatására megírták, ilyenkor természetesen az utasításai az adott nyelv megoldásaihoz igazodnak. Van többféle önállóan futó változata is, szintén eltérő nyelvi elemekkel.
@#6:
Szerintem légy elnézőbb... Ez egy gyerekeknek szánt, alig néhány utasításból álló nyelvecske, tulajdonképpen az a feladata, hogy azonnal valami érdekesebb történjen a képernyőn, mint a helló világ vagy két szám összeadásának a kiírása. Mivel a tényleges C-alapok hiányoznak, Kérdező nem tudta, mi az értelme a zárójeleknek. A példák alapján megpróbálta pontosan bemásolni a kódot, és nem sikerült. Nagy ügy, legközelebb jobban megy majd.
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
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!