Programme pascal calcul pi????

Bonjour,
qcq un peut me donner la solution de cette exercice
ecrire bprg pascal qui permet de calculer une valeur approchée de pi

pi=6+6/22+6/32+6/42+..............................+6/n2
le calcul s'arrte lorsque la difference entre deux termes succesives devient < .0.0001

14 réponses

  1. bonjour

    1. au passage cette série due à Euler, approche pi² et non pi
    pi² = 6(1+1/2²+1/3²+......)

    2. pour qu'on puisse t'aider, et non faire le pb à ta place, tu devrais nous montrer où tu en es (un algorithme par exemple) de tes réflexions

    bonne suite
    4
    1. merci enormement ccm81
      0
      1. voilà, c'est OK pour obtenir pi² en sortie

        bonne suite
        1
        1. merci bcp
          en principe c'est bon

          program calcul;
          uses wincrt;
          var
          pi:real;

          function calc:real;
          var
          xpre ,x:real;
          i:integer;
          begin
          x:=0;
          i:=1;
          repeat
          xpre:=x;
          x:=xpre+6/sqr(i);
          i:=i+1;
          until (abs(x-xpre)<0.001);
          calc:=x;
          end;
          begin

          pi:=calc;
          write('la valeur de pi au carré est ',pi);
          end.
          1
          1. re

            il reste quelques erreurs
            1. mauvaise gestion des deux variables x et xprec (dans l'ordre)
            - au depart x initialisé à 0
            - dès l'entrée dans la boucle xprec = x
            - calcul de la nouvelle valeur de x
            - maj de i
            2. calc renvoie pi² donc la le programme principal pi = racine(pi²)

            RQ1. le type longint pour i me parait plus adapté (le type integer s'arrête à 32767)

            bonne suite
            1
            1. merci ca devient coome ca la solution???

              program calcul;
              uses wincrt;
              var
              xpre,pi:real;

              function calc:real;
              var
              xpre ,x:real;
              i:integer;
              begin
              xpre:=6;

              i:=1;
              repeat
              x:=xpre+6/sqr(i);
              xpre:=x;
              i:=i+1;
              until (abs(x-xpre)<0.0001);
              calc:=x;
              end;
              begin

              pi:=calc;
              write('la valeur est ',pi);
              end.
              1
              1. re

                RQ1. la fonction carré est sqr et non sqrt (racine carrée)
                RQ2. tiens compte des remarques de le père,
                - quand tu fais ton test abs(x-xpre)<0.0001, comme dès le premier tour de boucle on a, x=xpre .....
                - xpre := 6 n'a rien à faire dans le programme principal
                RQ3. le résultat de la fonction calc n'est jamais renvoyé, ça se fait avant le end; de la fonction calc, avec calc := xpre
                RQ4. quand tu as écrit un algorithme, fais un tableau de suivi des variables et des tests, histoire de voir comment évolue ton programme

                bonne suite
                1
                1. helpppppppppppppppp !!!!!
                  1
                  1. j'ai initialisé xpre:=6 car c la valeur du premier terme de l'expression est 6
                    puis xpre prend la nouvelle somme obtenue qui est x
                    cest juste une idée
                    si possible solution et merci d'avance
                    1
                    1. C'est bien de penser à initialiser xpre dans la fonction. Mais est ce-bien la bonne valeur ?

                      Et à quoi sert la variable xpre en dehors de la fonction ?

                      Et à quoi sert la remarque que je t'ai faite dans mon message précédent ? Tu n'en as tenu aucun compte. Combien vaut x-xpre après avoir exécuté la ligne xpre:=x; ?
                      0
                      1. merci le pere
                        voila de nouveau
                        program calcul;
                        uses wincrt;
                        var
                        xpre,pi:real;

                        function calc:real;
                        var
                        xpre ,x:real;
                        i:integer;
                        begin
                        xpre:=6;

                        i:=1;
                        repeat
                        x:=xpre+6/sqrt(i);
                        xpre:=x;
                        i:=i+1;
                        until (abs(x-xpre)<0.0001);
                        end;
                        begin

                        xpre:=6;
                        pi:=calc;
                        write('la valeur est ',pi);
                        end.
                        1
                        1. Vérifie l'ordre de tes instructions : tel que tu as écrit ton programme, en fin de boucle, xpre est toujours égal à x, donc x-xpre vaut toujours 0...
                          Tu as juste deux lignes à inverser. je te laisse réfléchir.
                          0
                          1. Bonjour

                            http://www.commentcamarche.net/faq/10925-demander-de-l-aide-pour-vos-exercices-sur-ccm
                            1
                            1. je sait pas exactement ce que tu veut faire mais pi est égal à 4 fois l'arc tangente de 1 (En vb ça s'écrit pi=4*atn(1))
                              1
                              1. Bonjour

                                La formule de enseignant2012 (qui est sûrement un élève et pas un enseignant, ruse grossière...) est exacte aussi, à condition de lire 22,32,42,n2 comme 2 au carré, 3 au carré, 4 au carré, n au carré...
                                0
                              2. oups! ccm81 a raison, c'est pi au carré et non pas pi
                                0
                              3. desolé pour la faute oui ce ca:

                                valeur approche de pi² et non pi
                                pi² = 6(1+1/2²+1/3²+......)
                                voila ma solution
                                program calcul;
                                uses wincrt;
                                var
                                xpre,pi:real;

                                function calc:real;
                                var
                                xpre ,x:real;
                                i:integer;
                                begin

                                i:=1;
                                repeat
                                x:=xpre+6/sqrt(i);
                                xpre:=x;
                                i:=i+1;
                                until (abs(x-xpre)<0.0001);
                                end;
                                begin

                                xpre:=6;
                                pi:=calc;
                                write('la valeur est ',pi);
                                end.
                                0