Résoudre equation avec pascal

bonjour
je suis entrain de faire un programme pascal qui resolue l'eaquation ax²+bx+c=0 .
j'ai fais un programme mais je coirs que ya une erreure puisque ca marche pas .

program equation ;
var Dleta ,a,b,c :real ;
begin
if a=0 then
if b=0 then
if c=0 then
writeln('il y a une infinité de solution')
else
writeln('pas de solution')
else
x1:=-c/b;
else
begin
Delta:=(b)-4*a*c;
if delta<0 then
writeln('Pas de solution réelles')
else
begin
x1=(-b-sqrt(delta))/(2*a);
x2=(-b+sqrt(delta))/(2*a);
end;
end;
end;
readln ;
end .

et merci .

15 réponses

Résumé de la discussion

Un programme Pascal destiné à résoudre l'équation ax^2+bx+c=0 présente des erreurs dans le calcul du discriminant et la gestion des cas lorsque a=0. Plusieurs contributions soulignent une correction essentielle du discriminant Delta := b*b - 4*a*c et rappellent que Pascal peut être sensible à la casse entre Delta et delta. Des échanges évoquent aussi le traitement des cas a=0 et b=0 et l'importance d'implémenter x1 et x2 uniquement lorsque Delta est non négatif, afin d'éviter des erreurs d'exécution. En outre, la discussion souligne que les réponses devraient inclure des messages d'erreur explicites et une prise en compte des cas particuliers, afin d'obtenir des résultats cohérents même sans solution réelle.

