#include #include #include #include #define MAX_N 3000 #define MAX_SIMUL 10 int Crossing(double, double, double); void MeanAndWriteOnFile(double data[]); main(){ double l,t; int n; double x, theta; int i,Nlancio,Success,Nsimul; double PiEstimate[MAX_SIMUL]; int seed; seed=time(0); srand48(seed); printf("Inserire il numero totale di lanci, n. n deve essere minore di 3000\n"); do{ scanf("%d",&n); if(n >= MAX_N)printf("\nIl numero inserito e' troppo grande, ripetere inserimento\n"); if(n <=0)printf("\nIl numero di lanci deve essere positivo, ripetere inserimento\n"); }while(n <= 0 || n>= MAX_N); for(Nsimul=0;Nsimul=3.)printf("\nIl numero inserito e' troppo grande, ripetere inserimento\n"); if(l<=0)printf("\nLa lunghezza deve essere positiva, ripetere inserimento\n"); }while(l<=0. || l>=3.); printf("\nInserire la distanza fra le linee parallele, t. t deve essere maggiore di l\n"); do{ scanf("%lf",&t); if(t<=l)printf("\nIl numero inserito e' troppo piccolo, ripetere inserimento\n"); if(t<=0)printf("\nLa distanza deve essere positiva, ripetere inserimento\n"); }while(t<=0. || t<=l); Success=0; for(Nlancio=1;Nlancio<=n;Nlancio++){ x=0.5*t*(double)lrand48()/RAND_MAX; theta=0.5*M_PI*(double)lrand48()/RAND_MAX; Success+=Crossing(x,theta,l); } PiEstimate[Nsimul]=2.*l*n/(t*Success); printf("Il valore di Pi stimato alla simulazione numero %d e' %lf \n ",Nsimul+1,PiEstimate[Nsimul]); } MeanAndWriteOnFile(PiEstimate); } int Crossing(double x, double theta, double l){ if(x<=0.5*l*sin(theta)){ return 1; }else{ return 0; } } void MeanAndWriteOnFile(double data[]){ int i; double MeanPi=0.; FILE *pfile; for(i=0;i