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. 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
    1. Commences par revoir la valeur de delta ça devrait être b*b-4*a*c
      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. 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. 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. 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. 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. Modérateur
                  ça correspond à quoi :

                  x1:=-c/b; 


                  ??
                  0
                  1. 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. 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
                    2. 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
                    3. 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. 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. 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. 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