Questo sito contribuisce alla audience di Il Messaggero

Come generare numeri casuali

di

Ti stai esercitando con i linguaggi di programmazione e ti piacerebbe capire come generare dei numeri casuali sfruttando questi ultimi? Hai deciso di organizzare un piccolo contest sul tuo blog e stai cercando un servizio semplice ed efficace che ti consenta di estrarre dei numeri a caso per eleggere i vincitori del concorso? Vuoi sorteggiare i partecipanti a un progetto scolastico usando il computer ma non hai tempo/voglia di installare programmi sul PC? 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 in C

Come generare numeri casuali in C

Il modo più semplice di generare numeri casuali in C consiste nell’usare la funzione rand() di C. Essa consente di generare in modo casuale un numero compreso tra 0 e la costante RAND_MAX (un valore che, secondo ANSI C, dovrebbe essere maggiore o uguale a 32676). Per ottenere un valore compreso tra 0 e un numero arbitrario (escluso), è sufficiente utilizzare l’operatore %. Per esempio, al fine di ottenere un numero casuale compreso tra 0 e 101, bisognerà utilizzare il seguente codice.

int cas = rand() % 101;

Prima di richiamare questa funzione, tuttavia, bisogna “predisporre” il programma per la generazione di un numero pseudocasuale, che venga modificato a ogni esecuzione del software: questo risultato viene ottenuto mediante la funzione srand (presente nella libreria standard di C, stdlib.h), che accetta come argomento un “seme” per la generazione casuale della cifra. Per minimizzare la ripetizione di valori, si può utilizzare, come seme, l’ora corrente (che può essere ottenuta mediante la funzione time() della libreria time.h).

Alla luce di questa nuova necessità, ecco come si trasforma il codice visto poc’anzi.

#include <time.h>
#include <stdlib.h>
//definizione della funzione
int numCas;
srand(time(NULL));
numCas = rand() % 101;

Se preferisci, puoi inoltre far sì che C generi numeri casuali compresi tra un valore massimo e un valore minimo, utilizzando la funzione seguente.

#include <time.h>
#include <stdlib.h>
int numCasuale(int, int);

int numCasuale(int min, int max){
srand(time(NULL));
return rand() % (max-min+1)+min;
}

Infine, se ti interessa ottenere un programma funzionante che ti consenta di ottenere numeri casuali compresi tra due valori, puoi utilizzare il seguente codice.

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

int numCasuale(int, int);

int main(void){
int m1, m2, r;
printf("Inserisci il valore iniziale: ");
scanf("%d", &m1);
printf("Inserisci il valore finale: ");
scanf("%d", &m2);

r=numCasuale(m1, m2);
printf("Il numero casuale generato è: %d", r);
return 0;
}

int numCasuale(int min, int max){
srand(time(NULL));
return rand() % (max-min+1)+min;
}

Come generare numeri casuali negativi in C++

Come generare numeri casuali negativi in C++

Per generare numeri casuali negativi in C++ puoi “riadattare” il codice già visto per C, in quanto le funzioni da utilizzare sono praticamente le stesse. Chiaramente, affinché il numero sia negativo, i numeri da utilizzare come estremi devono essere essi stessi negativi (ad es. -100 e 0, oppure -98 e -15, e così via). Di seguito ti illustro un esempio di programma totalmente funzionante, realizzato in C++.

#include <ctime>
#include <iostream>
#include <cstdlib>
using namespace std;

int numCasuale(int, int);

int main(void){
int m1, m2, r;
cout << "Inserisci il valore negativo iniziale: ";
cin >> m1;
cout << "Inserisci il valore negativo finale: ";
cin >> m2;

r=numCasuale(m1, m2);
cout << "Il numero casuale generato è: "<< r <<"\n";
return 0;
}

int numCasuale(int min, int max){
srand(time(NULL));
return rand() % (max-min+1)+min;
}

Come generare numeri casuali in Java

Se è tuo interesse generare numeri casuali in Java, sappi che puoi procedere con almeno due differenti modalità: sfruttando il metodo Math.random(), utile a generare numeri pseudocasuali; o mediante la classe java.util.Random, creando un oggetto di tipo Random.

Math.random()

Come generare numeri casuali in Java

