Mi a probléma és hogy kezdjem el?
A feladatom egy hullámvasút kprogramozása a pascalban
Odáig hogy a pályát megrajzoltam eljutottam viszont a pályán a kocsit végigvinni vagy egyátalán elhelezni nem sikerült és még hibát is ír ki
program hullamvasut;
uses crt;
var x,y:byte;
begin
gotoxy(2,22);
write('----------');
gotoxy(12,22);
write('/');
gotoxy(13,21);
write('/');
gotoxy(14,20);
write('/');
gotoxy(15,19);
write('/');
gotoxy(16,18);
write('/');
gotoxy(17,17);
write('/');
gotoxy(18,16);
write('/');
gotoxy(19,15);
write('/');
gotoxy(20,14);
write('/');
gotoxy(21,13);
write('/');
gotoxy(22,12);
write('_____________');
gotoxy(35,13);
write(chr(92));
gotoxy(36,14);
write(chr(92));
gotoxy(37,15);
write(chr(92));
gotoxy(38,16);
write(chr(92));
gotoxy(39,17);
write(chr(92));
gotoxy(39,17);
write('______');
gotoxy(45,17);
write('/');
gotoxy(46,16);
write('/');
gotoxy(47,15);
write('/');
gotoxy(48,14);
write('/');
gotoxy(49,13);
write('/');
gotoxy(49,13);
write('___________');
gotoxy(60,14);
write(chr(92));
gotoxy(61,15);
write(chr(92));
gotoxy(62,16);
write(chr(92));
gotoxy(63,17);
write(chr(92));
gotoxy(62,17);
write('_________');
gotoxy(2,22);
write(chr(223));
for x:=1 to 80 do
begin
case x of
1..8:y:=23;
9: y:=22;
10: Y:=21;
11: Y:=20;
12: Y:=19;
13: Y:=18;
14: Y:=17;
15: y:=16;
gotoxy(x,y);
write('j');
end;//case
end;//for
end;
readln;
end.
A pascal kis és nagybetűre érzéketlen.
A kérdező kódja viszont nagyon meredek.
program hullamvasut;
uses Crt;
var x, y: byte;
begin
GotoXY(2, 22);
Write('------');
GotoXY(12, 22);
Write('/');
GotoXY(13, 21);
Write('/');
GotoXY(14, 20);
Write('/');
GotoXY(15, 19);
Write('/');
GotoXY(16, 18);
Write('/');
GotoXY(17, 17);
Write('/');
GotoXY(18, 16);
Write('/');
GotoXY(19, 15);
Write('/');
GotoXY(20, 14);
Write('/');
GotoXY(21, 13);
Write('/');
GotoXY(22, 12);
Write('______');
GotoXY(35, 13);
Write(chr(92));
GotoXY(36, 14);
Write(Chr(92));
GotoXY(37, 15);
Write(Chr(92));
GotoXY(38, 16);
Write(Chr(92));
GotoXY(39, 17);
Write(Chr(92));
GotoXY(39, 17);
Write('______');
GotoXY(45, 17);
Write('/');
GotoXY(46, 16);
Write('/');
GotoXY(47, 15);
Write('/');
GotoXY(48, 14);
Write('/');
GotoXY(49, 13);
Write('/');
GotoXY(49, 13);
Write('______');
GotoXY(60, 14);
Write(Chr(92));
GotoXY(61, 15);
Write(Chr(92));
GotoXY(62, 16);
Write(Chr(92));
GotoXY(63, 17);
Write(Chr(92));
GotoXY(62, 17);
Write('______');
GotoXY(2, 22);
Write(Chr(223));
for x := 1 to 80 do
begin
case x of
1..8: y := 23;
9: y := 22;
10: y := 21;
11: y := 20;
12: y := 19;
13: y := 18;
14: y := 17;
15: y := 16;
end;
GotoXY(x, y);
Write('j');
end;
ReadLn;
end.
A fő probléma az, amit #5 (meg a hibaüzenet is) írt, hogy a
gotoxy(x,y);
write('j');
sorokat a CASE utasítás feltételeként akarod lenyeletni a fordítóval, de mivel ez értelmetlen, nem is tudja lefordítani. Ezen túl viszont egészen riasztó a kódod. Lehet, hogy eljárásokról még nem tanultatok, de tömbökről sem, amelyben adatokat lehetne tárolni? Ha már egyszer ismered a FOR ciklust, ismered a CASE-t: A pálya tulajdonképpen három dolgot csinál: emelve, süllyedve vagy változatlan magasságban halad előre. Az ezt intéző egy-két utasítás mehetne a CASE ágaiba, ahol a ciklusban beolvasott adatok alapján döntené el a program, mit csináljon. Az embertelen mennyiségű gépelés helyett letudnád az egészet néhány sorban, ráadásul ugyanezekhez a pályaadatokhoz igazodhatnál a vonattal.
Így belegondolva, ez egy kifejezetten jó kis játékos feladat, csak nem ész nélkül kell nekiesni. Még dolgozz rajta.
Akkor szerintem tegnap este fél tíztől lett volna érdemes bemutatnod, hogy mit csináltál, és vajon lehet-e még csiszolgatni rajta, de nem számít, nyilván olyasmi lett, mint az enyém:
program hullamvasut;
uses crt;
const
lepes = 100;
vonatHossz = 7;
var
x, y, v :byte;
vonat : string[vonatHossz + 1] = #32#116#97#98#97#107#105#32;
vy : array[0..vonatHossz] of byte;
palyaAdat: string[80] = '---------//////////-------'#92#92#92#92#92+
'------////////------'#92#92#92#92'---------'#92#92#92#92#92#92#92#92+
'--------';
begin
CursorOff;
y := 22;
for x := 1 to Length(palyaAdat) do
begin
case palyaAdat[x] of
#92: Inc(y);
'/': Dec(y);
else
begin
if palyaAdat[x - 1] = '/' then Dec(y)
else if palyaAdat[x - 1] = #92 then Inc(y);
end;
end;
GotoXY(x,y); Write(palyaAdat[x]);
end;
y := 21; GotoXY(1,y); Write(vonat);
Delay(2000);
for x := 1 to Length(palyaAdat) - vonatHossz do
begin
case palyaAdat[x] of
#92: Inc(y);
'/': Dec(y);
else
begin
if palyaAdat[x - 1] = '/' then Dec(y)
else if palyaAdat[x - 1] = #92 then Inc(y);
end;
end;
vy[0] := y; GotoXY(x, vy[0]); Write(vonat[1]);
for v := 1 to vonatHossz do
begin
vy[v] := vy[v-1];
case palyaAdat[x + v] of
#92: Inc(vy[v]);
'/': Dec(vy[v]);
else
begin
if palyaAdat[x +v - 1] = '/' then Dec(vy[v])
else if palyaAdat[x + v - 1] = #92 then Inc(vy[v]);
end;
end;
GotoXY(x + v, vy[v]); Write(vonat[v + 1]);
end;
Delay(lepes);
end;
ReadLn;
CursorOn;
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!