Oppure

Loading
16/06/10 20:00
Poco speranzoso di ricevere una risposta celere dato il periodo posto questo sorgente sperando che qualcuno mi aiuti a correggerlo:
program scrivi_numeri_primi;

uses crt,dos;

var
	a,c,a_bis:longint;
	output:TextFile;
	primi:longint;
	h_iniziale,m_iniziale,s_iniziale,s100_iniziale,h_attuale,m_attuale,s_attuale,s100_attuale:word;
	tempo_iniziale,tempo_attuale:longint;
	io:longint;

procedure verifica_numero_primo(x:longint);
var
	b:longint;
	ore_i,ore_f,m_i,m_f,s_i,s_f,s_i100,s_f100:word;
	time_i,time_f:longint;
	k:longint;
begin

	b:=x;	
	x:=round(1 + sqrt(x));	
			repeat x:= x -1			
			until (b mod x = 0) xor (x=2);

			if x=2 then 
			begin
				gettime(ore_i,m_i,s_i,s_i100);
				primi:=primi+1;
				append(output);
				write(output,b);
				write(output,' - ');
				close(output);
				gettime(ore_f,m_f,s_f,s_f100);
				time_i:=(ore_i*360000+m_i*6000+s_i*100+s_i100);
				time_f:=(ore_f*360000+m_f*6000+s_f*100+s_f100);
				k:=time_f-time_i;
				io:=io+k;			
			end;
end;



begin
	primi:=0;
	io:=0;

	clrscr;
	assign(output,'numeri_primi.output');
	rewrite(output);
	write('Inizio ricerca: '); readln(a); a_bis:=a;
	write('  Fine ricerca: '); readln(c);
	clrscr;
	writeln('Progresso operazione: ');
	gotoxy(7,3);
	write('|');
	gotoxy(19,3);
	write('|');
	GetTime(h_iniziale,m_iniziale,s_iniziale,s100_iniziale); 
	for a:=a to c do
		begin
		verifica_numero_primo(a);
		if (a - a_bis) mod trunc((c - a_bis)/100) = 0 then 
			begin
			gotoxy(1,3);
			write((a-a_bis)*100/(c-a_bis):3:0,' % ');
			end;
		if (a - a_bis) mod trunc((c - a_bis)/10) = 0 then
			begin
			gotoxy(8+(a - a_bis) div trunc((c - a_bis)/10),3);
			write('-');
			end;
		end;
	writeln(' ');
	writeln('Operazione completata! ');
	writeln(' ');
	GetTime(h_attuale,m_attuale,s_attuale,s100_attuale); 
	writeln('Premi un tasto per continuare ');
	writeln(' ');
	clrscr;
	tempo_iniziale:=(h_iniziale*360000+m_iniziale*6000+s_iniziale*100+s100_iniziale);
	tempo_attuale:=(h_attuale*360000+m_attuale*6000+s_attuale*100+s100_attuale)-io;
	writeln('Tempo impiegato: ',tempo_attuale-tempo_iniziale,' s100');
	writeln('Numeri esaminati: ',c-a_bis);
	writeln('Numero primi trovati: ',primi);
	writeln('Velocita'': ',(c-a_bis)/((tempo_attuale/100)-(tempo_iniziale/100)):6:0,' numeri/secondo');
	writeln('Input/Output : ',(io),' io/100s');

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 16/06/10 21:26
16/06/10 20:15
nessuno
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à.
16/06/10 20:21
Poggi Marco
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 16/06/10 20:40
aaa
16/06/10 20:57
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
16/06/10 21:26
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?
16/06/10 21:46
Poggi Marco
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.
aaa
16/06/10 21:53
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.