Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Pascal - funzione gettime
Forum - Pascal - funzione gettime

Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 1:00
Giovedì, 01/01/1970
Poco speranzoso di ricevere una risposta celere dato il periodo posto questo sorgente sperando che qualcuno mi aiuti a correggerlo:
Codice sorgente - presumibilmente Delphi

  1. program scrivi_numeri_primi;
  2.  
  3. uses crt,dos;
  4.  
  5. var
  6.         a,c,a_bis:longint;
  7.         output:TextFile;
  8.         primi:longint;
  9.         h_iniziale,m_iniziale,s_iniziale,s100_iniziale,h_attuale,m_attuale,s_attuale,s100_attuale:word;
  10.         tempo_iniziale,tempo_attuale:longint;
  11.         io:longint;
  12.  
  13. procedure verifica_numero_primo(x:longint);
  14. var
  15.         b:longint;
  16.         ore_i,ore_f,m_i,m_f,s_i,s_f,s_i100,s_f100:word;
  17.         time_i,time_f:longint;
  18.         k:longint;
  19. begin
  20.  
  21.         b:=x;  
  22.         x:=round(1 + sqrt(x)); 
  23.                         repeat x:= x -1                
  24.                         until (b mod x = 0) xor (x=2);
  25.  
  26.                         if x=2 then
  27.                         begin
  28.                                 gettime(ore_i,m_i,s_i,s_i100);
  29.                                 primi:=primi+1;
  30.                                 append(output);
  31.                                 write(output,b);
  32.                                 write(output,' - ');
  33.                                 close(output);
  34.                                 gettime(ore_f,m_f,s_f,s_f100);
  35.                                 time_i:=(ore_i*360000+m_i*6000+s_i*100+s_i100);
  36.                                 time_f:=(ore_f*360000+m_f*6000+s_f*100+s_f100);
  37.                                 k:=time_f-time_i;
  38.                                 io:=io+k;                      
  39.                         end;
  40. end;
  41.  
  42.  
  43.  
  44. begin
  45.         primi:=0;
  46.         io:=0;
  47.  
  48.         clrscr;
  49.         assign(output,'numeri_primi.output');
  50.         rewrite(output);
  51.         write('Inizio ricerca: '); readln(a); a_bis:=a;
  52.         write('  Fine ricerca: '); readln(c);
  53.         clrscr;
  54.         writeln('Progresso operazione: ');
  55.         gotoxy(7,3);
  56.         write('|');
  57.         gotoxy(19,3);
  58.         write('|');
  59.         GetTime(h_iniziale,m_iniziale,s_iniziale,s100_iniziale);
  60.         for a:=a to c do
  61.                 begin
  62.                 verifica_numero_primo(a);
  63.                 if (a - a_bis) mod trunc((c - a_bis)/100) = 0 then
  64.                         begin
  65.                         gotoxy(1,3);
  66.                         write((a-a_bis)*100/(c-a_bis):3:0,' % ');
  67.                         end;
  68.                 if (a - a_bis) mod trunc((c - a_bis)/10) = 0 then
  69.                         begin
  70.                         gotoxy(8+(a - a_bis) div trunc((c - a_bis)/10),3);
  71.                         write('-');
  72.                         end;
  73.                 end;
  74.         writeln(' ');
  75.         writeln('Operazione completata! ');
  76.         writeln(' ');
  77.         GetTime(h_attuale,m_attuale,s_attuale,s100_attuale);
  78.         writeln('Premi un tasto per continuare ');
  79.         writeln(' ');
  80.         clrscr;
  81.         tempo_iniziale:=(h_iniziale*360000+m_iniziale*6000+s_iniziale*100+s100_iniziale);
  82.         tempo_attuale:=(h_attuale*360000+m_attuale*6000+s_attuale*100+s100_attuale)-io;
  83.         writeln('Tempo impiegato: ',tempo_attuale-tempo_iniziale,' s100');
  84.         writeln('Numeri esaminati: ',c-a_bis);
  85.         writeln('Numero primi trovati: ',primi);
  86.         writeln('Velocita'': ',(c-a_bis)/((tempo_attuale/100)-(tempo_iniziale/100)):6:0,' numeri/secondo');
  87.         writeln('Input/Output : ',(io),' io/100s');
  88.  
  89. end.



Il problema sta nella parte finale..mi serve capire quanto dura il processo dato chevorrei utilizzare questo programma, naturalmente ottimizzato e migliorato, per fare il benchmark sui miei ipod e android phone..il tempo restituisce sempre valori strani..del tipo 60 secondi quando ne sono passati solo 30 o 0 secondi quando sono già passati 2 minuti..vi prego di aiutarmi..grazie :)

Ultima modifica effettuata da il 16/06/2010 alle 23:26
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6380
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 22:15
Mercoledì, 16/06/2010
qui

(h_iniziale*3600+m_iniziale*60+s_attuale)

c'è un errore ...


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti (uno dei padri fondatori del moderno Calcolo delle probabilità) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
Poggi Marco (Member)
Guru


Messaggi: 969
Iscritto: 05/01/2010

Segnala al moderatore
Postato alle 22:21
Mercoledì, 16/06/2010
Ciao!

Ho letto il tuo programma, e probabilmente, c' è un semplice problema di overflow.
Infatti, pel la funzione GetTime, sono richieste necessariamente variabili di tipo word.
Ora per calcolare il tempo in secondi, moltiplichi la variabile in cui hai salvato le ore per 3600.
Se sono le 20, si otterrà 20*3600=72000, ma il reng del tipo word va da 0 a 65535.

Ps.: Alla fine, cosa intendi con la voce "valutazioni" ?  

Ultima modifica effettuata da Poggi Marco il 16/06/2010 alle 22:40
PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 22:57
Mercoledì, 16/06/2010
Testo quotato

Postato originariamente da Poggi Marco:

Ps.: Alla fine, cosa intendi con la voce "valutazioni" ?  



Grazie della risposta. Comunque ero interessato a valutare da 1 a 10 la velocità di elaborazione del processore. Mi sono solo dopo (stupido me) reso conto che il modo migliore era la velocità numeri_elaborati / secondo

PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 23:26
Mercoledì, 16/06/2010
L'ho ripostato corretto. Vorrei aggiungere anche una valutazione sulla velocità di read/write su file. Avevo pensato di cronometrare il tempo che impiega. Potreste darvi un'occhiata?

PM Quote
Avatar
Poggi Marco (Member)
Guru


Messaggi: 969
Iscritto: 05/01/2010

Segnala al moderatore
Postato alle 23:46
Mercoledì, 16/06/2010
Testo quotato

Postato originariamente da Giarados:

L'ho ripostato corretto. Vorrei aggiungere anche una valutazione sulla velocità di read/write su file. Avevo pensato di cronometrare il tempo che impiega. Potreste darvi un'occhiata?



Scusa, ma io non vedo alcun programma.
Ricorda inoltre che le operazioni di sceittura su file, non avvengono in tempo reale.

PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 23:53
Mercoledì, 16/06/2010
Ho modificato il primo post. Sta nell'unica procedura verifica_numero_primo. Nel caso in cui sia un numero primo scrive tale numero su un file. Ecco, volevo cronometrare il tempo che impiega a scriverlo su file. E man mano tener conto del tempo che si perde per eseguire tali operazioni.

PM Quote