Kezdőoldal » Számítástechnika » Programozás » Miért nem működik a program...

Miért nem működik a program az adott szakasznál tovább? A fordítóval van a hiba, vagy a kóddal?

Figyelt kérdés

#include <iostream>

#include <cmath>


using namespace std;


int mozgas_elore(int pozicio, int jobb_also_sarok);

int mozgas_hatra(int pozicio, int jobb_also_sarok);

int mozgas_jobbra(int pozicio);

int mozgas_balra(int pozicio);

int kijutas_tesztelese(int pozicio, int kijutas);

int main() {

char valasz;

int negyzet;

cout<<"Add meg, hogy hany negyzetbol all a labirintus!"<<endl;

cin>>negyzet;

int j[negyzet], b[negyzet], e[negyzet], h[negyzet];


/////////////////////////////////////BEKERES////////////////////////////////////////////////


for(int i=0; i<negyzet; i++){

cout<<"\n\n"<<i+1<<". negyzet"<<endl;

cout<<"Baloldalt van szabad ut?(I/N)"<<endl;

cin>>valasz;

switch(valasz){

case'I':

b[i]=1;

break;

case'N':

b[i]=0;

break;

default:

cout<<"Ez a valasz nem-nek szamit!"<<endl;

b[i]=0;

}


cout<<"\nJobboldalt van szabad ut?(I/N)"<<endl;

cin>>valasz;

switch(valasz){

case'I':

j[i]=1;

break;

case'N':

j[i]=0;

break;

default:

cout<<"Ez a valasz nem-nek szamit!"<<endl;

j[i]=0;

}


cout<<"\nElol van szabad ut?(I/N)"<<endl;

cin>>valasz;

switch(valasz){

case'I':

e[i]=1;

break;

case'N':

e[i]=0;

break;

default:

cout<<"Ez a valasz nem-nek szamit!"<<endl;

e[i]=0;

}


cout<<"\nHatul van szabad ut?(I/N)"<<endl;

cin>>valasz;

switch(valasz){

case'I':

h[i]=1;

break;

case'N':

h[i]=0;

break;

default:

cout<<"Ez a valasz nem-nek szamit!"<<endl;

h[i]=0;

}

}

//eddig ment//

int pozicio, kijutas, jobb_also_sarok;

cout<<"\nAdd meg a jobb also sarok sorszamat!"<<endl;

cin>>jobb_also_sarok;

cout<<"\nAdd meg a poziciodat!"<<endl;

cin>>pozicio;

cout<<"\nAdd meg a celmezo sorszamat!"<<endl;

cin>>kijutas;


/////////////////////////////////////KIJUTAS/////////////////////////////////////////////


while(pozicio!=kijutas){

if(e[pozicio]==1){

mozgas_elore(pozicio, jobb_also_sarok);

kijutas_tesztelese(pozicio, kijutas);

}

if(j[pozicio]==1){

mozgas_jobbra(pozicio);

kijutas_tesztelese(pozicio, kijutas);

}

if(h[pozicio]==1){

mozgas_hatra(pozicio, jobb_also_sarok);

kijutas_tesztelese(pozicio, kijutas);

}

if(b[pozicio]==1){

mozgas_balra(pozicio);

kijutas_tesztelese(pozicio, kijutas);

}

}

return 0;

}

int kijutas_tesztelese(int pozicio, int kijutas){

if(pozicio==kijutas){

cout<<"Kijutottam!"<<endl;

return 0;

}

}

int mozgas_elore(int pozicio, int jobb_also_sarok){

cout<<"elore"<<endl;

pozicio+=jobb_also_sarok;

return 0;

}

int mozgas_hatra(int pozicio, int jobb_also_sarok){

cout<<"hatra"<<endl;

pozicio-=jobb_also_sarok;

return 0;

}

int mozgas_jobbra(int pozicio){

cout<<"jobbra"<<endl;

pozicio+=1;

return 0;

}

int mozgas_balra(int pozicio){

cout<<"balra"<<endl;

pozicio-=1;

return 0;

}



2018. okt. 26. 17:46
1 2
 11/12 tabaki ***** válasza:

Először: A kódod szerint csakis kijutáskor hajtódik végre egy bonyolult feltételvizsgálat, amelyiknek láthatólag az lenne a célja, hogy teljes beszorulás esetén visszaálljon az előző kockára. Mivel ezt ily módon sikeresen kiiktattad a programból, például 0 pozícióról indulva az előrelépés azonnal bebetonoz a 3. kockába: a kiinduló kockát blokkoltad, , egyéb irányban nincs kijárat -- és ugyebár, ki sem jutottál, pedig csak akkor indulna el az áhított visszaugró programrész, igaz, akkor már minek?

Másodszor: Ha a problémás programrészt megpróbálom a helyére tenni, akkor sem biztos, hogy minden rendbe jön. Mondjuk, megint csak a 0-ról indulok el. Rögvest beragadok a harmadik kockába, de semmi baj, j-t csökkentve az aktuális ahol_volt[1] kockáról visszalépek az ahol_volt[0] által mutatottra. Mi is ez a bejegyzés? Minthogy nem állítottad be, memóriaszemét, vagyis százmilliószoros eséllyel valami hülyeség, ami kisiklatja a programot. Nem jártam utána, de gyanúm, hogy ez nemcsak azonnali beakadás esetén, hanem minden zsákutcából való visszatérés végén bekövetkezik.

Harmadszor: Lehet, hogy eddig még senki nem mondta neked, hogy a kód zsúfolása semmiféle hatással nincs a program hosszára, de ha valaki ilyesmivel hozakodik elő, higgyél neki, és bátran tagold a kódodat szóközökkel és értelmes sortörésekkel. Ez sokkal olvashatóbbá és átláthatóbbá teszi a programodat, nem beszélve arról, hogy a keresés/csere műveleteket is megkönnyíti.

Negyedszer: A GyK eltünteti a szöveg indentálását, és minden sortörés után üres sort szúr be. Emiatt a kódod nemcsak itt jelenik meg rondán, de kimásolva hosszas tisztába tevést igényel, hogy némi formája legyen. Ha nem valami pár soros apróságról van szó, akkor mindig egy erre szolgáló kódmegosztó oldalra másold be, itt csak a linket közöld. Mellesleg így a hozzászólások böngészése sem igényel hosszas föl-le szánkázást. Ez például egy jól bevált oldal:

[link]

2018. nov. 4. 22:17
Hasznos számodra ez a válasz?
 12/12 tabaki ***** válasza:
Bocsáss meg, hülyeséget írtam, igenis beállítod az ahol_volt[0] értékét, nem tudom, hogyan nem találtam meg, pedig gondolhatod, kerestem, csak ész nélkül. Marad egyelőre annyi, hogy a visszaléptetés a kijutáshoz van rendelve, ezért nem következhet be.
2018. nov. 4. 23:07
Hasznos számodra ez a válasz?
1 2

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!