Pagini: [1]   În jos
  Imprimă  
Ajutor Subiect: Timp de executie  (Citit de 4401 ori)
0 Utilizatori şi 1 Vizitator pe acest subiect.
sori
Strain


Karma: 0
Deconectat Deconectat

Mesaje: 12



Vezi Profilul
« : Februarie 27, 2005, 15:24:33 »

Ma poate invata cineva cum sa verific in cat timp imi ruleaza un program(cu precizie de trei zecimale).
       Am tot studiat time.h dar daca un program imi ruleaza in 0.1 imi afiseaza 0.
       !Folosesc Borland 3.1 / Devc++.[/b]
Memorat
LordAnta
Strain
*

Karma: 2
Deconectat Deconectat

Mesaje: 43



Vezi Profilul
« Răspunde #1 : Februarie 27, 2005, 15:53:29 »

incearca chestia urmatoare:
Cod:


 main()
 {
  long far *time(long far *)0x46c;
  long t=*time;
  printf("%.3f",(float)(*time-t)/(18));
 return(0);
 }

 E o chestie mai veche care face apel la locatia $0000:$046C , pe care unde este reprezentat pe 4 bytes cat timp o trecut de la ora 00:00 (mai exact numarul de tacti; 1sec = 18 tacti);
Memorat

Lord Anta, over and out!!!
wickedman
Echipa infoarena
Nu mai tace
*****

Karma: 227
Deconectat Deconectat

Mesaje: 670



Vezi Profilul WWW
« Răspunde #2 : Februarie 27, 2005, 17:40:12 »

Citat

 E o chestie mai veche care face apel la locatia $0000:$046C , pe care unde este reprezentat pe 4 bytes cat timp o trecut de la ora 00:00 (mai exact numarul de tacti; 1sec = 18 tacti);


eu zic sa nu incerci asa  Very Happy
$0000:$046C e o poveste cu MSDOS iar numarul de tacti pe secunda depinde de procesor.

solutia portabila e folosirea functiei time() si a constantei CLOCKS_PER_SEC (sau CLK_TCK pe compilatoare mai vechi)
Memorat
sori
Strain


Karma: 0
Deconectat Deconectat

Mesaje: 12



Vezi Profilul
« Răspunde #3 : Februarie 27, 2005, 19:30:21 »

WICKEDMAN!!
#include <time.h>
#include <stdio.h>
int main(void)
{
   long start,end;
   start=clock();
   do
      end=clock();
   while((end-start)/CLK_TCK<1);
}

end-start/CLK_TCK reprezinta nr de sec de la inceputul programului,nu?
      Ce fac pt. milisec ex(0.01 s)?
Memorat
LordAnta
Strain
*

Karma: 2
Deconectat Deconectat

Mesaje: 43



Vezi Profilul
« Răspunde #4 : Februarie 27, 2005, 19:36:35 »

Faza cu $0000:$046C o stiu din cartea de la centrele de excelenta! Hai sa-i anuntam si noi pe ei ca au gresit!!!
Memorat

Lord Anta, over and out!!!
domino
Echipa infoarena
Nu mai tace
*****

Karma: 281
Deconectat Deconectat

Mesaje: 1.340



Vezi Profilul WWW
« Răspunde #5 : Februarie 27, 2005, 19:47:59 »

Citat din mesajul lui: LordAnta
Faza cu $0000:$046C o stiu din cartea de la centrele de excelenta! Hai sa-i anuntam si noi pe ei ca au gresit!!!


N-au gresit.. doar ca faza asta merge doar pe Borland C++ ... ce a zis wickedman merge cam pe orice, inclusiv gcc.
Memorat
wickedman
Echipa infoarena
Nu mai tace
*****

Karma: 227
Deconectat Deconectat

Mesaje: 670



Vezi Profilul WWW
« Răspunde #6 : Februarie 28, 2005, 01:51:33 »

