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


Karma: 0
Deconectat Deconectat

Mesaje: 12



Vezi Profilul
« : Februarie 27, 2005, 21:15:01 »

Citat
creati-va GENERATOARE de teste si VERIFICATOARE - va garantez ca este cel mai eficient asa si va ajuta mult in concursuri reale! Multi dintre noi folosim in concursuri aceasta metoda si da rezultate bune... deci, don't be lazy!  


Banuiesc ca generatoarele sunt functii random sau altele care genereaza intrari pentru a scuti efortul lucrului pe hartie dar atunci verificatoarele ce sunt??
Sunt cam confuz.
Memorat
Cosmin
Echipa infoarena
Nu mai tace
*****

Karma: 351
Deconectat Deconectat

Mesaje: 1.799



Vezi Profilul
« Răspunde #1 : Februarie 27, 2005, 21:28:51 »

Pot sa fie programe care verifica validitatea solutiei, de exemplu daca tu trebuie sa tiparesti muchiile unui arbore, verifica daca intradevar ai tiparit un arbore, sau pot fi solutii exhaustive care merg mai greu dar dau raspuns corect, si faci comparatie intre solutia ta si solutia corecta.
Memorat
masterthor
Strain


Karma: -3
Deconectat Deconectat

Mesaje: 6



Vezi Profilul
« Răspunde #2 : Martie 03, 2005, 09:06:48 »

shi un timer ca sa vad cat trebuie sa optimizez sursa cum implementez? (mai ales in timpul unui concurs)
Memorat
silviug
Echipa infoarena
Nu mai tace
*****

Karma: 193
Deconectat Deconectat

Mesaje: 485



Vezi Profilul
« Răspunde #3 : Martie 03, 2005, 09:48:12 »

O idee foarte buna este sa programezi EXACT in mediul in care stii sigur ca se va corecta: calculator cu aceleasi performante, acelasi OS, acelasi compilator. Cum in general la concursuri se corecteaza si in Linux (la unele se corecteaza DOAR in Linux) atunci eu ti-as recomanda sa inveti (daca nu stii deja) sa codezi in acest mediu. In linux poti afla timpul de rulare al unui program foarte usor. Daca nu face figuri (daca e configurat bine) RHIDE-ul merge mult mai bine fata de Windows si mai sunt multe alte avantaje.

In concluzie:

1. In linux apelexi: time ./nume_executabil
2. In windows te joci cu functiile din "time.h". Cauta informatii despre clock() si banuiesc ca te vei prinde. Totusi, probabil ca stii, timpii din Windows sunt in general mai mari si, daca se corecteaza pe Linux, risti sa optimizezi degeaba o sursa care ia deja 100 de puncte.
Memorat

"Don't gain the world and lose your soul, wisdom is better than silver or gold." [Bob Marley - Jamaican reggae musician & singer (1945 - 1981)]
svalentin
Nu mai tace
*****

Karma: 88
Deconectat Deconectat

Mesaje: 704



Vezi Profilul
« Răspunde #4 : Martie 03, 2005, 12:51:58 »

...sau, poti sa ai o variabila long care acceseaza locatia 0:046c, acolo este locatia de memorie in care este clock-ul de la procesor, adica exact ce returneaza clock() din C.
In pascal, asta se face asa:
Cod:
var t1,t2:longint;
    t:longint absolute $0:$046c;

la inceputul programului executi t1=t, iar la sfarsit t2=t; si faci diferenta intre t2 si t1, apoi imparti diferenta la nr de tickuri pe secunda (parca 18.2, in C ai CLK_TCK).

... si am o intrebare... cum declari in C (sau C++), o variabila la o adresa de memorie specificata de tine? (adica echivalentul lui absolute din Pascal)
Memorat
wickedman
Echipa infoarena
Nu mai tace
*****

Karma: 227
Deconectat Deconectat

Mesaje: 670



Vezi Profilul WWW
« Răspunde #5 : Martie 03, 2005, 14:21:09 »

ca sa faceti timer-e PORTABILE aruncati o privire aici
http://info.devnet.ro/forum/viewtopic.php?t=250
Memorat
dobre
De-al casei
***

Karma: 2
Deconectat Deconectat

Mesaje: 116



Vezi Profilul
« Răspunde #6 : Aprilie 03, 2005, 19:59:45 »

Am incercat in freepascal sa cronometrez timpul de executie, dar vad ca nu merge, imi da eroarea "absoulute can only be associated with a var or const". m-am uitat si in cartea lui Catalin Francu.In Tp 7 imi merge.Stiti cumva cum sa-l fac sa mearga si in fp...
Eu am facut download la Fp de pe net
((V 0.9.2)
compiler(V1.0.10)
debugger GDB(V 5.2.1))   Confused .
 poate nu ii calumea asta pe care l-am luat...Are tot felul de bug-uri la debuging, nu-mi afiseaza intotdeauna calcumea vectorii...Nu-mi compileaza totdeauna codul modificat etc...
     Are cumva cineva un link de unde sa fac download si sa fie si calcumea.Nu de alta dar n-am chef sa fac download si sa aiba si ala probleme...
