/* FILE: sumDadi.cpp last change: 21-Mar-2001 author: Vescovi Michele * Simula il lancio ripetuto di 2 dadi. * Input: seme per generatore casuale (intero) e numero lanci (intero) * Output: una stima approssimata ed in probabilita` (metodo Montecarlo) * delle probabilita` di eventi del tipo SOMMA FACCE = i. */ #include #include #include #include const int numFacce = 2; // I nostri dadi hanno 2 facce const int numDadi = 100; // Prove lancio di 100 dadi //const int numFacce = 6; // I nostri dadi hanno 6 facce //const int numDadi = 2; // Prove lancio di 2 dadi const int numValoriSomma = (numFacce-1)*numDadi+1; // Prove lancio di 2 dadi int LanciaDado(int FacceDado) { return (1+(int)((rand()/(double)RAND_MAX) * FacceDado)); } int descriptionLength(int n) { strstream ss; ss << n; return strlen(ss.str()); } void main() { int seme; // per inizializzare la sequenza di numeri pseudocasuali cout << "\nInserire il seme per il generatore di numeri casuali: "; cin >> seme; srand(seme); int nprove; cout << "\nInserire il numero di prove: "; cin >> nprove; int occ_somma[numValoriSomma]; // quante volte occorre ogni valore di somma for (int i = 0; i < numValoriSomma; i++) occ_somma[i] = 0; for (int i = 0; i < nprove; i++) { int somma = 0; for (int dado = 1; dado < numDadi; dado++) somma += LanciaDado(numFacce); ++occ_somma[somma -numDadi]; } cout << "\n RISULTATI \n"; cout.width(descriptionLength(numDadi+numValoriSomma)); for (int i = 0; i < numValoriSomma; i++) { cout << "\nLa somma "; cout.width(descriptionLength(numDadi+numValoriSomma)); cout << i+numDadi << " e' stata ottenuta "; cout.width(descriptionLength(nprove)); cout << occ_somma[i] << " volte." << " (probabilita' " << occ_somma[i]/(double)nprove << ")"; } cout << "\n"; }