C/C++: generazione di un numero pseudo-random
L’header stdlib.h (cstdlib in C++), contiene al suo interno la funzione:
int rand(void)
che permette la generazione di un numero random, compreso tra 0 e RAND_MAX, che dipende da un seme, definibile attraverso la funzione:
void srand ( unsigned int seed );
Utilizzando sempre lo stesso seme si otterrà sempre la stessa sequenza pseudocasuale.
Per questo motivo, è possibile inizializzare il generatore di numeri pseudo-casuali mediante la funzione:
time_t time ( time_t * timer );
contenuta nell’header time.h (ctime in C++).
Passando a questa funzione NULL, essa restituirà il numero di secondi dall’1 gennaio 1970.
In generale, se vogliamo ottenere un numero pseudo-casuale tra a e b, sfruttando l’aritmetica dei moduli, possiamo utilizzare il seguente statement:
(rand() % (b-a+1)) + a;
Ad esempio, se a=5 e b=11, rand() % 7 produrrà un intero da 0 a 6.
Sommato a 5, verrà prodotto un numero da 5 a 11, come volevamo.
#include <iostream> #include <cstdlib> #include <ctime> using namespace std; int randint(int a, int b) { srand((unsigned int)time(0)); return (rand() % (b-a+1)) + a; } int main() { cout << randint(5, 20) << endl; }