Indice

Esercitazione numeri casuali

Esercizio 1: Generazione di numero casuali in C

In alcuni casi e' importante riuscire a generare casualmente dei valori all'intero di programmi C per modellare situazioni reali o per testare opportunamente i programmi scritti. In realta' il computer non riesce a generare eventi realmente “a caso” in quanto tutti i programma si basano su una determinata sequenza di azioni. Tuttavia e' possibile avere un comportamento vicino alla casualita' con le sequenze pseudocasuali, che vengono generate con un procedimento deterministico ma mantengono proprieta' statistiche simili a quelle di una vera sequenza casuale.

Inoltre le sequenze pseudocasuali possono, su richiesta, rigenerare la stessa sequenza di numeri. Questo e' molto utile ad esempio in fase di testing del codice.

La generazione di numeri pseudocasuali e' molto complessa. Tutti i linguaggi di programmazione ad alto livello mettono a disposizione delle opportune funzioni per generare una sequenza. In C, per generare una sequenza pseudocasuale si utilizzano due funzioni di stdlib.h: la funzione

void srand(unsigned int seed);

che serve a fissare il seme (seed) ovvero il valore iniziale della sequenza. E la funzione

int rand(void);

che genera un intero nell'intervallo [0,RAND_MAX] ogni volta che viene chiamata.

La srand() deve essere chiamata una sola volta per fissare il seme, successivamente la sequenza puo' essere generata con chiamate successive alla rand().

Partendo dallo stesso valore iniziale si ottiene sempre la stessa sequenza quindi fornendo lo stessp seme a srand() possiamo riprodurre piu' volte la stessa sequenza casuale quando occorre (per testing o altro).

Utilizzare le funzioni srand() e rand() per scrivere un programma C che legge due valori dallo standard input:

e stampa sullo standard output N valori casuali nell'intervallo [0,2] generati con seme seed. Un esempio di funzionamento del programma e' il seguente

$./generatore
Inserisci N e seed:
3 42
Generati 3 valori interi nell'intervallo [0,2] con seed 42:
1
0
2

suggerimento: leggere attentamente il manuale di srand e rand e utilizzare l'operatore resto %

Esercizio 2: Generazione di numero casuali reali

Scrivere un programma C che legge dallo standard input un numero N di reali da generare e stampa sullo standard output una sequenza di N numeri casuali reali nell'intervallo [0,1) utilizzando le funzioni srand() e rand() introdotte nell'esercizio precedente.

Suggerimento: Utilizzare RAND_MAX e la divisione fra reali.