Bobot (l’IA à votre service)
  1. Avec Pascal c'est toujours difficile de résoudre quoi que ce soit. Il est bien trop vaniteux pour accepter les remarques.
    Oui, il va bien mon nouveau clavier.
    0
    1. bonjour,
      j'ai refais le programme mais j'ai pas les bonnes résultats

      program thhh ;
      var a,b,c,x1,x2,D : real ;
      begin
      writeln('donner les trois bornes ') ;
      readln (a,b,c) ;
      if a=0 then
      if b=0 then
      if c=0 then
      writeln ('R est la solution ')
      else
      writeln ('pas de solution')
      else
      writeln ('la solution est ',-c/b)
      else

      begin
      D:=b*b-(4*a*c) ;
      if D<0 then
      writeln ('pas de solution dans R')
      else
      if D=0 then
      writeln('ya une solution',-b/2*a :0:2 )
      else
      begin
      x1:=-b-sqrt (D) / 2*a ;
      x2:=-b+sqrt (D) / 2*a ;
      writeln ('les solutions ',x1,x2);
      end ;
      end;
      readln ;
      end .
      0
      1. voila j'ai refais le programme mais ca marche pas toujours

        program equation;
        var a,b,c,x1,x2,x0,Delta : real ;
        begin
        writeln ('donner les bornes de lequation ') ;
        writeln ('donner la valeur de a ') ;
        readln (a) ;
        writeln ('donner la valeur de b ') ;
        readln (b) ;
        writeln ('donner la valeur de c ') ;
        readln (c) ;

        if a =0 then
        writeln('erreur type')
        else
        begin
        if a =0 and b=0 then
        begin
        if c =0 then

        writeln (' infinite ')
        else
        writeln ('pas de solution')

        else
        begin
        Delta := b*b - (4 *a*c) ;
        if Delta <0 then
        writeln ('pas de solution')
        else
        begin
        if Delta = 0 then
        begin
        x0 := -b / (2*a) ;
        writeln (x0) ;
        end;
        end ;
        else
        begin
        x1 := (-b - sqrt (Delta)) / 2*a ;
        x2 := (-b + sqrt (Delta)) / 2*a ;
        writeln (x1 ,x2 ) ;
        end;

        end;
        end;
        end;

        readln;
        end .
        0
        1. je comprends toujours pas
          0
        2. Modérateur
          Qu'est-ce que tu ne comprends pas ??
          0
        3. je comprends pas ce que je dois changer dans le programme pour que ca marche
          0
        4. Modérateur
          As ton avis ? Qu'est-ce qui manque ? :)
          0
      2. PROGRAM Equation_de_2eme (input,output);
        VAR A,B,C,D,E,F,G,R,x,x1,x2:real;
        Begin
        writeln('');
        writeln(' -| La Structure De Cette Equation Est : ( A*(X*X) + B*X + C ) |-');
        write(' Donnez La valeur de A ');
        read(A);
        write(' Donnez La valeur de B ');
        read(B);
        write(' Donnez La valeur de C ');
        read(C);
        writeln('');
        if (A=0) then write(' Pas De Solution ! / A=0 / ');
        D:=(B*B)-(4*A*C);
        if (D<0) then write(' Pas De Solution / Delta est Negatif ! / ');
        E:=2*A;
        F:=-B;
        R:=sqrt(D);
        G:=-R;
        x:=F/E;
        x1:=F-G/E;
        x2:=F+R/E;
        if (D>0) then
        writeln(' Les Resultats Sont x1 = ',x1,' x2 = ',x2)
        else
        writeln(' Le Resultat De X est : ',x);
        writeln('');
        writeln('');
        writeln(' Les different calcules sont :');
        writeln(' Le Resultat De Delta est : ',D);
        write(' Le Resultat De Racine de Delta est : ',R);
        readln ;
        end.

        j'ai recu un aide avec ce programme mais ca marche pas encore .
        "error 207 : invalid floating point operation ".
        0
        1. Modérateur
          Il manque le cas a = 0 mais b et c différents de zéro.
          Et le cas b=0, mais a et c non nuls, puis selon le signe de a et c, tu auras soit des solutions réelles soit complexes, ça dépend de ce que tu souhaites ...

          Pour x1 et x2, tu as oublié ce coup si la racine pour delta.

          Et pour le cas delta négatif, il y a soit pas de solutions si tu veux que des solutions réelles, soit deux racines complexes, si tu veux des solutions qui appartiennent aux complexes.

          Je crois qu'on a rien oublié ...
          0
          1. Les cas a=0 ... ou b=0...dont tu parles sont traités déja ils sont inclus dans les conditions sur delta!!!!!
            0
          2. Modérateur
            Salut,

            Rien à voir ...

            ++
            0
          3. ça rien à voir , xpliq
            0
          4. Modérateur
            1) J'ai déjà donné les grandes lignes ici :

            https://forums.commentcamarche.net/forum/affich-17537965-resoudre-equation-avec-pascal#12

            Il faut traiter tous les cas sinon le programme ne fonctionnera que partiellement ...
            De plus, il n'a pas précisé s'il travaillait dans les réelles ou les complexes ...

            Ici :

            write(' Donnez La valeur de A ');
            read(A);
            write(' Donnez La valeur de B ');
            read(B);
            write(' Donnez La valeur de C '); 
            


            Apparemment, il fait saisir par l'utilisateur les valeurs des coeffs, si je mets a et c différents de zéro, mais b nul, si a et b sont de même signe, selon que l'on soit des les réelles ou les complexes il y a soit une solution, soit pas de solution etc ...
            Tu vois ici que delta ne rentre pas en compte ...

            2) D'autre part lui demander son adresse mail pour lui envoyer un corrigé, ça ne s'appelle pas lui rendre service ! ...

            @+
            0
          5. ok compris et je m'excuse pr le geste un peu déplacé , mais neanmoins je penses que pr un débutant en programmation Pascal, le programme de résolution des équations en pascal est un classique et en generale ne concerne que le cas des coefficients réels. Une fois de plus je m'excuse pr le geste déplacé pr le corrigé.
            0
        2. program equation ;
          var Delta ,a,b,c,x1,x2 :real ;
          begin
          readln (a,b,c);
          if a=0 then
          if b=0 then
          if c=0 then
          writeln('il y a une infinité de solution')
          else
          writeln('pas de solution')
          else

          begin
          Delta:=b*b-4*a*c;
          if Delta<0 then
          writeln('Pas de solution réelles')
          else
          if Delta > 0 then
          begin
          x1=(-b-(Delta))/(2*a);
          x2=(-b+(Delta))/(2*a);
          if Delta = 0
          x1 :=-b div 2a
          writeln (x1)
          end;
          end;
          end;
          readln ;
          end .
          0
          1. Si celà marches tant mieux mais j'aurai préféré que tu utilises un AND au lieu des 3 if du debut
            0
        3. Voici un macro code
          begin
          readln(a,b,c);
          if a=0 AND b=0 AND c=0 then
          begin
          writeln('Infinite de solutions');
          end;
          else
          begin
          calculer delta;
          if delta < 0 then
          begin
          writeln('Pas de solutions');
          end;
          else if delta >0 then
          begin
          calculer les deux racines;
          writeln ('L"equation admet 2 solutions qui sont 'x1 'et' x2 '.');
          end;
          else if delta=0 then
          begin
          calculer x0;
          writeln('Solution double ');
          et afficher la solution double;
          end;
          end;
          end .

          Là , tu complete avec les declarations de variables et les calculs des racines ainsi que les affichages ...
          0
          1. Modérateur
            ça correspond à quoi :

            x1:=-c/b; 


            ??
            0
            1. voila j'ai changer les "delta " mais ca marche toujours pas .
              le message d'erreur est "error in statement " .

              program equation ;
              var Delta ,a,b,c,x1,x2 :real ;
              begin
              readln (a,b,c);
              if a=0 then
              if b=0 then
              if c=0 then
              writeln('il y a une infinité de solution')
              else
              writeln('pas de solution')
              else ============================== l'erreur est ici suite à pascal
              x1:=-c/b;
              else
              begin
              Delta:=b*b-4*a*c;
              if Delta<0 then
              writeln('Pas de solution réelles')
              else
              begin
              x1=(-b-(Delta))/(2*a);
              x2=(-b+(Delta))/(2*a);
              end;
              end;
              end;
              readln ;
              end .
              0
              1. Je crois (mais plus très sûr) que le Pascal est sensible à la casse donc là tu as utilisé des noms de variables differents au niveau de Delta et delta (c pas la mem chose) donc essaie de modifier cela et tu nous donnes les resultats. Quant au fait que tu aie traité seulement certains cas , je penses pas que cela puisse être la cause de tes problèmes .La prochaine fois s'il ya erreur envoie nous le msg d'erreur qui apparait et on pourra mieux t'aider
                0
                1. on viens de commencer pascal ,et chui pas bien avec , pour les cas de Delta ya
                  delta supérieur à 0
                  delta inférieur à 0
                  delta = 0

                  et si a ou B = 0 ya pas de solution

                  le principe de travail et là ,mais pour ecrire le programme je sais pas bien utiliser "if xxx then " .
                  si vous pouvez bien m'aidez pour terminer mon programme .
                  et merci
                  0
                  1. Modérateur
                    Re,

                    Déjà je comprends pas bien pourquoi tu n'as traité que le cas delta négatif ??

                    Il y a aussi le cas delta nul => racine double
                    Et le cas delta strictement positif => deux racines réelles

                    Tu as aussi le cas où le coefficient a nul, ce qui te ramène à la résolution d'une équation linéaire etc ...

                    Ton programme n'est pas fini !

                    @+
                    0
                    1. j'ai changer des trucs mais ca marche pas toujours

                      program equation ;
                      var Delta ,a,b,c,x1,x2 :real ;
                      begin
                      readln (a,b,c);
                      if a=0 then
                      if b=0 then
                      if c=0 then
                      writeln('il y a une infinité de solution')
                      else
                      writeln('pas de solution')
                      else
                      x1:=-c div b;
                      else
                      begin
                      Delta:=b*b-4*a*c;
                      if delta<0 then
                      writeln('Pas de solution réelles')
                      else
                      begin
                      x1=(-b-(delta)) div (2*a);
                      x2=(-b+(delta)) div (2*a);
                      end;
                      end;
                      end;
                      readln ;
                      end .
                      0
                      1. Commences par revoir la valeur de delta ça devrait être b*b-4*a*c
                        0
                        1. Modérateur
                          Salut,

                          Je ne connais pas la programmation en pascal, mais j'ai repérai une erreur dans ton code au niveau du discriminant :

                          Delta:=(b)-4*a*c;


                          b est au carré !

                          Ce qui donne :

                          Delta:=(b*b)-4*a*c; 


                          Je sais pas si ça résoudra ton soucis, mais ça fera peut être avancer le smilbrlik :)

                          @+
                          1