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
    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. 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é...
      2. oups! ccm81 a raison, c'est pi au carré et non pas pi
      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.
    2. Bonjour

      http://www.commentcamarche.net/faq/10925-demander-de-l-aide-pour-vos-exercices-sur-ccm
      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.
        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. 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; ?
            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. 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. 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. 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. 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.