Memorat
Cosmin
Echipa infoarena
Nu mai tace
*****

Karma: 351
Deconectat Deconectat

Mesaje: 1.799



Vezi Profilul
« Răspunde #7 : Aprilie 03, 2005, 20:19:03 »

Vezi ce am zis pe threadul indicat de wickedman despre masurarea timpului in free pascal.
Memorat
mimarcel
Strain


Karma: 0
Deconectat Deconectat

Mesaje: 10



Vezi Profilul
« Răspunde #8 : Ianuarie 28, 2010, 10:47:43 »

Am incercat in freepascal sa cronometrez timpul de executie, dar vad ca nu merge, imi da eroarea "absoulute can only be associated with a var or const". m-am uitat si in cartea lui Catalin Francu.In Tp 7 imi merge.Stiti cumva cum sa-l fac sa mearga si in fp...
Eu am facut download la Fp de pe net
((V 0.9.2)
compiler(V1.0.10)
debugger GDB(V 5.2.1))   Confused .
 poate nu ii calumea asta pe care l-am luat...Are tot felul de bug-uri la debuging, nu-mi afiseaza intotdeauna calcumea vectorii...Nu-mi compileaza totdeauna codul modificat etc...
     Are cumva cineva un link de unde sa fac download si sa fie si calcumea.Nu de alta dar n-am chef sa fac download si sa aiba si ala probleme...
   Stiu ca nu s-a scris de mult aici, insa stie cineva sa-mi spuna cum pot sa cronometerez timpul in Free Pascal!? Am cautat si nu am gasit cum pot declara o variabila la locatia $0:$46c.  Fighting  De fapt nu stiu daca se poate fara sa utilizez anumite functii/proceduri dintr-un anumit unit ... Cry
   In Free Pascal este destul de greu sa lucrezi intr-adevar pentru ca are multe erori Confused .
Memorat
alexandru92
Nu mai tace
*****

Karma: -191
Deconectat Deconectat

Mesaje: 496



Vezi Profilul
« Răspunde #9 : Ianuarie 28, 2010, 11:24:19 »

S-a mai discutat... http://infoarena.ro/forum/index.php?topic=4315.0
Memorat
mimarcel
Strain


Karma: 0
Deconectat Deconectat

Mesaje: 10



Vezi Profilul
« Răspunde #10 : Ianuarie 31, 2010, 20:24:39 »

  Eu ma refer la situatia cand sunt in timpul unui concurs si nu gasesc un algoritm eficient pentru rezolvarea unei probleme. In acest caz voi incerca sa gasesc solutii pentru problema pana cand timpul maxim de executie admis se apropie de sfarsit, moment in care returnez cea mai buna solutie care am gasit-o pana atunci. Pentru acest caz, in Turbo Pascal utilizam:

Cod:
const maxt=0.95;
var t2:longint absolute $0000:$046c;
     t1:longint;
begin
t1:=t2;
while (t2-t1)/18.2<maxt do
  begin
  {caut solutie}
  end;
{afisez solutia cea mai buna gasita}
end.
{solutia este furnizata in maxim 0.95 secunde (timpul maxim admis)}

   Problema in Free Pascal este ca nu pot declara variabila t2 pentru ca primesc eroare la compilare. Si atunci ar trebui sa folosesc o functie sau o procedura dintr-o unitate. Folosind gettime din unitatea DOS mi se pare mai putin eficient deoarece trebuie efectuate destule calcule pentru a afla timpul trecut intre doua momente de timp. Adica in Turbo Pascal aflam numarul de tacti care daca ii impart la 18.2 obtin numarul de secunde trecute (aproximativ), dar cu procedura gettime trebuie efectuate mai multe calcule. Sau daca utilizez SysUtils :

Cod:
uses sysutils;
const maxt=990;
var start,stop:TTimeStamp;
begin
start:=DateTimeToTimeStamp(now);
repeat
// continuare cautare solutie
stop:=DateTimeToTimeStamp(now);
until stop.time-start.time>maxt;
// afisare solutia cea mai buna
end.
{solutia este furnizata in maxim 990 milisecunde (timpul maxim admis)}

pot sa fac aceasta verificare, dar nu stiu cat de rapid lucreaza functia DateTimeToTimeStamp() si, ce e cel mai important, nu stiu daca la concursuri avem voie sa utilizam astfel de unit-uri.
   Prin urmare, as vrea sa stiu care este cea mai buna metoda sa rezolv in Free Pascal o astfel de problema in timpul unui concurs!
Memorat
Pagini: [1]   În sus
  Imprimă  
 
Schimbă forumul:  

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