Résoudre equation avec pascal

ayoubitou Messages postés 148 Statut Membre -  
 Pascalinettissimo -
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

  1. green day Messages postés 26374 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   2 166
     
    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
  2. tksteph Messages postés 208 Date d'inscription   Statut Membre Dernière intervention   25
     
    Commences par revoir la valeur de delta ça devrait être b*b-4*a*c
    0
  3. ayoubitou Messages postés 148 Statut Membre 5
     
    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
  4. green day Messages postés 26374 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   2 166
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. ayoubitou Messages postés 148 Statut Membre 5
     
    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
  7. tksteph Messages postés 208 Date d'inscription   Statut Membre Dernière intervention   25
     
    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
  8. ayoubitou Messages postés 148 Statut Membre 5
     
    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
  9. green day Messages postés 26374 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   2 166
     
    ça correspond à quoi :

    x1:=-c/b; 


    ??
    0
  10. tksteph Messages postés 208 Date d'inscription   Statut Membre Dernière intervention   25
     
    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
  11. ayoubitou Messages postés 148 Statut Membre 5
     
    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. tksteph Messages postés 208 Date d'inscription   Statut Membre Dernière intervention   25
       
      Si celà marches tant mieux mais j'aurai préféré que tu utilises un AND au lieu des 3 if du debut
      0
  12. green day Messages postés 26374 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   2 166
     
    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. tksteph Messages postés 208 Date d'inscription   Statut Membre Dernière intervention   25
       
      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. green day Messages postés 26374 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   2 166
       
      Salut,

      Rien à voir ...

      ++
      0
    3. tksteph Messages postés 208 Date d'inscription   Statut Membre Dernière intervention   25
       
      ça rien à voir , xpliq
      0
    4. green day Messages postés 26374 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   2 166
       
      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. tksteph Messages postés 208 Date d'inscription   Statut Membre Dernière intervention   25
       
      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
  13. ayoubitou Messages postés 148 Statut Membre 5
     
    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
  14. ayoubitou Messages postés 148 Statut Membre 5
     
    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. green day Messages postés 26374 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   2 166
       
      voila j'ai refais le programme mais ca marche pas toujours

      Non ! C'est vrai ...

      Je t'ai déjà pas mal défriché le problème ici :

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


      if a =0 then
      writeln('erreur type')


      Il n'y a aucune raison de ne pas traiter le cas a=0, et de renvoyer un message d'erreur ...

      ...
      0
    2. ayoubitou Messages postés 148 Statut Membre 5
       
      je comprends toujours pas
      0
    3. green day Messages postés 26374 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   2 166
       
      Qu'est-ce que tu ne comprends pas ??
      0
    4. ayoubitou Messages postés 148 Statut Membre 5
       
      je comprends pas ce que je dois changer dans le programme pour que ca marche
      0
    5. green day Messages postés 26374 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   2 166
       
      As ton avis ? Qu'est-ce qui manque ? :)
      0
  15. ayoubitou
     
    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
  16. Pascalinettissimo
     
    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