Programme en C pour calculer pi

Cricritos Messages postés 1 Statut Membre -  
Pacorabanix Messages postés 4122 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
Je fait appel a la générosité collective car j'ai un problème avec mon programme en C.
Je dois calculer la valeur de pi en utilisant la formule suivante : pi=(4*(1-(1/3)+(1/5)-(1/7)+(1/9)-(1/11)+.....)
Puis ensuite je dois afficher le résultat a plusieurs degrés différents . Voila le code auquel je parviens mais le problème est que le résultat est toujours 4 car la partie (1-(1/3)+(1/5)-(1/7)+(1/9)-(1/11)+.....) prend toujours la valeur 1. Bref je pense que le problème est en rapport avec le type de variable mais je ne suis arrivé a rien .
Merci d'avance!

Voici le programme en question:

#include <stdio.h>
#include <stdlib.h>
#include<math.h>

int main()
{
double pi=0;
int m;
int signe=0;
double D=1.0;

for (m=1;m<=1000000;m++);

{
if (signe==0)
{
pi=pi+(1/D);

signe=1;
}

else
{
pi=pi-(1/D);

signe=0;
}
D=D+2;
}
pi=4*pi;
printf("A 10^-2 , pi vaut %.2lf\n",pi);
printf("A 10^-3 , pi vaut %.3lf\n",pi);
printf("A 10^-4 , pi vaut %.4lf\n",pi);
printf("A 10^-5 , pi vaut %.5lf\n",pi);
printf("A 10^-6 , pi vaut %.6lf\n",pi);

system("pause");
return 0;
}

1 réponse

  1. Pacorabanix Messages postés 4122 Date d'inscription   Statut Membre Dernière intervention   663
     
    for (m=1;m<=1000000;m++);
    

    cette boucle ne fait rien !!!

    elle est déjà terminée...

    le bloc que tu mets ensuite entre accolades n'est exécuté qu'une fois ;)

    il ne faut pas mettre de ";" après le for !!!

    sinon là c'est comme si tu faisais :
    for (m=1; m<=1000000;m++) {
       ; // le corps du for est vide !!!
    }
    
    {
      //le reste de ton code que tu as mis entre accolade après le for
    }


    ensuite pour l'affichage des étapes, ton printf devrait être dans la boucle pour que tu puisses suivre les étapes...

    dans le bloc for il faudrait rajouter qqchose comme :

    switch(m) {
    case 10:
    //à la dixième étape
    break;
    case 100:
    // à la 100ème étape
    break;
    etc...
    }
    0