La classe Math di Java, per tua informazione, contiene un’ingente quantità di costanti e metodi statici da utilizzare all’interno di funzioni matematiche; tra questi, c’è il metodo random(), che ritorna un numero pseudo-casuale in virgola mobile compreso tra 0.0 e 1.0 (escludendo il secondo estremo); va da sé, dunque, che per ottenere un numero pseudo-casuale intero bisogna manipolarlo in un determinato modo, a seconda del risultato che ti interessa ottenere.

Per esempio, puoi generare una variabile numCas contenente un numero casuale intero, maggiore o uguale a 0 e minore di 101 (dunque da 0 a 100), mediante la seguente riga di codice.

int numCas = (int)(Math.random() * 101);

Ampliando il discorso, puoi impostare anche un limite inferiore moltiplicando il valore generato da Math.random() per la differenza tra il limite superiore e quello inferiore, aggiungendo poi quest’ultimo. Se, per esempio, vuoi ottenere un numero pseudocasuale compreso tra 50 (incluso) e 251 (escluso), dovrai usare il codice seguente.

int numCas = (int) (Math.random() * (251-50) +50);

Per comodità, puoi creare un metodo numeroCas che, dati due numeri interi, ti consente di generare un numero pseudocasuale compreso tra gli stessi, estremi inclusi.

public static int numeroCas (int minimo, int massimo) {
int min=minimo;
int max=massimo+1;
int numCas = (int) (Math.random() * (max-min)+min);
return numCas;
}

Ecco, infine, un esempio di classe funzionante.

import javax.swing.JFrame;
import javax.swing.JOptionPane;`

public class Calcoli {

public static int numeroCas (int minimo, int massimo) {
int min=minimo;
int max=massimo+1;
int numCas = (int) (Math.random() * (max-min)+min);
return numCas;
}

public static void main(String[] args) {
int min, max, numCas;
String s1, s2;
JFrame finestra = new JFrame("Calcoli vari");
s1=JOptionPane.showInputDialog("Inserisci il valore minimo");
min = Integer.parseInt(s1);
s2=JOptionPane.showInputDialog("Inserisci il valore massimo");
max = Integer.parseInt(s2);
numCas = numeroCas(min,max);
JOptionPane.showMessageDialog(finestra, "Numero casuale compreso tra " + min + " e " + max + " è " + numCas);
System.exit(0);
}
`}

java.util.Random

Come generare numeri casuali in Java

La classe Random della libreria java.util consente di semplificare decisamente le cose: oggetti di questo tipo prevedono dei metodi per richiamare numeri interi casuali, avvalendosi del metodo nextInt(). Di seguito ti mostro un utilizzo tipico di questa classe.

import java.util.Random;
// altro codice dichiarativo
Random ra = new Random();
int numCas = ra.nextInt();

In questo caso, verrà generato un numero intero pseudocasuale, positivo o negativo. Se, invece, desideri generare un numero casuale intero positivo compreso tra 0 (incluso) e un valore massimo (escluso), puoi passare quest’ultimo valore come argomento al metodo nextInt(). Il codice, quindi, diverrebbe

import java.util.Random;
// altro codice dichiarativo
Random ra = new Random();
int max = 51; /*per generare un numero casuale compreso tra 0 e 50 */
int numCas = ra.nextInt(max);

Ecco un esempio di classe funzionante.

import javax.swing.JFrame;
import javax.swing.JOptionPane;
import java.util.Random;

public class Calcoli {

public static int numeroCas (int massimo) {
int max=massimo;
Random ra = new Random();
return ra.nextInt(max);
}

public static void main(String[] args) {
int max, numCas;
String s1;
JFrame finestra = new JFrame("Calcoli vari");
s1=JOptionPane.showInputDialog("Inserisci il valore massimo");
max = Integer.parseInt(s1);
numCas = numeroCas(max);
JOptionPane.showMessageDialog(finestra, "Numero casuale compreso tra 0 e " + max + " è " + numCas);
System.exit(0);
}
}

Come generare numeri casuali su Excel

Come generare numeri casuali su Excel

Mi stai chiedendo come generare numeri casuali su Excel? Fidati, è facilissimo! Esiste infatti una funzione ben precisa, denominata CASUALE(), che consente di generare numeri pseudocasuali compresi tra 0 e 1 (escluso). Con i dovuti accorgimenti, è possibile far sì che questa funzione restituisca un numero intero casuale.

