Programmazione – Lezione 7 – I numeri casuali

Numeri Casuali

In molte occasioni potrà capitare di dover generare, in un programma, una sequenza di numeri casuali.
L’istruzione adatta allo scopo in C è la funzione rand.
E’ bene chiarire subito che un computer non è assolutamente in grado di generare numeri casuali come avviene in natura. Ad esempio se proviamo a tirare un dado a 6 facce, otterremo dei numeri casuali compresi tra 1 e 6. Ma si tratta di una casualità naturale e non artificiale come quella generata da un computer. Non vado oltre in quanto si tratta di un discorso molto complesso, affrontato sicuramente in modo più approfondito da libri di statistica.

Vediamo subito come usare l’istruzione rand per generare, ad esempio, un numero casuale tra 0 e 10

int prova;

prova = rand() % 11;

L’istruzione “rand() % n” genera numeri compresi tra 0 e n-1 per cui se desideriamo generare numeri che partono, ad esempio da 1 per arrivare, ad esempio, a 30 dovremmo fare così:

int prova;

prova = rand() % 30 + 1; //genera valori casuali tra 1 e 30

Quindi con “rand() % n + 1” generiamo valori compresi tra 1 e n.

Ricapitolando:

int valore1;
int valore2;
valore1 = rand() % 100; // valore1 compreso tra 0 e 99
valore2 = rand() % 100 + 1; // valore2 compreso tra 1 e 100

 

Proviamo a fare subito un esempio di uso dell’istruzione rand:

//generiamo 10 numeri casuali compresi tra 0 e 99

int casuale = 0;

for (int i=1; i <= 10; i++)
{
   casuale = rand () % 100;
   printf("%d\n", casuale); // stampiamo i valori
}

Quando proveremo il nostro codice nel compilatore ci renderemo conto subito di una cosa, ovvero che ad ogni esecuzione del programma, otterremmo sempre la stessa sequenza di numeri casuali. Questo accade, appunto come già detto, in quanto il computer simula la generazione dei numeri casuali, non si tratta di una vera casualità come quella che accade in natura.

Per ovviare a questo inconveniente dobbiamo modificare il nostro codice sorgente in questo modo:

//generiamo 10 numeri casuali compresi tra 0 e 99

#include<ctime> //questa funzione carica la libreria C per la gestione del tempo

int casuale = 0;
srand((int) time(0)); //questa istruzione, basandosi sul tempo, permette ad ogni compilazione di ottenere valori sempre differenti

for (int i=1; i <= 10; i++)
{
   casuale = rand () % 100;
   printf("%d\n", casuale); // stampiamo i valori
}

Non ci resta che provare il codice nel nostro compilatore online:

Compilatore-rand

Per ottenere valori diversi basta fare una semplice modifica nel codice anche aggiungere uno spazio, questo compilatore online ricarica il codice sorgente solo quando lo stesso viene modificato.

Provate anche voi a fare qualcosa di particolare, ci vediamo al prossimo articolo Smile-Ammicca

Se ti è piaciuto l'articolo e apprezzi il mio lavoro potresti aiutarmi con una piccola donazione, tramite PayPal, offrendomi un cappuccino.
Grazie di cuore!
Dona