La formula proposta per generare un numero casuale, attribuita al matematico Lehmer, si può scrivere nella forma:
X(successivo) = [X(corrente) * p] mod q
In un linguaggio di programmazione una variante di questa formula è impiegata per la funzione
random().
Richiamando la funzione
random() si ottiene un numero casuale compreso tra 0 e 1 (1 escluso).
I numeri generati dalla funzione
random() appartengono a una distribuzione uniforme.
Come si può ottenere un numero casuale nell’intervallo [180, 250[? L’intervallo è ampio 250-180, cioè 70.
Il minimo valore prodotto dalla funzione
random() è 0, e moltiplicando 0 per 70 (=250-180) si ha 0.
Il massimo valore prodotto dalla funzione random è 0.9999999, e moltiplicandolo per 70 si ottiene 69.9999.
Allora moltiplicando un numero compreso tra 0 e 1 per 70 e prendendo la parte intera si ottiene un numero compreso tra 0 e 69. Aggiungendo 180 si ottiene un numero compreso tra 180 e 249.
In generale data una funzione che produce un numero compreso tra 0 e 1, per ottenere un numero nell’intervallo [a, b[:
x = a + (b - a) * random()
Per generare un numero intero compreso tra 1 e 6, con il 6 compreso nel risultato, la formula è:
x = 1 + 6*random()
- Nella cella A1 scrivere la formula per lanciare un dado:
=1 + INT(6*CASUALE())
- Premendo F9 si chiede il ricalcolo delle formule e si può leggere un nuovo esito del lancio di un dado.
Contare quante volte si ha esito 1, quante volte si ha esito 2, ecc.
Nell’intervallo A3…A8 scrivere i numeri 1, 2, …, 6.
Accanto a ciascun numero scrivere un’espressione per contare quante volte è stato estratto ciascuno di essi.
- Passare al Visual Basic Editor di Excel
- Nel menu Inserisci (dell’editor di Visual Basic) scegliete Modulo.
- Poi, ancora tramite il menu Inserisci, scrivere la routine Sub Dadi.
-
| |
Istruzione |
| 1 |
For i = 1 to 100 |
| 2 |
Cells(1, 1) = Int(Rnd() * 6) + 1 |
| 3 |
dado1 = Cells(1, 1) |
| 3 |
Cells(dado1 + 2, 2) = Cells(dado1 + 2, 2) + 1 |
| 3 |
Next |
Linea 1: Si suppone di lanciare il dado 100 volte.
Linea 2: Si genera un numero casuale compreso tra 1 e 6 e lo si scrive nella cella, del foglio attivo, in riga 1, colonna 1.
Linea 3: Il valore del dado viene scritto nella variabile
Dado1.
Linea 4: Il valore del dado viene utilizzato come coordinata di riga per contare (nelle celle B3÷B8) il numero di volte che si è verificato questo valore.
L’istruzione descrive l’accesso ad un array bidimensionale. L’elemento riferito si trova nella riga ottenuta sommando 2 (perché si sono lasciate due righe vuote) al numero uscito sul dado.
Se è uscito 1 allora l’elemento si trova nella riga 3.
il secondo parametro dentro la parentesi (2) specifica la colonna 2 del foglio, cioè la colonna B.
il ciclo For termina con l’istruzione
Next
Eseguire la macro numerose volte e verificare se i numeri hanno tutti la stessa frequenza. Lo si verifichi anche con un grafico.
Costruire l’istrogramma dei dati contenuti nell’intervallo B3:B8, assumendo come "Etichette asse categorie" l’intervallo A3:A8.
Eseguire la macro e osservare che l’uniformità della frequenza dei valori estratti non è proprio regolare ma i valori
sono comunque dello stesso ordine di grandezza.