Documentație tehnică

Adesea, când se programează în anumite părți ale programului, este necesar să se măsoare timpul de execuție al codului, în altele este ușor să se oprească execuția de ceva timp. De exemplu, dacă scrieți un joc, trebuie să creați un cod care limitează viteza jocului. Bineînțeles, dacă jocul este foarte greu, pentru un timp poate exista fără un astfel de limitator. Dar, în timp, puterea computerizată a computerelor crește (nu numai prin ea însăși) și este imposibil să joci jocuri fără un limitator de viteză. Sau ați decis să scrieți un punct de referință pentru procesor. Avem deja nevoie de instrumente foarte precise pentru măsurarea duratei de execuție a codului. Astfel de exemple pot duce la multe. Este mai simplu să spunem că, în orice program mai consumator de timp, este necesară o măsurare a timpului. Din păcate, mijloace regulate în Pascal procedura Delay limitat la cel descris în modulul CRT. Dar depinde foarte mult de performanța sistemului. Desigur, puteți folosi procedura GetTime, dar este destul de greoaie. Și nu există proceduri standard pentru măsurarea duratei de execuție a codului.

Ei bine, nu! Nu suntem cazane, nu-i așa? Desigur, nu ceaiuri! Ne vom scrie. La scrierea programelor, codul secvențial este încercat să se îmbine în cicluri. Codul repetat în program este redat în proceduri și funcții separate. Iar codul, care evident nu va fi folosit într-un singur program, este redat în module. Vom face acest lucru. Să creați un fișier în Pascal TIMER.PAS și să începeți. După cum știți, numele modulului și fișierul trebuie să se potrivească, așa că scriem:

Apoi, trebuie să creați o parte a interfeței modulului. Apoi să ne oprim și să ne dăm seama de ce avem nevoie. În primul rând, avem nevoie de instrumente pentru a măsura timpul de execuție al codului. În al doilea rând înseamnă a opri programul pentru o anumită perioadă de timp. În plus, atunci când opriți, este posibil să fie nevoie să scoateți timpul care a trecut.

interfață
procedura de pornire (var T: longint);
procedura Stop (var T: longint);
procedura Pauză (T: longint; Afișare: booleană);

Deci, am procedat la trei proceduri. Procedurile Start și Stop vor servi pentru a măsura timpul de execuție al codului, iar Pause va înlocui întârzierea. Variabila T - va servi la transmiterea datelor de timp. Afișare - pentru a activa sau dezactiva afișarea timpului pe ecran. Apoi urmează partea executivă. Acesta servește pentru a localiza constantele locale, variabilele și tipurile. În acest modul nu avem nevoie de ele:

Apoi urmează cele mai interesante. Te-ai întrebat vreodată în ce mod vom măsura timpul? Și de ce să nu folosiți un cronometru hardware? Tembolee este foarte simplu:

SystemTimer: longint absolut $ 0040: $ 006C;

procedura de pornire (var T: longint);
începe
T: = SystemTimer;
se încheie;
procedura Stop (var T: longint);
începe
T: = SystemTimer-T;
se încheie;

procedura Pauză (T: longint; Afișare: booleană);
var Xn, Xt: longint;
începe
Xt: = 0;
Xn: = SystemTimer;
În timp ce ((Xt-Xn) /18.2) * 1000 începe
Xt: = SystemTimer;
Dacă se afișează atunci
scriteln ((xt-xn) /18.2:6:4)
se încheie;
se încheie;

Ei bine, mult așteptatul

Toate, compilam. Vreau să verific imediat munca, nu-i așa?

Programul TimerPrimer;
folosește cronometrul;
Var i. întreg;
a: Real;
Timpul. LongInt;
începe
Randomizează;
Start (Ora);
Pentru i: = 1 până la 30000
a: = Sin (sqrt (i)) * Cos (sqrt (Random (10000)));
Opriți (Timp);
Writeln ("Runtime:", Timp / 18,2: 6: 4);
readln;
Întrerupeți (10000, True);
end.

Acest program demonstrează posibilitățile de timer modular. La început ea ia tsykl de la 1 la 30.000 în care calculează valoarea unui. Timpul de execuție al acestui program și măsurarea procedurilor noastre Start și Stop. După aceea, după ce așteptăm să apăsăm pe Enter, vom întrerupe timp de 10.000 de secunde cu permisiunea procedurii Pauză pentru a ieși pe ecran.

Articole similare