<< pagina principale < ······················ << articoli < ······················


SEMPLICE USO DELL'ELABORATORE ON-LINE

procedure Pascal per misurare intervalli di tempo

di Roberto Ricci

1.Premessa

Di norma l'elaboratore e` utilizzato come strumento per effettuare calcoli su simboli che rappresentano dati, cioe` astrazioni di aspetti della realta`, e che vengono inseriti dall'utente attraverso la tastiera. E` meno frequente, soprattutto in ambito scolastico, l'uso dell'elaboratore per acquisire direttamente dati risultato di misurazioni su grandezze relative al fenomeno osservato; quando lo si usa in tal modo e` generalmente interfacciato col fenomeno attraverso dispositivi hardware e software. Si utilizzano in particolare interfacce hardware, i convertitori analogico-digitali, per trasformare in numeri discreti le tensioni continue il cui andamento rispecchia quello delle grandezze fisiche a cui sono applicati i dispositivi trasduttori. Gli intervalli di tempo invece possono essere misurati, in diversi casi, senza alcun dispositivo hardware diverso da quelli di cui e` normalmente dotato un elaboratore; i "dispositivi" software possono essere realizzati anche con conoscenze assai limitate di un linguaggio di programmazione come il TurboPascal. Si possono realizzare cosi` alcune interessanti semplici applicazioni per esempio nella didattica della fisica del biennio: per affrontare in generale i concetti di misurazione e di misura ed in particolare quelli degli intervalli di tempo, per parlare delle caratteristiche dei metodi di misurazione, per sottolineare l'invarianza delle leggi fisiche rispetto alle unita` di misura; inoltre l'elaboratore puo` essere usato come sensibile cronometro in grado di memorizzare e rielaborare i risultati di diverse misurazioni. Anche il laboratorio di matematica, per quanto riguarda ad esempio lo studio di certi fenomeni casuali, potra` esserne arricchito.

2.Una semplice procedura "cronometro Pascal"

Il ciclo:

durata:=0; 
repeat 
	durata:=durata+1 
until keypressed;  

incrementa di un'unita` la variabile reale durata fino a quando non verra' premuto un tasto qualsiasi. Infatti la funzione booleana keypressed, che ha normalmente valore false, diventa true nel momento in cui viene premuto un tasto qualsiasi della tastiera. La procedura

procedure cronometra(var durata:real); 
begin durata:=0; 
writeln( ' premi <ENTER> per far scattare il cronometro ed'); 
writeln( ' un tasto qualsiasi per fermarlo    :'); 
read; repeat durata:=durata+1 until keypressed; 
end; 

puo` essere richiamata da programma per effettuare una misurazione dell'intervallo di tempo tra la pressione del tastoe la successiva pressione di un tasto qualsiasi. La durata dell'intervallo di tempo impiegato dalla macchina per eseguire l'istruzione durata:=durata+1 e valutare la funzione keypressed e` assunta come durata campione e la durata dell'intervallo di tempo da misurare e` espressa in multipli di quella. Si osservi che la variabile durata e` dichiarata di tipo real allo scopo di ottenere valori maggiori di 32767, il massimo numero intero rappresentabile in precisione semplice dal TurboPascal. La procedura realizza cosi` un dispositivo, un "cronometro Pascal" manuale, che non misura in secondi ma in un'unita` non standard, evidentemente molto piu` piccola, che possiamo chiamare "ciclo Pascal". La durata campione potrebbe essere trasformata in secondi conoscendo la frequenza del clock, l'orologio interno che scandisce lo svolgersi delle azioni della macchina, ed il numero di cicli di clock occorrenti per eseguire le due istruzioni che costituiscono l'unita` di durata assunta come campione. Ovviamente tale calcolo dipende, oltre che dal linguaggio di programmazione usato, dal tipo di macchina su cui e` implementato. Dal punto di vista didattico, per tarare in secondi un "cronometro Pascal", e` molto piu` interessante seguire un'altra strada, utile per approfondire il concetto di misura e il passaggio da un sistema di misurazione ad un altro.

