Hinamarth

Gravity

Feb 25th, 2012
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.95 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4.  
  5. #define pi 3.141592654
  6. #define m 9.806
  7.  
  8. void g_k( double[], double );
  9.  
  10. double percentuale( double[], double, double);
  11.  
  12. void g_k( double gk[], double s ){
  13.   int i;
  14.   double p1, p2, g1;
  15.   gk[0]=s;
  16.   for(i=1; i<101; i++){
  17.     p1=((double)lrand48()+1.)/(RAND_MAX+2.);
  18.     p2=((double)lrand48()+1.)/(RAND_MAX+2.);
  19.     gk[i]=(sqrt(-2*log(p1)*fabs(sin(2*pi*p2))))*s+m;
  20.   }
  21. }
  22.  
  23. double percentuale( double gk[], double s1, double s2 ){
  24.   int i;
  25.   double j=0., x, y;
  26.   if(s1>=s2){
  27.     y=s1;
  28.     x=s2;
  29.   }
  30.   else{
  31.     y=s2;
  32.     x=s1;
  33.   }
  34.   for(i=1; i<101; i++){
  35.     if(gk[i]>=(m+x) && gk[i]<=(m+y)){
  36.       j++;
  37.     }
  38.   }
  39.   return j/100.;
  40. }
  41.  
  42. main(){
  43.   int i;
  44.   double s, s1, s2, gk[101]={0}, percent;
  45.   FILE *fp;
  46.   srand48(time(0));
  47.   printf("Il programma simula la misurazione dell'accelerazione di gravità g assumendo che la misura segua la probabilità gaussiana, e chiamando con m la media e con s la varianza.\n");
  48.   printf("Inserisci quindi la deviazione standard che deve essere compresa tra 0 e 1. \ns = ");
  49.   scanf("%lf", &s);
  50.   while(s<=0 || s>=1){
  51.     printf("Il valore immesso è errato! Reinseriscilo. \ns = ");
  52.     scanf("%lf", &s);
  53.   }
  54.   if((fp=fopen("g.dat", "w"))==NULL){
  55.     printf("Errore nell'apertura del file g.dat.\n");
  56.     exit(EXIT_FAILURE);
  57.   }
  58.   g_k( gk, s );
  59.   for(i=1; i<101; i++){
  60.     fprintf(fp, "%d - %lf\n", i, gk[i]);
  61.   }
  62.   printf("Inserisci ora due numeri s1 e s2 compresi tra 0 e 1.\ns1 = ");
  63.   scanf("%lf", &s1);
  64.   while(s1<=0 || s1>=1){
  65.     printf("Il valore immesso è errato! Reinseriscilo. \ns1 = ");
  66.     scanf("%lf", &s1);
  67.   }
  68.   printf("s2 = ");
  69.   scanf("%lf", &s2);
  70.   while(s2<=0 || s2>=1){
  71.     printf("Il valore immesso è errato! Reinseriscilo. \ns2 = ");
  72.     scanf("%lf", &s2);
  73.   }
  74.   percent=percentuale( gk, s1, s2 );
  75.   printf("La percentuale di misure comprese tra 9.806 + %lf e 9.806 + %lf è di :\n %lf \n", s1, s2, percent);
  76. }
Advertisement
Add Comment
Please, Sign In to add comment