Mi a hiba a programba? (Pascal)
Mindig exitcode-2 a hibaüzenet. Lairintus feladat. Feladat: Adott egy mátrix tábléa 1-fal(Tilos ide lépni), 0-folyosó(szabad lépni). Megadok egy kiinduló pontos és le kell generálja az összes lehetséges irányt ahogy ki lehet jutni(Txt-be).
Txt:
Program:
1. [link]
2. [link]
3. [link]
4. [link]
5. [link]
6. [link]
Vélemnyem szerint a 6 résznél lehet a baj.
Nagyon Szépen köszönöm előre is a helpet :)
Nagyon szépen köszönöm előre is:)
const dsor:array[1..4] of integer=(-1,0,1,0); {elmozdulas a sorbam}
const doszl:array[1..4] of integer=(0,1,0,-1); {elmozdulas oszlopban}
Var ut:array[1..50,1..50] of integer;{lepes a matrizban}
szabaly:array[1..20,1..20] of integer;
n,m,ks,ko:integer;{tabla merete}
megold:longint;{kapott megoldasok szama}
f:text;
Procedure be;
Var i,j:integer;
f:text;
Begin
assign(f,'lab1.txt');
reset(f);
read(n,m);
For i:=1 To n Do
begin
For j:=1 To m Do
begin
read(f,szabaly[i,j]);
{write(szabaly[i,j]);}
writeln;
end;
end;
Close(f);
end;
Procedure kiir;
Var i,j:integer;
Begin
megold:=megold+1;
writeln(f,megold,'.Megoldas:');
For i:=1 To n Do
begin
For j:=1 To m Do
If ut[i,j]<>0 then
write(f,ut[i,j])
else
If szabaly[i,j]=0 then
write(f,' . ')
else
write(f,' X ');
end;
writeln(f,'_________________________');
End;
Procedure back(rs,ro,lepes:integer);
Var sor,oszl,irany:integer;
Begin
For irany:=1 To 4 Do
begin
sor:=rs+dsor[irany];
oszl:=ro+doszl[irany];
If (sor>=1) and (sor<=n) and (oszl>=1) and (oszl<=m) then {matrxba vagyok}
If (ut[sor,oszl]=0) and (szabaly[sor,oszl]=0) then {meg nem voltunk abba a pontba}
begin
ut[sor,oszl]:=lepes; {oda lepes}
If (sor=1) or (sor=n) or (oszl=1) or (oszl=m) then {megvan a kijutas a szelehez ertem}
kiir
else
begin
back(sor,oszl,lepes+1);{tovabb lepek}
ut[sor,oszl]:=0;{ha megse ez a lepes kellet}
end;
end;
end;
End;
BEGIN
be;
assign(f,'labkijutas.txt');
rewrite(f);
close(f);
write('sor='); readln(ks);
write('oszlop='); readln(ko);
If szabaly[ks,ko]=1 then
write('FAL')
else
begin
ut[ks,ko]:=1;
back(ks,ko,2);
end;
writeln('Vege',megold,' Megoldas a txtbe');
readln;
End.
Azzal kezded, hogy elugrasz a BE eljárásba, és beolvasol egy labirintust. Bocs, nekem ilyesmi nincs a ház körül, máris vége a dalnak.
Nem, mintha az utána következő fogást érteném:
assign(f,'labkijutas.txt');
rewrite(f);
close(f);
Létrehozol egy fájlt, és abban a pillanatban be is zárod. Ahogy látom, minden írási próbálkozás ezután történne, de ugyebár, hova? Szerintem a fájlt csak a program végén, a
writeln('Vege',megold,' Megoldas a txtben');
sor előtt kéne lezárnod, csak éppen ellenőrizni nem tudom, lásd az első megjegyzésemet.
Végülis ott volt a probléma, hogy:
assign(f,'labkijutas.txt');
rewrite(f);
BE(f);
és a végén kellet bezárni a txt:) Köszönöm a segitséget :)
Kicsit át lett alakítva pár helyen. A txt-éd igy néz ki, de ezt kedved szerint alakíthatod:
const dsor:array[1..4] of integer=(-1,0,1,0);
{elmozdulas az oszlopban}
const doszl:array[1..4] of integer=(0,1,0,-1);
var ut,szabaly:array[1..50,1..50] of integer; {lepesek matrixa}
n,m,ks,ko:integer; {tabla merete} {ks-ko- "kiindulo" sor, oszlop}
megold:longint; {kapott megoldasok szama}
f:text;
procedure beolvas;
var i,j:integer;
f:text;
begin
assign(f,'lab1.txt');reset(f);
read(f,n,m);
for i:=1 to n do
begin
for j:=1 to m do
begin
read(f,szabaly[i,j]);
write(szabaly[i,j]:2);
end;
writeln;
end;
close(f);
end;
procedure kiir;
var i,j:integer;
begin
megold:=megold+1;
writeln(f,megold,'. megoldas:');
for i:=1 to n do
begin
for j:=1 to m do
if ut[i,j]<>0 then write(f,ut[i,j]:3)
else
if szabaly[i,j]=0 then write(f,' .')
else write(f,' X');
writeln(f);
end;
writeln(f,'-------------------');
end;
procedure back(rs,ro,lepes:integer);
var sor, oszl, irany : integer;
begin
for irany:=1 to 4 do
begin
sor :=rs+dsor[irany];
oszl:=ro+doszl[irany];
if (sor>=1) and (sor<=n)
and (oszl>=1) and (oszl<=m) then {a matrixban vagyok-e}
if (ut[sor,oszl]=0) and (szabaly[sor,oszl]=0) then {meg nem jartunk abban a pontban}
begin
ut[sor,oszl]:=lepes; {odalepek}
if (sor=1) or (sor=n) or (oszl=1) or (oszl=m) then {megtettem az osszes lepest}
kiir
else
back(sor, oszl, lepes+1); {tovabblepek}
ut[sor,oszl]:=0; {mi van ha megsem ez a lepes kellett}
end;
end;
end;
BEGIN
assign(f,'lab1_kijutas.txt');rewrite(f);
beolvas;
writeln('ks=');readln(ks);
writeln('ko=');readln(ko);
if szabaly[ks,ko]=1 then writeln('fal')
else begin
ut[ks,ko]:=1;
back(ks,ko,2);
writeln('Vege ', megold, ' megoldast talaltam, a TXT allomanyban megtalalod!');
end;
close(f);
readln;
END.
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!