La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Generazione di numeri casuali in Dev C++

Presentazioni simili


Presentazione sul tema: "Generazione di numeri casuali in Dev C++"— Transcript della presentazione:

1 Generazione di numeri casuali in Dev C++

2 La funzione rand() Una funzione è un sottoprogramma che “svolge un lavoro” e restituisce un valore La funzione rand() genera un numero casuale compreso tra 0 e RAND_MAX (una costante, che secondo l’ANSI C – un protocollo per gli standard di C – deve essere maggiore o uguale di 32767);

3 #include <iostream>
using namespace std; int main() { int x,i; for (i=1;i<=10;i++) x = rand(); cout << x << endl; } system("Pause"); Questo programma genera 10 numeri casuali

4 Ma se voglio invece generare numeri ad es. compresi tra 0 e 99 ?
APPLICO L’OPERATORE MODULO (RESTO) CIOE’ il % PRIMA #include <iostream> using namespace std; int main() { int x,i; for (i=1;i<=10;i++) x = rand() % 100; cout << x << endl; } system("Pause"); DOPO

5 Numeri tra 0 e N Per generare numeri compresi tra 0 e N-1 applico il modulo di N: X = rand() % N; Per averli invece tra 1 e N basta sommare 1: X = rand() % N + 1;

6 Esempio X = rand() % 6 + 1; (genera numeri tra 0 e 5) Sommando 1 li ottengo tra 1 e 6 (es. del lancio del dado) 1 2 3 4 5 +1 6

7 E se li volessi tra 20 e 30 ? I numeri tra 20 e 30 sono 11 Quindi genero un numero tra 0 e 10 e sommo 20 (se è zero diventa 20, se è 10 diventa 30) 1 2 3 4 5 6 7 8 9 10 + 20 20 21 22 23 24 25 26 27 28 29 30

8 Come evitare di ottenere la stessa sequenza
Devo “rimescolare l’urna” da cui vengono estratti i numeri, Con la funzione srand “che accetta come argomento un seme (del tipo unsigned int), che “insemina” la funzione rand, in modo da indurla a generare una diversa sequenza di numeri casuali ad ogni esecuzione del programma, a patto che sia fornito ogni volta un seme diverso. Come ovviare però a questo ultimo inconveniente? Si può fornire come argomento a srand l’orario in quell’istante, letto dall’orologio interno del computer da parte della funzione time” PS “I wrote a program for calculating current date and time using function time(NULL). I read this function contains total seconds from till now. “

9 srand(7); srand(17); Escono sequenze diverse, ma a parità di seme, esce SEMPRE LA STESSA, cioè con seme 7 esce SEMPRE 61, 22, 15, 40 …

10 “Using srand(time(NULL));
Per CAMBIARE IL SEME IN MODO CASUALE, posso usare COME SEME (seed) l’ ora di sistema, che sarà un numero diverso ad ogni esecuzione del programma, permettendo così di ottenere SEQUENZE OGNI VOLTA DIVERSE, perché cambia il seme ogni volta: il valore più aleatorio al quale un programma può accedere è l'istante nel quale viene eseguito: da ciò deriva l'uso dell'argomento time(NULL). “Using srand(time(NULL)); makes use of the computer's internal clock to control the choice of the seed.  Since time is continually changing, the seed is forever changing.  Remember, if the seed number remains the same, the sequence of numbers will be repeated for each run of the program”. PS “I wrote a program for calculating current date and time using function time(NULL). I read this function contains total seconds from till now. “

11 Esercizio 1 Una macchina produce tondini di ferro che dovrebbero avere un diametro di 20 mm. Sono accettati anche tondini che abbiano un diametro di 5 mm in più o in meno e che vengono considerati di seconda scelta. Gli altri vengono scartati come difettosi. Simulare utilizzando la funzione random una produzione di 1000 tondini con un diametro compreso tra 10 e 30 e indicare quanti sono: I tondini prodotti di prima scelta; Quelli di seconda scelta; Quelli scartati come difettosi.

12 Esercizio 2 Scrivere un programma che svolga le seguenti operazioni:
a. simula una successione di lanci di moneta (Testa o Croce); b. continua a generare lanci di moneta fino a che la condizione di terminazione e' verificata; c. la condizione di terminazione e' la seguente: la sequenza generata contiene almeno 5 esiti uguali consecutivi (es: 5 volte Testa, o 5 volte Croce) d. il programma deve restituire il numero di lanci di moneta che sono stati necessari per verificare la condizione di terminazione (http://wwwold.iit.cnr.it/staff/paolo.santi/LabC/random.htm)


Scaricare ppt "Generazione di numeri casuali in Dev C++"

Presentazioni simili


Annunci Google