# include # include # include # include using namespace std; int main() { int i, nAgujas, nExperimentos, experimento,lanzamiento; double longitudAguja, separacion, cuenta, cuentaSi, x, theta, prob, probMatem; char repetir; int seed = time(NULL); srand (seed); do { do { cout << "Longitud de la aguja (debe ser > 0): "; cin >> longitudAguja; } while (longitudAguja <= 0); do { cout << "Separacion entre lineas: (debe ser > " << longitudAguja << " ): "; cin >> separacion; } while (separacion <= longitudAguja); do { cout << "Numero de agujas (debe ser > 0): "; cin >> nAgujas; } while (nAgujas <= 0); do { cout << "Numero de experimentos (debe ser > 0): "; cin >> nExperimentos; } while (nExperimentos <= 0); probMatem = 2*longitudAguja/M_PI/separacion; for (experimento=0; experimento < nExperimentos; experimento ++, nAgujas *= 2) { cuentaSi=0; for (lanzamiento=0; lanzamiento < nAgujas; lanzamiento ++) { x = separacion * rand()/RAND_MAX; theta = M_PI * rand()/RAND_MAX - M_PI_2; if ( x == 0 || x + longitudAguja*cos(theta) >= separacion) cuentaSi ++; } prob = cuentaSi/nAgujas; cout << endl << "Experimento: " << (experimento+1) << endl; cout << "\tNumero de agujas: " << nAgujas << endl; cout << "\tProbabilidad matematica: " << 2*longitudAguja/M_PI/separacion << endl; cout << "\tProbabilidad segun el experimento: " << prob<< endl; cout << "\tDiferencia entre ambas: " << probMatem - prob << endl; cout << "\tAproximacion a pi: " << 2*longitudAguja/prob/separacion << endl ; } cout << endl << "Desea repetir ? "; cin >> repetir; } while (repetir == 's'); return 0; }