IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Calcul de pi avec la formule newton


Sujet :

C++

  1. #1
    Futur Membre du Club
    Inscrit en
    Novembre 2008
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 11
    Points : 6
    Points
    6
    Par défaut Calcul de pi avec la formule newton
    Bonjour,
    je dois faire ce programme en ayant la formule pi/6=1/2 + 1/2*3*(1/2)^3 + 1*3/2*4*5 *(1/2)^5+ 1*3*5/2*4*6*7 *(1/2)^7...
    et nous terminons quand le dernier element <0.000000000000001
    jai essaye avec ce programme ,mais ca me donne rien , si quelqu'un peut m aider ... svp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    int main()
    {
    int  a,b,n,j,i,div,resto;
    long long double p, y,pi,suma,x,;
    p=1;
    suma=0;
    cout<<"entra n"<<endl;
    cin>>n;
    y=1/2;
    do
      {
          for(i=0;i<n;i++)
      {  
       a=2*i+1;
       b=2*i+2;
       x=(a/b);
       p=p*x;
       for (j=0; j<(2*n+1);j++)
        {y=y*(1/2);}
     
       p=p*(1/(2*n+1))*y;
      suma=suma+p ;   
     
    }  }
       while (p>=0.000000000000001);
       cout<<"x"<<x<<endl;
       cout<<"p"<<p<<endl;
       cout<<"suma"<<suma<<endl;
     system("pause");
    return 0;
    }

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 53
    Points : 86
    Points
    86
    Par défaut
    Si je dis pas te connerie, il me semble que le compilateur effectue l'opération et ensuite le "cast"
    Solutions:
    -changer le type de a (et b)
    x= ((long long double) a)/b (mettre à la sauce c++ :static_cast)


    Comme ca pour toute les opérations ou tu effectué des divisions sur les entiers.

  3. #3
    Futur Membre du Club
    Inscrit en
    Novembre 2008
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    ca donne tjrs rien, jai que des zerocomme resultats

  4. #4
    Futur Membre du Club
    Inscrit en
    Novembre 2008
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    j ai rectifie le programme ou plutot je l ai refais , celui ci est plus logique mais jarrive pas a detecter l erreur svp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    /* Este programa calcula pi */
    #include <iostream>
    using namespace std;
    #include <stdlib.h>
    int main (void)
    {
    int t;
    long long double p,a,b, suma,x,dif;
     
    p=1/2;// el valor de terminos 
    suma=1/2;//suma de terminos
    t=2;//numero de termino
     
    do
      {
                 a=(2*t-3)*(2*t-3);
                 b=4*(2*t-2)*(2*t-1);
                 x=((long long double) a)/b;
      p=p*x;
      suma=suma+p;cout<<"x"<<x<<endl;
      t++ ;    }
       while (p>=0.000000000000001);
     
       cout<<"p"<<p<<endl;
       cout<<"suma"<<suma<<endl;
     system("pause");
    return 0;
    }

  5. #5
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 951
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 951
    Points : 5 671
    Points
    5 671
    Par défaut
    Hia,

    Il faut tenir compte des réponses déjà faites.

    Tu es encore dans le problème des divisions entières.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    p=1/2;// el valor de terminos 
    suma=1/2;//suma de terminos
    p et suma valent 0, c'est basique pour le langage, et, quand on a un problème, les moyens de vérifier ne manquent pas :
    - basique = afficher les valeurs des variables à chaque pas.
    - plus évolué = utiliser un débogueur

  6. #6
    Futur Membre du Club
    Inscrit en
    Novembre 2008
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    je ne peu pas faire somme=0 et p=0 dans ce cas , le p est un produit donc le 0 va tt annuler ,j ai besoin de definir p=1/2 ainsi , jobtiens le terme suivant en multipliant le premier terme ki est egal a 1/2 par la formule que j ai trouve . de meme pour la somme elle doit contenir la somme de tt les termes donc jai determine somme=1/2 ainsi vont sajouter les autre terme
    d ailleur jai mis t(le numero du terme)=2 car le premier terme est defini avant la boucle

  7. #7
    Membre expérimenté
    Avatar de coyotte507
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 327
    Points : 1 452
    Points
    1 452
    Par défaut
    Salut,

    ce qu'on t'as dit en fait c'est de mettre des nombres flottants à la place des entiers.

    Par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    p=1./2.;// el valor de terminos 
    suma=1./2.;//suma de terminos
    Ou encore:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    p=0.5// el valor de terminos 
    suma=0.5;//suma de terminos
    ou encore:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    p=double(1)/2;// el valor de terminos 
    suma=double(1)/2;//suma de terminos
    Sinon, si tu ne fais pas ça, ta variable p vaudra double(int(1)/int(2)) = double(0) = 0. car int(1)/int(2) = 0.

  8. #8
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 951
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 951
    Points : 5 671
    Points
    5 671
    Par défaut
    Kao,
    Citation Envoyé par einsteina Voir le message
    je ne peu pas faire somme=0 et p=0 dans ce cas , le p est un produit donc le 0 va tt annuler ,j ai besoin de definir p=1/2 ainsi , jobtiens le terme suivant en multipliant le premier terme ki est egal a 1/2 par la formule que j ai trouve . de meme pour la somme elle doit contenir la somme de tt les termes donc jai determine somme=1/2 ainsi vont sajouter les autre terme
    d ailleur jai mis t(le numero du terme)=2 car le premier terme est defini avant la boucle
    Si tu ne lis pas les réponses, tu n'en auras plus beaucoup.

  9. #9
    Futur Membre du Club
    Inscrit en
    Novembre 2008
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    d accord tout le monde , je vous remercie
    ca a marche
    je lisais pas vos message car kan je clik sur le lienn dans mes favori , je tombe sur la page non actualisee
    ciao

Discussions similaires

  1. [XL-2003] Calcul de moyenne avec des colonnes contenant des formules
    Par filsdepub dans le forum Excel
    Réponses: 20
    Dernier message: 03/08/2012, 17h36
  2. table croisé avec different formule de calcul
    Par elkhansa dans le forum QlikView
    Réponses: 15
    Dernier message: 19/08/2011, 18h31
  3. Calcul avec date - formule à modifier
    Par Weiyin dans le forum Excel
    Réponses: 1
    Dernier message: 21/06/2009, 17h22
  4. Réponses: 2
    Dernier message: 24/05/2008, 22h54
  5. formule de calcul du TRI avec PL/SQL
    Par mongilotti dans le forum Algorithmes et structures de données
    Réponses: 15
    Dernier message: 30/07/2005, 21h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo