La gestione dei numeri casuali è prevista in tutti i linguaggi di programmazione ad alto livello com il C++, e quindi nell’algoritmo è possibile prevedere una funzione chiamata “Casuale” che ha come argomento un numero intero positivo. Il generatore estrae i numeri compresi nell’intervallo [0,n-1] ove n è il numero intero positivo passato come argomento alla funzione “Casuale”. Anche nel software fliwgirutgn esiste tale funzione che ha nome “Random” e la cui sintassi è Random(n) ove n è il limite superiore dell’insieme dei numeri casuali da generare da 0 a n-1. Nel linguaggio C++ per la generazione dei numeri casuali occorre utilizzare le liobreire <cstdlib> per le funzioni “srand” e “rand” e la libreria <timle.h> o <ctime> per la gestione del tempo.
Infatti i numeri casuali sono generati attraverso dei processi casuali sul computer o tramite il metodo “Monte Carlo” che è un argomento avanzato di statistica. Impropriamente sono numeri casuali, infatti sarebbe più corretto chiamarli numeri “pseudo-casuali” in quanto il loro processo di generazione è comunque guidato dal programma informatico.
Nel linguaggio C++ è necessario inizializzare il generatore di numeri casuali con l’istruzione:
srand(time(NULL));
che indica al calcolatore di inizializzare il generatore con un “seme” per una sequenza arbitraria di numeri pseudo-casuali. Infatti il codice sopra indica il numero di secondi trascorsi fra 1 Gennaio 1970 e la data corrente all’avvio del programma. Se il seme viene fissato genera sempre la stessa sequenza.
Provare questo codice sotto riportato che genera due sequenze di distinte di numeri casuali fra 1 e MAXINT del C++ di un unsigned int.
GNU nano 6.2 es1.cpp
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int main()
{ cout << "Tempo:" << time(NULL) <<endl;
srand(time(NULL));
for (int k=0;k<2;k++)
{ cout << "\nSequenza : "<< k+1 << endl;
for (int i=0;i<4;i++)
cout << "\nNumero casuale:"<< rand() << "\t";
}
cout << endl;
return 0;
}
Il codice riportato imposta due volte la squenz adi numeri casuali attraverso due cicli for che provvedono a stampare due sequenze di numeri casuali distinte di 4 numeri.
Per generare dei numeri in un intervallo preciso è possibile utilizzare la funzione rand() con l’espressione:
rand() %(b-a1+)+a;
genera nel caso di b>a numeri casuali nell’intervallo [a,b].
L’esercizio proposto:
Un giocatore punta una somma di x euro sull’estrazione di un numero intero compreso fra 1 e 90. La vincita di tale partita è determinata da questo tabella Estrazione Vincita Numero esatto 100 volte la puntata Numero Estratto – Numero puntato < 10 10 volte la puntata Numero Estratto – Numero puntato > =10 e < 50 5 volte la puntata Numero Estratto – Numero puntato > 50 Nessuna vincita (Numero Estratto – Numero puntato )/2 è pari 3 volte la puntata Scrivi un algoritmo, un programma che letto il numero da puntare, estratto un numero casuale fra 1 e 90 e la relativa puntata determini se il giocatore ha vinto e quanto eventualmente ha vinto.
L’algoritmo risolutivo prevede il seguente flow chart:
Questo è l’algoritmo risolutivo che richiede anche la funzione “Abs” per calcolare il valore assoluto della differenza fra il numero estratto e il numero puntato. In quanto tale differenza può essere negativa nel caso in cui il numero estratto sia inferiore a quello giocato. La differenza può valere zero che indica che il giocatore ha indovinato il numero.
La codifica C++ è:
#include <iostream>
#include <time.h>
#include <cstdlib>
#include <math.h>
using namespace std;
int main()
{
float x,t;
int e,n,d;
t=0;
d=0;
cout << "\n Inserisci importo da scommettere:";
cin >> x;
cout << "\n Numero da giocare:";
cin >> n;
srand(time(NULL));
e=rand() % 90+1;
d=abs(e-n);
if (d==0)
t=100*x;
if (d<10)
t=10*x;
if (d>=10 && d<50)
t=5*x;
if (d % 2 ==0)
t=t+3*x;
if (t>0)
{
cout << "\n Hain vinto:";
cout << "\n un importo pari a:"<< t << endl;
cout <<"\n Il numero estratto è:"<< e << endl;
}
else{
cout << "\n Non hai vinto !";
cout <<"\n Il numero estratto è:"<< e << endl;
}
return 0;
}
A conclusione il
Video completo dell’esercitazione
In questa pagina sono presenti link di affiliazione che garantiscono a questo sito una piccola quota di ricavi, senza variazione del prezzo per l’acquirente.