Come generare numeri casuali con la funzione rand in C

Il metodo più semplice per generare numeri casuali in C consiste nell’utilizzare la funzione rand. Tale funzione restituisce un numero pseudo-casuale compreso nel range che va da 0 a RAND_MAX, dove quest’ultima è una costante di valore pari almeno al numero 32767.
Utilizzando l’operatore % è possibile indicare un nuovo range da cui generare un numero casuale. Ad esempio per generare un numero casuale compreso tra 0 e 100, basta utilizzare la seguente parte di codice:



int r = rand() % 101;

Importante notare che la funzione rand si trova all’interno della libreria stdlib.h, questo significa che per poter utilizzare rand, dobbiamo includere tale libreria nell’header del file.

Se la funzione rand viene utilizzata da sola, ad ogni esecuzione del programma verrà generato lo stesso valore. Questo è dovuto al fatto che viene utilizzato lo stesso seed, o seme, per la generazione del numero casuale. In particolare utilizzando la funzione srand è possibile specificare il seed da utilizzare per generare un numero casuale.

Nota: anche la funzione srand si trova all’interno della libreria stdlib.h.

Per poter generare numeri diversi ad ogni esecuzione del programma, basta modificare il valore del seed che viene passato nella funzione srand. Ad esempio consideriamo la seguente parte di codice:



srand(5);
printf("Numero casuale: %d\n", rand() % 101);

Il valore 5 specificato come argomento della funzione srand rappresenta il valore del seed (o seme). In particolare ad ogni esecuzione notiamo che la funzione rand restituisce sempre lo stesso valore. Se, ora sostituiamo il numero passato nella funzione srand, con ad esempio il numero 72, la funzione rand genererà un numero casuale diverso rispetto a prima.

Per poter utilizzare un seed diverso ad ogni esecuzione del programma, tipicamente si fa uso della funzione time della libreria time.h, che permette di ottenere l’ora corrente. In particolare il valore dell'ora viene utilizzato come argomento della funzione srand, ovvero come seed per la generazione dei numeri casuali per ridurre il numero di ripetizioni. Il codice utilizzato precedentemente diventa:



srand(time(NULL));
printf("Numero casuale: %d\n", rand() % 101);

In questo modo, ad ogni esecuzione del programma la funzione rand genererà dei numeri casuali compresi tra 0 e 100, senza dover cambiare manualmente il valore del seed.

Come generare 10 numeri casuali in C

Utilizzando la funzione rand all’interno di un ciclo, è possibile generare N numeri casuali durante una singola esecuzione del programma. La cosa importante è ricordarsi di utilizzare la funzione srand con la funzione time, in modo da utilizzare un seed diverso per ridurre la possibilità di avere duplicati. In questo modo possiamo utilizzare un ciclo for per generare 10 numeri casuali compresi tra 0 e 100, come nel seguente modo:



#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(){
    srand(time(NULL));
    for(int i=0; i<10; i++){
        printf("%d ", rand() % 101);
    }

    return 0;
}


15 89 69 1 42 72 52 21 43 66

Indice pagine linguaggio C: