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 |
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.