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
 1/12 anonim ***** válasza:
Elég nagyképűség azt feltételezni, hogy a fordítóval van a gond.
2018. okt. 26. 18:31
Hasznos számodra ez a válasz?
 2/12 A kérdező kommentje:
Akkor azt visszaszívom.
2018. okt. 26. 19:08
 3/12 anonim ***** válasza:
esetleg próbáltad hogy a case után szóközt raksz?
2018. okt. 26. 21:18
Hasznos számodra ez a válasz?
 4/12 anonim ***** válasza:
LeL, egy vicc ez az oldal...
2018. okt. 26. 22:10
Hasznos számodra ez a válasz?
 5/12 tabaki ***** válasza:

Hát bocs, lehet, hogy te képes vagy futtatáskor bepötyögni a labirintus adatait kockánként négy értékkel, de ez felér egy apróbb harakirivel. Hódolat a nem mindennapi lelkierődnek... énbelém nem szorult elég kurázsi ennek a használhatatlanságra kihegyezett programnak a teszteléséhez. Azon kívül, amit a fordító is közöl (a kijutas_tesztelese nem állít be visszatérési értéket, ha a pozició és a kijutas változók értéke neadj'isten nem azonos), egyelőre nincs tippem.

Amúgy nem egészen értem, hogy az unalomig ismétlődő adatbekéréseket miért nem egyetlen rövid függvény intézi, és miért értékel a nagy „I” betűn kívül minden választ nemnek, ahelyett, hogy a valódi válaszokat kisbetűvel is elfogadná, a többit pedig figyelmen kívül hagyná. Az meg végképpen nem világos, hogy a mozgatások minek adnak vissza értéket, amikor az egyrészt mindig 0, másrészt azt se használod semmire.

2018. okt. 29. 02:25
Hasznos számodra ez a válasz?
 6/12 tabaki ***** válasza:

Híjnye, azért ez még keményebb, mint amit tegnap éjjel félálomban megláttam benne. Jól értem, hogy egy kétdimenziós tábla adatait négy egydimenziós tömbbe olvasod be, és a program aszerint határozza meg a tábla méreteit, hogy hányadik bejegyzés a jobb alsó sarok? Ez mire is jó pontosan: Ha például a leírótömböt sikerült a kézi bevitel embertelen munkája során hibátlanul feltöltened, még mindig akadjon egy lehetőséged elbarmolni az egészet, ha a jobb alsó sarok nem jelenthet egy faltól-falig kitöltött táblát? De tételezzük fel, hogy nagyon-nagyon vigyázol, hogy a bevitt cellaértékek és a sarok összhangban legyenek. Mondjuk, van 25 (*4) bejegyzésed, ahol a jobb alsó sarok a huszonötödik (mellesleg, ha nem akarsz fölösleges elemeket is tárolni a többen, a jobb alsó sarok mindig az utolsó). Ha az egysoros vagy -oszlopos tábla lehetőségét (a programmal ellentétben) elvetem, tiszta sor, a tábla 5×5 cella méretű, mert a 25 csak ennek a két egészértéknek a szorzatából állhat elő. Mit jelent viszont a 20 cella és huszadikként feltüntetett alsó sarok? 5×4-es vagy 4×5-ös táblát? Hát a 24 és huszonnegyedik? 2×12, 12×2, 3×8, 8×3, 4×6, 6×4? Mindezek persze költői kérdések, mert az előre- és hátra mozgató rutinokból kiderül, hogy egyáltalán nem a jobb alsó sarokról volna szó, hanem a tábla egy sorának hosszáról. A jobb alsó sarok sorszámának használata már csak azért sem lenne értelmes, mert úgy bármely előre/hátra lépés azonnal a kínos iparkodással hibátlanul bevitt tömbök határain kívülre lódítaná a vizsgálódást, az ismeretlen memóriatartalom mocsárvidékére. A program kvázi tesztelhetetlensége nemigen teszi lehetővé a biztos ítéletet, de nekem ezenkívül úgy tűnik: Ha egy cellából (és befelé) két ellenkező irányba is vezet szabad út, akkor a „KIJUTAS” kommenttel jelzett while-blokk szépen visszatér a kiindulópontjára, tehát végtelen ciklust eredményez. Ez azt sugallja, hogy a terjengősen megírt, rendkívül kényelmetlenül használható program ab ovo működésképtelen -- tehát még az is elképzelhető, hogy esetleg nem a fordító a hibás.

A fenti locsogásomtól függetlenül nem ártana, ha megpróbálnád legalább valami rajzocskán bemutatni, hogy voltaképpen mit képzeltél el. Nem mondhatnám, hogy a programod magáért beszél, és a cél ismeretében nagyobb esély volna az igazítgatására.

2018. okt. 29. 11:38
Hasznos számodra ez a válasz?
 7/12 tabaki ***** válasza:
Hát... legjobb tudásom szerint néhányszor teszteltem egy 5×5 kockás kis labirintus adatainak bevitelével. Annyi bizonyos, hogy lefut, és rengetegszer kiírja az „előre” szót. Egyéb hasznos tevékenységet nem tudtam megfigyelni.
2018. okt. 30. 02:49
Hasznos számodra ez a válasz?
 8/12 A kérdező kommentje:

Itt vagyok megint :D. Most már majdnem jó a dolog. Az alábbi 3x3as labirintus van megadva neki:

[link]

2018. nov. 4. 15:16
 9/12 A kérdező kommentje:

a kód:

#include <iostream>


using namespace std;


int main() {

int palya[4][9]={

{0, 1, 0, 1, 0, 0, 1, 1, 1},//eloll

{0, 0, 1, 1, 1, 1, 0, 0, 1},//jobboldal

{1, 1, 1, 0, 1, 0, 1, 0, 0},//hatul

{1, 0, 0, 1, 1, 1, 1, 0, 0}//baloldal

};

int pozicio, cel, volt[9], ahhol_volt[9], i=0, j=1;

cout<<"Add meg a helyzetedet!"<<endl;

cin>>pozicio;

cout<<"Add meg a celt!"<< endl;

cin>>cel;

if(pozicio==cel){

cout<<"Kijutottam!"<<endl;

}

volt[pozicio]=1;

ahhol_volt[0]=pozicio;

while(pozicio!=cel){

i++;

if(palya[0][pozicio]==0 && volt[pozicio+3]!=1){//elol

pozicio+=3;

cout<<"ELORE"<<endl;

}else if(palya[1][pozicio]==0 && volt[pozicio+1]!=1){//jobbrol

pozicio+=1;

cout<<"JOBBRA"<<endl;

}else if(palya[2][pozicio]==0 && volt[pozicio-3]!=1){//hatul

pozicio-=3;

cout<<"HATRA"<<endl;

}else if(palya[3][pozicio]==0 && volt[pozicio-1]!=1){//balrol

pozicio-=1;

cout<<"BALRA"<<endl;

}

if(pozicio==cel){

cout<<"Kijutottam!"<<endl;

if((palya[0][pozicio]!=0 || volt[pozicio+3]==1)

&&(palya[1][pozicio]!=0 || volt[pozicio+1]==1)

&&(palya[2][pozicio]!=0 || volt[pozicio-3]==1)

&&(palya[3][pozicio]!=0 || volt[pozicio-1]==1)){

pozicio=ahhol_volt[j-1];

j--;

}else{

j=i;

}

volt[pozicio]=1;

ahhol_volt[i]=pozicio;

}

}

return 0;

}

2018. nov. 4. 15:16
 10/12 A kérdező kommentje:

Azt sejtem, hogy hol a hiba, de azt nem, hogy mi az. Annál a résznél lehet, amikor a visszaugrás történik, amikor visszalép oda, ahol volt.

Valaki tudna segíteni? Azt megköszönném.

2018. nov. 4. 15:19
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!