Citat din mesajul lui: sori

      Ce fac pt. milisec ex(0.01 s)?


clock() iti intoarce timpul trecut de la inceputul rularii programului. precizia e suficient de mare.
ai grija doar sa fortezi tipul expresiei in double / float

Cod:
while (0.5 > (double)(end-start)/CLOCKS_PER_SEC) {
}


asteapta 1/2s
Memorat
Twister
Strain
*

Karma: 0
Deconectat Deconectat

Mesaje: 45



Vezi Profilul
« Răspunde #7 : Martie 04, 2005, 10:27:34 »

Citat din mesajul lui: LordAnta
Faza cu $0000:$046C o stiu din cartea de la centrele de excelenta! Hai sa-i anuntam si noi pe ei ca au gresit!!!


Care carte? Exista vreo carte a centrelor de excelenta?
Memorat
Cosmin
Echipa infoarena
Nu mai tace
*****

Karma: 351
Deconectat Deconectat

Mesaje: 1.799



Vezi Profilul
« Răspunde #8 : Martie 04, 2005, 10:46:44 »

In freepascal este in unitul sysutils functia now care o puteti folosi pentru a determina durata de executie a unui program, asta daca nu vreti sa folositi toata viata borland pe 16 biti (si in delphi exista functia now in acelasi unit).
Memorat
svalentin
Nu mai tace
*****

Karma: 88
Deconectat Deconectat

Mesaje: 704



Vezi Profilul
« Răspunde #9 : Martie 04, 2005, 10:48:10 »

Citat din mesajul lui: wickedman
Citat din mesajul lui: sori

      Ce fac pt. milisec ex(0.01 s)?


time(0) iti intoarce timpul trecut de la inceputul rularii programului. precizia e suficient de mare.
ai grija doar sa fortezi tipul expresiei in double / float

Cod:
while (0.5 > (double)(end-start)/CLOCKS_PER_SEC) {
}


asteapta 1/2s


Dar parca time() iti intorcea timpul in secunde?!
1. daca il fortezi in double, iti da si milisecunde?!
2. de ce mai trebuie sa imparti la CLOCKS_PER_SEC?! (asta parca trebuia sa faci, daca luai timpul cu clock() )
Memorat
wickedman
Echipa infoarena
Nu mai tace
*****

Karma: 227
Deconectat Deconectat

Mesaje: 670



Vezi Profilul WWW
« Răspunde #10 : Martie 04, 2005, 11:08:08 »

Citat
Dar parca time() iti intorcea timpul in secunde?!


oops! my bad  Embarassed
evident e clock(), nu time()
Memorat
dobre
De-al casei
***

Karma: 2
Deconectat Deconectat

Mesaje: 116



Vezi Profilul
« Răspunde #11 : Aprilie 03, 2005, 20:53:40 »

Cosmin:
Spuneai sa folosesc functia now ...
La functia now in freepascal, tot timpul imi returneaza o valoare constanta.
Am incercat in delphi, nu retuneaza si sutimi  Sad
Putin ajutor.
Un exemplu ar fi cel mai bine  Tongue

PS: Nu am help la freepascal...
Memorat
Cosmin
Echipa infoarena
Nu mai tace
*****

Karma: 351
Deconectat Deconectat

Mesaje: 1.799



Vezi Profilul
« Răspunde #12 : Aprilie 03, 2005, 23:00:53 »

Exista documentatie online pentru free pascal, o gasesti usor folosind google, cat despre miimi .. nu returneaza miimi e in alt format rezultatul, citeste in documentatie, pa.
Memorat
dobre
De-al casei
***

Karma: 2
Deconectat Deconectat

Mesaje: 116



Vezi Profilul
« Răspunde #13 : Aprilie 04, 2005, 20:25:55 »

Ok thx
Memorat
Pagini: [1]   În sus
  Imprimă  
 
Schimbă forumul:  

Powered by SMF 1.1.19 | SMF © 2006-2013, Simple Machines