infoarena

infoarena - concursuri, probleme, evaluator, articole => Informatica => Subiect creat de: Andreica din Februarie 27, 2005, 15:24:33



Titlul: Timp de executie
Scris de: Andreica din 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]


Titlul: Timp de executie
Scris de: Anton Alexandru din 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);


Titlul: Timp de executie
Scris de: Cristian Strat din 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  :D
$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)


Titlul: Timp de executie
Scris de: Andreica din 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)?


Titlul: Timp de executie
Scris de: Anton Alexandru din 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!!!


Titlul: Timp de executie
Scris de: Mircea Pasoi din 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.


Titlul: Timp de executie
Scris de: Cristian Strat din 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


Titlul: Timp de executie
Scris de: Twister din 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?


Titlul: Timp de executie
Scris de: Cosmin Negruseri din 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).


Titlul: Timp de executie
Scris de: Valentin Stanciu din 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() )


Titlul: Timp de executie
Scris de: Cristian Strat din Martie 04, 2005, 11:08:08
Citat
Dar parca time() iti intorcea timpul in secunde?!


oops! my bad  :oops:
evident e clock(), nu time()


Titlul: Timp de executie
Scris de: Dobre Catalin Andrei din 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  :(
Putin ajutor.
Un exemplu ar fi cel mai bine  :P

PS: Nu am help la freepascal...


Titlul: Timp de executie
Scris de: Cosmin Negruseri din 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.


Titlul: Timp de executie
Scris de: Dobre Catalin Andrei din Aprilie 04, 2005, 20:25:55
Ok thx