1 / 12

Generazione di numeri casuali in Dev C++

Generazione di numeri casuali in Dev C++. a.s. 2010/11. 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

betha
Download Presentation

Generazione di numeri casuali in Dev C++

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Generazione di numeri casuali in Dev C++ a.s. 2010/11

  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)

  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)

  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 unsignedint), 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” http://www.pierotofy.it/pages/guide_tutorials/C/Generazione_di_numeri_casuali/ PS “I wrote a program for calculating current date and time using function time(NULL). I read this function contains total seconds from 1970.01.01 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. 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). “Usingsrand(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 1970.01.01 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)

More Related