Guest User

pigreco.c

a guest
Oct 23rd, 2011
172
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.88 KB | None | 0 0
  1. /*
  2. Esercizio 3
  3. Calcolare il valore di pi-greco come somma dei termini
  4. 4, - 4/3, + 4/5, - 4/7, + 4/9, - 4/11, + ... ,
  5. il cui termine i-mo si ottiene dal precedente aggiungendo 4./(2.*i +1) per i pari e
  6. sottraendo 4./(2.*i +1) per i dispari. Utilizzare il seguente algoritmo:
  7. pi ← 0.; i←0;
  8. while (i<numTermini)
  9. { if (i è pari) somma a pi il valore 4./(2.*i +1);
  10. else sottrai da pi il valore 4./(2.*i +1);
  11. i=i+1; }
  12. In particolare verificare quale valore di p-greco si ottiene con 1000 e 10000 termini e
  13. quanti termini è necessario sommare per ottenere il valore approssimato 3.141592
  14.  
  15. */
  16.  
  17. #include <stdio.h>
  18. #include <stdlib.h>
  19.  
  20. #define VALUE_CALC(i) 4.00000/(2.00000*i+1);
  21.  
  22. double pi_value( int );
  23. int term_pi( void );
  24.  
  25. int main()
  26. {
  27.   int term = 0;
  28.   double pi = 0.0;
  29.    
  30.     /*
  31.   printf("Inserisci il numero di termini che si desidera valutare per poter effettuare il calcolo del pigreco:\n");
  32.   scanf("%d", &term);
  33.  
  34.   pi = pi_value(term);
  35.  
  36.   printf("Il termine %d-esimo del pigreco è uguale %f\n", term, pi);
  37.   */
  38.   printf("Il valore del pi greco corretto 3.141592 lo si ottiene dopo %d termini!!\n", term_pi());
  39.    
  40.     #ifdef _WIN32
  41.         system("PAUSE");
  42.     #endif
  43.   return EXIT_SUCCESS;
  44. }
  45.  
  46. int term_pi( void )
  47. {
  48.     double pi = 0.0;
  49.     const double PIGRECO = 3.141592;
  50.     int i = 0;
  51.     int n_term = 0;
  52.    
  53.     while ( pi <= PIGRECO + 0.000001 && PIGRECO <= pi + 0.000001 )
  54.         {
  55.             if ( ( i % 2 ) == 0 )
  56.             {
  57.                 pi += VALUE_CALC(i);
  58.             }    
  59.             else
  60.             {
  61.                 pi -= VALUE_CALC(i);
  62.             }
  63.             i++;
  64.             n_term++;    
  65.         }    
  66.    
  67.     return n_term;
  68. }
  69. double pi_value( int term )
  70. {
  71.   double pi = 0.0;
  72.   int i = 0;
  73.  
  74.   while ( i < term  )
  75.     {
  76.       if ( ( i % 2 ) == 0 )
  77.     {
  78.       pi += VALUE_CALC(i);
  79.     }
  80.       else
  81.     {
  82.       pi -= VALUE_CALC(i);
  83.     }
  84.       i++;
  85.      
  86.     }
  87.  
  88.   return pi;
  89. }
Advertisement
Add Comment
Please, Sign In to add comment