/* FILE: piGreco.cpp last change: 12-Mar-2001 * Calcoliamo l'area di un cerchio di raggio 1, ossia pi-graco, * utilizzando il metodo di Montecarlo. */ #include #include #define SQR(a) ((a)*(a)) // Definiamo con una macro l'elevamento // al quadrato di un numero long simulazione(long iter); // Prototipo della funzione main() { unsigned int seme; // Il seme per il generatore di numeri casuali cout << "Dammi il seme per il generatore di numeri casuali: "; cin >> seme; srand(seme); // Inizializza il generatore di numeri pseudocasuali long nlanci; // Il numero di lanci che dovremo effettuare cout << "Dammi il numero di lanci da effettuare: "; cin >> nlanci; // L'area e` data dal rapporto fra numero di punti cascati all'interno del // cerchio ed il numero di tentativi. cout << "L'area e`: " << ((double)simulazione(nlanci) / (double)nlanci * 4.0) << endl; } // La seguente funzione simula l'estrazione di iter punti nel piano cartesiano, e // ritorna quanti di questi sono caduti all'interno del cerchio. long simulazione(long iter) { long incerchio = 0; // Quanti punti finiscono all'interno del cerhio? while(iter--) { // Due estrazioni per la x e la y comprese fra -1 e 1. double xcoord = ((2.0 * (double)rand()) / (RAND_MAX + 1.0)) - 1.0; double ycoord = ((2.0 * (double)rand()) / (RAND_MAX + 1.0)) - 1.0; // E` all'interno del cerchio il punto estratto? if (SQR(xcoord) + SQR(ycoord) <= 1.0) incerchio++; } return(incerchio); }