3.Una procedura per tarare in secondi il cronometro Pascal

type serie_valori:array[1..100] of real; 
procedure tara_in_sec(var sec_per_cicloP,risoluzione:real);
var risultato_misurazione:serie_valori; i,n_mis:integer; 
durata,risol,durata_cicliP,incert_cicliP:real;    
risp:char; 
begin 
	clrscr; 
	write( ' Fissa una durata di riferimento in secondi:    ');
	readln(durata); 
	write( ' Che risoluzione, in secondi, ha lo strumento usato    ? '); 
	readln(risol); 
	write( ' Quante misurazioni vuoi fare col cronometro Pascal?    '); 
	readln(n_mis); 
	for i:=1 to n_mis do 
		repeat cronometra(risultato_misurazione[i]);    
			writeln(i,'^mis ', risultato_misurazione[i],' confermi ? s/n'); 
			read(risp) 
		until    (risp='s') or (risp='S'); 
	elaborazione_statistica(risultato_misurazione,n_mis, durata_cicliP,incert_cicliP); 
	sec_per_cicloP:=durata_sec/durata_cicliP; 
	risoluzione:= (risol*durata_cicliP+durata*incert_cicliP)/ sqr(durata_cicliP) 
end; 

La procedura elaborazione_statistica, che qui non viene approfondita, dovra` essere in grado, data la serie dei valori ottenuti da ciascuna misurazione, di visualizzare un istogramma e restituire al blocco chiamante la media e l'incertezza sperimentale s / ¹(N-1), essendo Õ lo scarto quadratico medio ed N il numero di misurazioni. Scelta una durata di riferimento di misura

( durata ± risol ) s

se ne ripete la misurazione con il cronometro Pascal. Si otterra` cosi` una serie di valori numerici interi in forma real dai quali si puo` ricavare una nuova misura

( durata_cicliP ± incert_cicliP ) cicli Pascal

della durata di riferimento. Allora la misura di un ciclo Pascal sara` data da

( sec_per_cicloP ± risoluzione ) s

dove

sec_per_cicloP = durata / durata_cicliP 
               risol*durata_cicliP + durata*incert_cicliP 
risoluzione =  ————————————————————————————————————————
                         durata_cicliP ² 

Prendendo un semplice cronometro meccanico e manuale si potrebbero ottenere ad esempio risultati come i seguenti:

durate n_mis sec_per_ciclo risoluzione
5.0 ± .2 30 ~6.75 E-4 ~3.4 E-5
10.0 ± .2 30 ~6.97 E-4 ~1.8 E-5
15.0 ± .2 30 ~6.97 E-4 ~1.3 E-5
20.0 ± .2 30 ~6.99 E-4 ~1.0 E-5

Una risoluzione dell'ordine del decimillesimo di secondo puo` essere certamente considerata caratteristica rilevante del cronometro Pascal in questione.

4.Applicazione per valutare i tempi di reazione di un individuo

Modificando opportunamente la procedura cronometra si puo` osservare il tempo di reazione, in cicli Pascal, di un individuo.

procedure cronometra_reazione(var durata:real); 
begin clrscr; 
durata:=0; 
write('premi qualsiasi tasto appena scomparira` questa scritta'); 
delay(2000+random(3000));    
clrscr; 
repeat durata:=durata+1 
until keypressed; 
end; 


procedure valuta_riflessi( var ritardo_medio,incertezza:real)
var ritardo:serie_valori; i,n_mis:integer;    
begin clrscr; 
writeln( 'Quante volte vuoi mettere alla prova i tuoi riflessi  ? '); 
read(n_mis); 
for i:=1 to n_mis do cronometra_reazione(ritardo[i]); 
elaborazioni_statistiche (ritardo,n_mis,ritardo_medio,incertezza 
end;