/*Soluzione Esercizio calcolo del Pi Greco col metodo Monte Carlo*/ #include #include #include #include main(){ int i,nmax,seed,counter,k; double truepi,estimatepi,R,R2,x,y,delta; truepi=4*atan(1.0); printf("CALCOLO DEL PIGRECO (o dell'area del cerchio) CON IL METODO MONTE CARLO HIT OR MISS \n"); printf("Inserisci numero di iterazioni \n"); scanf("%i",&nmax); while(nmax<=0){ printf("Errore, reinserisci un numero strettamente positivo di iterazioni \n"); scanf("%i",&nmax); } printf("Inserisci Raggio cerchio \n"); scanf("%lf",&R); while(R<=0){ printf("Errore, reinserisci un raggio strettamente positivo \n"); scanf("%lf",&R); } /*Qualche inizializzazione*/ R2=R*R; seed = time(0); srand48(seed); counter=0; /*Itero*/ for (i=1;i<=nmax;i++){ x=(double)lrand48()/RAND_MAX*2*R-R; y=(double)lrand48()/RAND_MAX*2*R-R; if (x*x+y*y<=R2) counter++; } /*Stampo il risultato finale*/ estimatepi=(double)counter*4./(nmax); delta=fabs(estimatepi-truepi); printf("# iterazioni: %i Stima Pi:%20.10lf Deviazione dal valore noto:%20.10lf \n",nmax,estimatepi,delta); printf("# iterazioni: %i Stima Area:%20.10lf Deviazione dal valore noto:%20.10lf \n",nmax,estimatepi*R2,delta*R2); exit(0); }