Kezdőoldal » Számítástechnika » Programozás » Turbo Pascal segítség kéne! (? )

Turbo Pascal segítség kéne! (? )

Figyelt kérdés
Hogyan tudnám azt megcsinálni hogyha mondjuk x értéke 1 lesz, akkor elkezdjen számolni a háttérben. Tehát egy játékhoz szeretném írni hogy az illető hány másodperc alatt csinálta meg az adott feladatot. Nagyon megköszönném ha valaki leírná pascal nyelven a kódot :)
2011. febr. 22. 21:58
 1/3 anonim ***** válasza:
Én nem tudok róla, hogy egy pascal programban lehetne futtatni két programszálat... De pl a gettime paranccsal le tudod kérni a kezdés idejét és a megoldás beadásának az idejét és a két időkülönbségből tudsz számolni eltelt időd ( még nem használtam ezt a parancsot, csak most rákerestem guglin).
2011. febr. 22. 22:13
Hasznos számodra ez a válasz?
 2/3 ejbenjaro ***** válasza:

Ha Turbo Pascalban akarod, akkor kénytelen leszel valami Assembly betétet használni, amivel meg tudod valósítani a szálkezelést. Ha viszont Free Pascalt is használhatsz, ott lehetőséged van a szálak kezelésére.

Az alábbi kódot linuxon próbáltam ott működött rendesen és ebben van szálkezelés, ugyanis az időt ilyen módon íratom ki. A program nem tökéletes, de a szálkezelés egy lehetséges elvét bemutatja (nem az objektumorientált változatot). Használd egészséggel :


program jatek;

uses crt, SysUtils {$ifdef unix},cthreads{$endif};


var

a,b :integer;

c:char;

hatravan:longint;


function Idozito(ido : pointer):longint;

var

i : longint;

x,y : smallint;

begin

for i:=longint(ido^) downto 0 do

begin

x:=WhereX;

y:=WhereY;

GotoXY(1,1);

TextColor(14);

TextBackGround(4);

clreol;

GotoXY(40,1);

Write('Meg ',i,' masodperced maradt, hogy kitalald');

TextBackGround(blue);

GotoXY(x,y);

hatravan:=i;

Delay(1000);

if a=b then EndThread;

end;

window(1,1,80,25);

TextBackGround(4);

TextColor(14);

clrscr;

gotoxy(1,2);

writeln(' Lejart az idod...');

writeln(' ---Uss ENTER-t---');

window(1,1,80,25);

TextBackGround(Blue);

clrscr;

readln;

end;


var

Meddig, h : longint;


procedure jatek(const Hatar : longint);

var

IdoSzal: TThreadID;

begin

a:=random(Hatar)+1;

repeat

writeln('Indulhat a jatek? (I/N) ');

c:=readkey;

until c in ['i','n','I','N'];

writeln;

if c in ['i','I'] then

begin

IdoSzal:=BeginThread(@Idozito,pointer(@Meddig));

writeln('Gondoltam egy szamra 1 es ',Hatar,' kozott, vajon mi az a szam amire gondoltam?');

repeat

repeat

write('Kerem a tippedet! : ');

{$i-}

readln(b);

{$i+}

If IOResult<>0 then Writeln('Csak egesz szamok adhatok meg!!!');

until IOResult=0;

if hatravan<=0 then

begin

//writeln('Lejart az idod...');

exit;

end;

if a<b then writeln('A tipped nagyobb, mint a gondolt szam, probald ujra!');

if a>b then writeln('A tipped kisebb, mint a gondolt szam, probald ujra!');

if a=b then writeln('Ki hitte volna, kitalaltad!');

until a=b;

end;

end;


begin

Randomize;

TextBackGround(1);

TextColor(14);

repeat

clrscr;

repeat

write('Kerek egy szamot 10 es 2000 kozott, ez lesz a felso hatara a kitalalando szamnak : ');

{$i-}

readln(h);

{$i+}

if IOResult <>0 then

begin

writeln('Csak 10 es 2000 kozotti egesz szamok adhatoak meg!');

h:=0;

end;

until (h>=10) and (h<=2000);

repeat

write('Hany masodpercig tartson a jatek? (10-120) : ');

{$i-}

readln(Meddig);

{$i+}

if IOResult<>0 then Meddig:=0;

until Meddig in [10..120];

clrscr;

jatek(h);

repeat

writeln('Jatszol meg egyet? (I/N) ');

c:=readkey;

until c in ['n','N','i','I'];

until c in ['n','N'];

TextColor(7);

TextBackGround(0);

clrscr;

end.

2011. febr. 23. 07:52
Hasznos számodra ez a válasz?
 3/3 A kérdező kommentje:

hú, ezt jól leírtad :D

megpróbálom kibogózni belőle az időt, köszi :D

2011. febr. 23. 13:56

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!