Come generare numeri casuali
Ti stai esercitando con i linguaggi di programmazione e ti piacerebbe capire come generare dei numeri casuali sfruttando questi ultimi? Vuoi sorteggiare i partecipanti a un progetto scolastico usando il computer ma non hai tempo/voglia di installare programmi sul computer? Se le cose stanno esattamente così, credo proprio di avere qualche soluzione che fa al caso tuo.
Nel corso di questa guida, infatti, ti spiegherò come generare numeri casuali mediante alcuni dei più celebri e utilizzati linguaggi di programmazione esistenti. Inoltre, sarà mia cura illustrarti come ottenere lo stesso risultato mediante una serie di siti Web e app per smartphone e tablet: in questi ultimi due casi, non è richiesta alcuna conoscenza informatica in merito.
Prima di andare avanti, tuttavia, ritengo doveroso chiarire un importante punto della questione: in realtà, i numeri generati mediante computer, smartphone e tablet sono, nella maggior parte dei casi, da definirsi pseudocasuali. Il motivo è presto detto: essi vengono creati a partire da precise condizioni esterne (ad es. la data e l’ora corrente, lo stato della CPU, del disco, dello schermo, il numero dei programmi installati, lo stato del server Web e così via) che, seppur in maniera estremamente remota, possono essere “riprodotte” artificialmente per ottenere sempre la stessa cifra. Fatta questa doverosa precisazione, non mi resta altro da fare, se non augurarti buona lettura e buon divertimento!
Indice
- Come generare numeri casuali su C++
- Come generare numeri casuali su Excel
- Come generare numeri casuali su Flowgorithm
- Come generare numeri casuali in C
- Come generare numeri casuali su Java
- Come generare numeri casuali su Python
- Altri sistemi per generare numeri casuali
Come generare numeri casuali su C++
Sebbene il C++ sia un linguaggio ad oggetti, il sistema più semplice ed efficace per generare un numero casuale consiste nell’usare la funzione rand()
; inclusa nella libreria standard di C++ (cstdlib
), essa consente di generare in maniera pseudocasuale un valore numerico, di base incluso tra il valore 0 e il valore della costante RAND_MAX – pari ad almeno 32767.
Per far sì che il valore pseudocasuale venga modificato a ogni istanza di esecuzione del programma, bisogna usare la funzione srand()
, anch’essa presente nella libreria standard di C++; di fatto, questa funzione permette di predisporre l’ambiente di esecuzione per la generazione casuale della cifra, partendo dal seme fornito come valore di input.
Per ottimizzare il risultato ed escludere per quanto possibile la generazione di risultati identici in più istanza consecutive, è possibile dare in pasto alla funzione srand
la marca temporale (o timestamp) di data e ora correnti; quest’ultimo valore si può ottenere tramite la funzione time()
, inclusa nella libreria ctime
. In altre parole, per generare un numero casuale compreso tra 0 e RAND_MAX, puoi usare il codice seguente.
#include <ctime>
#include <cstdlib>
#include <iostream>
using namespace std
int main(){
srand(time(NULL));
cout << "Numero casuale: " << rand();
return 0;}
Se lo desideri, puoi definire l’intervallo numerico di appartenenza del valore casuale, servendoti dell’operatore modulo o %: quest’ultimo, se non lo avessi mai usato in precedenza, restituisce il resto della divisione per il valore scelto. Per farti un esempio, l’operazione 6%4
andrebbe a restituire il valore 2 (6 diviso quattro fa uno, con il resto di due).
Dunque, per dare un limite massimo al numero pseudocasuale, è sufficiente ricavare il resto della divisione del numero per il valore del limite stesso, maggiorato di uno; per imporre, invece, sia un limite massimo che un limite minimo, devi ricavare il resto della divisione del numero casuale per la differenza dei due valori limite, maggiorata di uno, andando poi ad aggiungervi il valore minimo stesso. Se vuoi integrare i calcoli di cui sopra nel tuo codice C++, puoi definire le funzioni seguenti.
int casuale_limMax(int max){ //genera numero casuale con limite massimo
srand(time(NULL));
return rand()%max;}
int casuale_doppioLim(int min, int max){ //genera numero casuale con limiti massimo e minimo
srand(time(NULL));
return rand()%(max-min+1)+min;}
Di seguito un esempio di codice sorgente pronto da compilare, con relativa funzione main.
#include <ctime>
#include <iostream>
#include <cstdlib>
using namespace std;
int casuale_doppioLim(int, int);
int main(void){
int m1, m2;
cout << "Inserisci il valore minimo: ";
cin >> m1;
cout << "Inserisci il valore massimo: ";
cin >> m2;
cout << "Il numero casuale generato è: "<< casuale_doppioLim(m1,m2) <<"\n";
return 0;
}
int casuale_doppioLim(int min, int max){
srand(time(NULL));
return rand()%(max-min+1)+min;}
Come generare numeri casuali su Excel
Se hai bisogno di inserire numeri casuali in una o più celle di Excel e di farlo senza pretese, puoi usare la funzione CASUALE()
: di fatto, quest’ultima consente di generare numeri pseudocasuali compresi tra 0 e 1 (escluso). Va da sé che, andando a moltiplicare il valore ottenuto per quello massimo richiesto maggiorato di uno, puoi manipolare il risultato come meglio credi.
Per farti un esempio, se vuoi ottenere un valore pseudocasuale compreso tra 0 e 100, individua la cella di tuo interesse e digita al suo interno la formula =CASUALE()*101
, se stai leggendo questa guida per capire come generare numeri casuali su Excel con decimali, oppure =INT(CASUALE()*101)
, se sei interessato ai soli numeri interi.
Ancora più comoda è la funzione CASUALE.TRA(minore;maggiore)
, che consente di ottenere numeri casuali compresi tra un valore minimo e un valore massimo; entrambi i parametri possono essere positivi, oppure negativi. Per esempio, inserendo nella cella di tuo interesse la formula =CASUALE.TRA(10;50)
, otterrai un numero intero compreso tra i valori 10 e 50.
La cella contenente il numero casuale verrà automaticamente aggiornato quando il foglio di lavoro viene ricalcolato, oppure immettendo una formula o dati in una cella diversa. Per eseguire il ricalcolo manuale, invece, schiaccia premi il tasto F9 della tastiera (verranno ricalcolate tutte le celle contenenti valori generati in modo casuale).
Come dici? Hai bisogno di sapere come generare numeri casuali non ripetuti Excel? Si può fare anche questo. Esiste infatti una particolare funzione, denominata MATR.CASUALE, che con gli opportuni parametri consente di estrarre un valore casuale, sia intero che decimale, da una matrice.
Se combinata correttamente con le funzioni UNICI e INDICE, puoi ottenere una sequenza di valori univoci, inseriti in automatico nella colonna scelta. Senza scendere in definizioni complesse, la funzione completa di cui parliamo è la seguente.
=INDICE(UNICI(MATR.CASUALE(valori_in_memoria;1;num_iniziale;num_finale;SE_INTERO)); SEQUENZA(num_valori))
Per esempio, se vuoi creare 250 valori pseudocasuali in memoria, compresi tra 10 e 300, e inserirne 40 nella colonna scelta, devi scrivere una formula del tutto simile a quella seguente, all’interno della cella che vuoi usare per contenere il primo valore.
=INDICE(UNICI(MATR.CASUALE(250;1;10;300;VERO)); SEQUENZA(40))
Qualora volessi invece ottenere dei numeri decimali, devi semplicemente sostituire la parola FALSO alla parola VERO, ottenendo qualcosa di simile alla formula seguente.
=INDICE(UNICI(MATR.CASUALE(250;1;10;300;FALSO)); SEQUENZA(40))
Nota: le formule e le funzioni viste in questo capitolo valgono per Excel desktop, per Excel online e anche per Excel su smartphone e tablet.
Come generare numeri casuali su Flowgorithm
Stai approcciando alla programmazione con Flowgorithm e ti piacerebbe sapere come poter generare un numero casuale? Ebbene, la funzione Random(X)
è proprio ciò che fa al caso tuo. Essa, infatti, consente di generare un valore casuale compreso tra 0 e la cifra passata come parametro. Quest’ultima, però, non è compresa nel conteggio: come al solito, se vuoi generare un numero casuale compreso tra 0 e 50, dovrai fornire come parametro per la funzione Random il valore 51, ossia la cifra che funge da limite massimo, maggiorata di una unità.
A seconda delle tue esigenze, puoi inserire il valore restituito da Random()
(che è di tipo intero) sia in una variabile, da gestire come meglio credi, sia in un blocco di scrittura; in quest’ultimo caso, se intendi inserire il valore in una stringa di testo delimitata dalle virgolette (" "
), ricorda di usare l’operatore di concatenazione &
, prima di richiamare la funzione stessa.
Come generare numeri casuali in C
Se hai necessità di generare numeri casuali in linguaggio C, sappi che puoi usare le stesse funzioni rand()
, srand()
e time()
già menzionate per il C++: esse, infatti, sono condivise da entrambi i linguaggi. L’unica differenza, in questo caso, consiste nel nome delle librerie delle quali fanno parte, che sono stdlib.h
(la libreria standard di C) e time.h
(la libreria contenente le funzioni predefinite per la gestione dei timestamp).
Di seguito, a titolo di esempio, ti lascio un codice funzionante che consente di ottenere numeri casuali compresi tra un valore minimo e un valore massimo.
#include <time.h>
#include <stdlib.h>
#include <stdio.h>
int numCasuale(int, int);
int main(void){
int m1, m2;
printf("Inserisci il valore minimo: ");
scanf("%d", &m1);
printf("Inserisci il valore massimo: ");
scanf("%d", &m2);
printf("Il numero casuale generato è: %d", numCasuale(m1, m2));
return 0;
}
int numCasuale(int min, int max){
srand(time(NULL));
return rand() % (max-min+1)+min;
}
Come generare numeri casuali su Java
Tra le caratteristiche del linguaggio di programmazione Java figura sicuramente la quantità di classi e oggetti predefiniti, che consentono di manipolare praticamente qualsivoglia tipo di dato.
Per esempio, se parliamo di numeri casuali, può tornarti certamente utile la classe java.util.Random: gli oggetti di tipo Random, infatti, si occupano di istanziare valori pseudocasuali; ciascun oggetto può essere poi gestito tramite i vari metodi definiti per l’oggetto, in maniera estremamente semplice.
Per farti un esempio, il metodo nextInt()
restituisce un valore intero pseudocasuale generato dall’oggetto Random; allo stesso modo, il metodo nextFloat()
restituisce un valore decimale. Se si utilizzano gli oggetti di tipo Random, non è necessario definire parametri o valori da usare come seme, in quanto il tutto viene gestito, in automatico, in fase di esecuzione.
Ecco un esempio di funzionamento degli oggetti Random: la porzione di metodo qui di seguito consente di ottenere un numero intero pseudocasuale, positivo o negativo.
import java.util.Random;
// altro codice dichiarativo
Random ra = new Random();
int numCas = ra.nextInt();
Se, invece, desideri generare un numero casuale intero positivo compreso tra un valore minimo e un valore massimo, puoi passare questi ultimi come argomenti ai metodi nextInt()
o nextFloat()
, avendo cura di aggiungere una unità al valore massimo. Il codice, quindi, diverrebbe come di seguito.
import java.util.Random;
// altro codice dichiarativo
Random ra = new Random();
int min=20;int max=50;
int numCas = ra.nextInt(min,max+1);
Se preferisci, invece, lavorare sui valori grezzi, puoi avvalerti del metodo rand()
, incluso nella classe Math: esso restituisce un valore decimale, maggiore o uguale a zero e inferiore a uno, e va manipolato usando gli stessi criteri già visti per C++ e C. Ricorda, qualora volessi servirtene, di effettuare un cast esplicito al tipo di valore primitivo da ottenere.
Laddove avessi necessità, per esempio, di ottenere un numero intero pseudocasuale compreso tra 50 e 250, dovrai usare il codice seguente.
int numCas=(int)(Math.random()*(251-50)+50);
Come generare numeri casuali su Python
Python, come certamente saprai, è uno dei linguaggi sintatticamente più semplici da assimilare: nonostante gli scenari d’impiego pressoché sconfinati, basta conoscere poche classi, con annesse moduli e funzioni, per poter ottenere programmi del tutto funzionanti.
Per quanto concerne la gestione dei numeri casuali, per esempio, puoi usare il modulo random
, incluso nella libreria predefinita random.py: basato sul funzionamento della classe omonima, tale modulo mette a disposizione dell’utente una serie di funzioni estremamente utili, che consentono di generare e manipolare i numeri casuali.
In primo luogo, bisogna inizializzare il generatore di numeri pseudocasuali, usando la funzione random.seed(seme)
: se non vengono forniti argomenti, come seed, viene usato il timestamp fornito dall’orologio di sistema. Questo passaggio non è obbligatorio, ma è consigliato per ottenere una serie di valori che possano più avvicinarsi alla definizione di casuale.
Detto ciò, per poter generare un numero intero casuale compreso tra due valori, basta usare la funzione random.randrange(minimo,massimo)
; per generare, invece, un numero decimale, si può usare la funzione random.uniform(minimo,massimo)
. Mediante la funzione random.random()
, invece, si ottiene un valore decimale compreso tra zero (incluso) e 1 (escluso). Di seguito un esempio di codice funzionante.
import random
random.seed()
print("\n \n Numero casuale intero compreso tra 10 e 100: " , random.randrange(0,100))
print("\n \n Numero casuale decimale compreso tra 10.0 e 100.0: " , random.uniform(10,100))
Altri sistemi per generare numeri casuali
Hai urgente necessità di ottenere uno o più numeri casuali senza passare per alcun linguaggio di programmazione? Non temere, credo di avere proprio ciò che fa al caso tuo. Per esempio, se non vuoi installare applicazioni o programmi per generare numeri casuali, sappi che esistono alcuni servizi Web che consentono di ottenere risultati più che sufficienti.
Per esempio, cercando su Google frasi come numero casuale oppure numero casuale da [valore minimo] a [valore massimo], puoi chiedere al motore di ricerca di compiere l’operazione per tuo conto, anche ; se, invece, vuoi qualcosa di più specifico, puoi far riferimento a Random.org, celeberrimo sito Web che promette di generare numeri casuali basati sul cosiddetto “rumore atmosferico”, dunque non attribuibili ad alcun algoritmo matematico prefissato.
Per servirtene, collegati alla sua home page, individua il riquadro True Random Number Generator (si trova a destra) e, avvalendoti dei campi Min e Max, indica le cifre tra cui il tuo numero casuale deve essere compreso (ad es. tra 0 e 50). Quando hai finito, premi sul pulsante Generate e il gioco è fatto: il numero di tuo interesse verrà mostrato, entro pochi istanti, sotto la voce Result.
Ancora, se vuoi un sistema che ti consenta di generare numeri casuali anche in assenza di Internet, puoi far riferimento ad applicazioni di terze parti utili allo scopo, quali potrebbero essere Numero casuale per Android (prova a vedere anche se c’è sul market alternativo a bordo del tuo device, se quest’ultimo è sprovvisto di servizi Google) o Generatore casuale per iPhone e iPad.
Nonostante le applicazioni della categoria abbiano interfacce decisamente diverse tra loro, funzionano quasi sempre allo stesso modo: bisogna installarle sul proprio device seguendo la classica procedura prevista dal sistema operativo, eseguirle e scegliere di voler generare un numero casuale. Fatto ciò, è sufficiente indicare il valore iniziale e finale da imporre al risultato (se necessario) e premere sull’apposito bottone per creare il numero. Tutto qui!

Autore
Salvatore Aranzulla
Salvatore Aranzulla è il blogger e divulgatore informatico più letto in Italia. Noto per aver scoperto delle vulnerabilità nei siti di Google e Microsoft. Collabora con riviste di informatica e cura la rubrica tecnologica del quotidiano Il Messaggero. È il fondatore di Aranzulla.it, uno dei trenta siti più visitati d'Italia, nel quale risponde con semplicità a migliaia di dubbi di tipo informatico. Ha pubblicato per Mondadori e Mondadori Informatica.