Cap. 11. - La funzione random(n) di Turbo Pascal

                  per la simulazione di eventi aleatori.

 

11.1 - Simulazione di eventi aleatori al computer, con Turbo Pascal

In TURBO PASCAL la funzione random (n) , essendo n di tipo integer, restituisce un integer pseudocasuale che potrà valere: 0, 1, 2, …, n-1.

Quindi, ad esempio,

esito:=random(2)

si presta a simulare il lancio di una moneta (1 potrà essere interpretato come “Testa” e 0 come “Croce, o viceversa;

x:=random(6)+1

si presta a simulare il lancio di un dado.

Invece la funzione random, usata senza alcun argomento, restituisce un numero pseudocasuale di tipo real , compreso fra 0 e 1.

Es.

            x:=random;

assegna alla variabile x, che deve essere stata dichiarata di tipo “real”, un valore pseudocasuale compreso fra 0 e 1.

E’ ’importante ricordarsi che quando in un programma Turbo Pascal si utilizza una funzione random,  occorre premettere, all’inizio del programma, l’istruzione

RANDOMIZE;

essa ordina al computer di “rendere casuale il seme del generatore di numeri pseudocasuali”.

E’ un po’ come scuotere preventivamente l’urna da cui si estrarranno le palline; se non lo si fa, la pallina estratta, quando viene posata, resterà sempre in superficie e continuerà ad essere ripescata.

 

Esempio

Lancio una moneta;

se esce testa, mi viene consegnata un'urna U1 in cui ci sono una pallina Nera (N) e una Rossa (R):

da quest'urna estraggo una pallina;

se invece esce croce, mi viene consegnata una diversa urna U2 in cui vi sono 9 palline Azzurre

(A1, A2, ... A9) e 1 Blu (B);  da quest'urna estraggo una pallina.

Qual è la probabilità di estrarre una pallina Blu? E una Rossa?

 

Scrivere un programma Pascal che utilizzi la funzione RANDOM (n) per la generazione di numeri casuali, in modo tale da simulare la prova aleatoria considerata nel problema, ripeterla un gran numero di volte e calcolare i rapporti

n° di volte in cui è uscito Blu/n° di prove effettuate;  n° di volte in cui è uscito Rosso/n° di prove effettuate.

 

program probabilita_a_posteriori;  uses crt;

var n, r, b, i, u, p: integer;

begin

clrscr;

randomize;

writeln ('Quante prove vuoi effettuare?'); readln (n);

r:=0; b:=0;

for i:=1 to n do

begin

u:=random(2)+1;

if u=1 then

begin

p:=random(2);

if p=0 then r:=r+1;

end;

if u=2 then

begin

p:=random (10);

if p=0 then b:=b+1;

end;

end;

 

Su questo sito 

puoi trovare:

 

·         SIMULAZIONE TURBO PASCAL DEL PROBLEMA DEL CAPITOLO 10.3

(dado, poi U1 oppure U2, poi …)

·         SIMULAZIONE TURBO PASCAL DEL PROBLEMA DEL CAPITOLO 9.21

(“la sfida”)

 

Per APPROFONDIMENTI SUI NUMERI PSEUDOCASUALI,

ti raccomando il bel sito

http://axdel1.bo.infn.it/stat/avan/random/ranintro.html

writeln ('Probab. a posteriori dell''uscita di una Rossa ', r/n:3:5);

writeln ('Probab. a posteriori dell''uscita di una Blu   ', b/n:3:5);

readln;

end.