Come? Te lo spiego subito. Per prima cosa, individua la cella che deve contenere il numero casuale e digita al suo interno la formula =CASUALE()*100, se ti interessa ottenere un numero casuale compreso tra 0 (incluso) e 100 (escluso), oppure =INT(CASUALE()*100) se ti interessa visualizzare soltanto 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). La procedura è attuabile in tutte le versioni di Excel, compresa quella mobile e quella online.

Come generare numeri casuali online

Come generare numeri casuali

Hai urgente necessità di ottenere uno o più numeri casuali ma non hai modo, per conoscenze o possibilità, di utilizzare uno dei sistemi che ti ho indicato in questa guida? Non temere, credo di avere proprio ciò che fa al caso tuo. Esistono infatti alcuni siti Web che consentono di generare numeri casuali online nel giro di pochissimi secondi, in modo totalmente gratuito e mediante qualsiasi browser tu abbia a disposizione.

Uno di questi, per esempio, è 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 Max, indica le cifre tra cui il tuo numero casuale deve essere compreso (ad es. tra 0 e 50). Quando hai finito, clicca sul pulsante Generate e il gioco è fatto: il numero di tuo interesse verrà mostrato, entro pochi istanti, sotto la voce Result.

Come generare numeri casuali online

Altro simpatico (quanto immediato) modo di ottenere numeri casuali mediante il bowser è avvalersi del generatore incluso in Google: sì, hai capito bene, il celebre motore di ricerca consente di effettuare questo tipo di calcolo in maniera pressoché immediata!

Tutto ciò che devi fare, all’atto pratico, è collegarti alla pagina principale di Google, digitare la parola numeri casuali all’interno del campo di ricerca preposto e premere il pulsante della lente d’ingrandimento per avviarla. Dopo alcuni istanti, dovresti visualizzare un pannello contenente, per impostazione predefinita, un numero casuale compreso tra 1 e 10.

Se lo ritieni opportuno, puoi modificare i valori minimo e massimo avvalendoti degli appositi campi e, successivamente, generare un nuovo numero premendo il pulsante Genera.

Qualora volessi invece ottenere direttamente un numero casuale compreso tra due numeri ben precisi, effettua una ricerca su Google utilizzando, come chiave, la frase numero casuale tra X e Y (ad es. numero casuale tra 0 e 50): il risultato è garantito!

App per generare numeri casuali

Se vuoi avere sempre a disposizione un generatore di numeri pseudocasuali sul tuo smartphone o sul tablet, faresti bene a dare un’opportunità alle applicazioni di cui mi accingo a parlarti in questa sezione: fidati, non te ne pentirai!

Numero casuale (Android)

App per generare numeri casuali

Numero casuale è un’applicazione disponibile gratuitamente sul Play Store che consente, nel giro di un paio di tap, di generare numeri pseudocasuali o effettuare operazioni strettamente collegate agli stessi (lancio di dati, sorteggio, faccia di una moneta e così via).

Dopo aver scaricato l’app, avviala e tocca il pulsante Numero per accedere all’area preposta alla creazione di numeri casuali. Fatto ciò, inserisci il valore minimo e massimo del numero all’interno, rispettivamente, dei campi Da e A e, se lo desideri, tocca il pulsante a forma d’ingranaggio per indicare se consentire o meno la ripetizione degli stessi valori, se generare più valori in sequenza e, in caso affermativo, con quanto ritardo.

Ultimate le impostazioni, fai tap sull’icona delle frecce circolari collocato in basso a destra per generare un numero pseudocasuale che risponde ai parametri impostati in precedenza; per generare altri numeri, tocca nuovamente l’icona delle frecce circolari; per uscire, fai tap sulla freccia verso sinistra collocata, appunto, in alto a sinistra.

Rand (iOS/iPadOS)

Come generare numeri casuali

Rand è un’applicazione per iPhone e iPad disponibile gratuitamente su App Store che, senza troppi fronzoli, consente di ottenere numeri casuali nel giro di un paio di tap. Usarla è semplicissimo: dopo aver scaricato e installato l’app, avviala e premi sul cerchio blu collocato al centro dello schermo per generare subito un numero pseudocasuale compreso tra 0 e 100.

Se, invece, preferisci personalizzare i valori minimo e massimo del numero, fai tap sulla voce Impostazioni, collocata in fondo allo schermo, e indica i suddetti valori all’interno dei campi che ti vengono proposti. Quando hai finito, tocca la collocata in alto a destra e premi nuovamente il cerchio blu per generare un nuovo numero.

Salvatore Aranzulla

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.