Vonat mozgása a szimulátorban
2004-12-31T11:12:46+01:00
2004-12-31T20:34:29+01:00
2022-07-27T07:02:35+02:00
  • Oké! Köszi!

    Arra nem tudsz ötletet mondani, hogy a progi miért pontatlan?
    Mutasd a teljes hozzászólást!
  • real helyett használj single (pascalban asszem így hívják a float-ot), vagy double típust, azokat hardveresen is támogatják a gépek... a real az szoftveres, és lassú.
    Mutasd a teljes hozzászólást!
  • Köszi!

    Ez nagy segítsége volt!


    Most már így néz ki a progi:


    program vonatsim; uses crt,Dos; var s, t, tk, tr : real; v, a, all : real; kar, sz : integer; ok : array[1..10] of boolean; c : char; th, tm, ts, tss : word; procedure alapertek; begin all:=3/5; kar:=0; v:=0; t:=0; s:=0; sz:=0; repeat sz:=sz+1; ok[sz]:=True; until sz=10; GetTime(th, tm, ts, tss); tk:=((60*tm)+(ts*100)+tss) div 10; end; procedure adatkiir(seb : integer); begin if v>((seb*10) div 36) then begin gotoxy(1,10+((seb div 10)*3)); writeln(seb,' km/h',' ',((seb*10)/36):0:1,' m/s '); gotoxy(1,11+((seb div 10)*3)); writeln(((t-tk)/10):0:1,' s'); gotoxy(1,12+((seb div 10)*3)); writeln((s/10):0:1,' m '); ok[seb div 10]:=False; end; end; begin clrscr; alapertek; repeat GetTime(th, tm, ts, tss); tr:=t; t:=((60*tm)+(ts*100)+tss) div 10; if Keypressed then begin c:=readkey; if c='t' then alapertek; if c='0' then kar:=0; if c='1' then kar:=1; if c='2' then kar:=2; if c='3' then kar:=3; if c='4' then kar:=4; if c='5' then begin if kar=0 then begin GetTime(th, tm, ts, tss); tk:=((60*tm)+(ts*100)+tss) div 10; end; kar:=5; end; if c=#0 then begin c:=readkey; if (c=#72) and (kar=0) then begin GetTime(th, tm, ts, tss); tk:=((60*tm)+(ts*100)+tss) div 10; end; if c=#72 then kar:=kar+1; if c=#80 then kar:=kar-1; if kar>5 then kar:=5; if kar<-5 then kar:=-5; end; end; if kar<>0 then a:=kar*all; if kar=0 then a:=0; if kar=4 then a:=2.5; if kar=5 then a:=3; v:=v+(a)*((t-tr)/10); if v<0 then v:=0; if v<>0 then begin if a<>0 then s:=s+((a/2)*(t-tr)*(t-tr)) else s:=s+(v*(t-tr)); end; gotoxy(1,1); writeln('kar= ',kar,'. fokozat '); writeln('v= ',v:0:0,' m/s '); writeln('v= ',(v*3.6):0:1,' km/h '); writeln('a= ',(a):0:1,' m/s~ '); writeln('t= ',((t-tk)/10):0:1,' s '); writeln('s= ',(s/10):0:1,' m '); gotoxy(40,1); GetTime(th, tm, ts, tss); writeln(th,':',tm,':',ts,',',tss); sz:=0; repeat sz:=sz+10; if ok[sz div 10]=True then adatkiir(sz); until sz=100; until c=#27; end.


    De valahogy az értékek kiírása eléggé pontatlan. Nem igazán értem, hogy mitől.
    Mutasd a teljes hozzászólást!
  • const r:real=524.234; writeln(r:3:4);
    A :3:4 azt jelenti, hogy a tizedesvessző előtt és után hány szjegy legeyen.
    Az első azt hiszem elhagyható.
    Mutasd a teljes hozzászólást!
  • Megoldottam a progit egy kicsit más megközelítéssel, de nem tudom, hogy jó-e:


    program vonatsim; uses crt,Dos; var s, t, tr, sz : real; v, a : real; kar : integer; c : char; th, tm, ts, tss : word; procedure alapertek; begin kar:=0; v:=1; t:=0; s:=0; end; begin clrscr; alapertek; repeat GetTime(th, tm, ts, tss); tr:=t; t:=((60*tm)+(ts*100)+tss) div 10; if Keypressed then begin c:=readkey; if c='t' then alapertek; if c=#0 then begin c:=readkey; if c=#72 then kar:=kar+1; if c=#80 then kar:=kar-1; if kar>5 then kar:=5; if kar<-5 then kar:=-5; end; end; if kar>0 then a:=kar; if kar<0 then a:=2*kar; if kar=0 then a:=0; v:=v+a*((t-tr)); if v<0 then v:=0; if a<>0 then s:=s+((a/2)*(t-tr)*(t-tr)) else s:=s+(v*(t-tr)); gotoxy(1,1); writeln('kar= ',kar,'. fokozat '); writeln('v= ',(v/10),' m/s '); writeln('v= ',((v/10)*36) /10,' km/h '); writeln('a= ',a,' m/s~ '); writeln('t= ',t/10,' s '); writeln('s= ',Trunc(s/10)),' m '); gotoxy(40,1); GetTime(th, tm, ts, tss); writeln(th,':',tm,':',ts,',',tss); until c=#27; end.


    Lenne viszont egy problémám:

    Hogy tudom kiíratni egy real változó egész, tized és század részét normál formában?
    Tehát nem normál alakban!
    Pl így: 614,65


    Üdv:
    gerpetya
    Mutasd a teljes hozzászólást!
  • Sziasztok!

    Lenne egy gondom egy játékkal kapcsolatban, ami sztem nem tudástárba tartozik.

    Nos, mint a címből kiderül, a játék egy vonat szimulátor.
    Maga a nyelv nem konkrét. Leginkább Pascal vagy Java.

    Hogyan tudom megvalósítani a mozgását?
    Pascalban már írtam egy kisebb progit, de sajnos elakadtam.

    program vonatsim; uses crt; var s, t : longint; v, a, kar : integer; c : char; begin clrscr; kar:=5; v:=0; t:=0; s:=0; repeat delay(80); t:=t+1; if Keypressed then begin c:=readkey; if c='t' then begin v:=0; kar:=0; s:=0; t:=0; end; if c=#0 then begin c:=readkey; if c=#72 then kar:=kar+1; if c=#80 then kar:=kar-1; if kar>5 then kar:=5; if kar<-5 then kar:=-5; end; end; if kar>0 then a:=kar; if kar<0 then a:=2*kar; v:=v+a; if v<0 then v:=0; s:=s+v; gotoxy(1,1); writeln('kar= ',kar,'. fokozat '); writeln('v= ',(v div 10),' m/s '); writeln('v= ',((v div 10)*36) div 10,' km/h '); writeln('a= ',a,' m/s~ '); writeln('t= ',t div 10,',',t mod 10,' s '); writeln('s= ',s div 100,',',s mod 100,' m '); until c=#27; end.

    Szóval a progi így néz ki.
    A kar, az a gáz-fék kar állása, amely 2-szer erősebben fékez, mint gyorsít.
    Egyenlőre csak az előre menet a megoldott, most még nem is kell hátra.
    A v a sebesség, az a a gyorsulás, a t az idő és az s a megtett út.
    Egyenlőre csak adatkiírás a lényeg, de én azt szeretném, ha ez időhöz igazodna.
    Hogyan lehet megoldani? (Pascal vagy Java, az mind1, de inkább Pascal)
    Egyáltalán jó maga a progi?

    Előre is köszönöm a segítségeteket!

    Üdv:
    gerpetya
    Mutasd a teljes hozzászólást!
abcd