Mon logiciel se referme tout seul ><

Résolu
Hadjer's Messages postés 12 Date d'inscription   Statut Membre Dernière intervention   -  
Hadjer's Messages postés 12 Date d'inscription   Statut Membre Dernière intervention   -
Salut !
Je débute en programmation et d'après un article que j'ai lu sur ce site même, il est conseillé de commencer par Pascal.
Eh bien voilà mon premier programme conçu pour résoudre une équation du deuxième degré ;

Program RESOLUTION  (input,output); 
Var 
A, B, C, D, x, m, n: Real; 
Begin 
Writeln ('Entrer A '); 
Readln (A); 
Writeln('Entrer B'); 
Readln (B); 
Writeln ('Entrer C'); 
Readln (C); 
D := B*B - (4*A*C); 
x := (-B)/(2*A); 
m := (-B-sqrt(D))/(2*A); 
n := (-B+sqrt(D))/(2*A); 
IF D=0 THEN Writeln ('La solution est',x) 
Else IF D<0 THEN writeln ('Il n"y a pas de solution') 
Else Writeln ('la premiere solution est:',m,'La deuxieme est',n); 
Readln; 
End. 


Jusque là y a rien de grave , le programme est correctement compilé , quand je propose des valeurs pour A , B et C tel que D est positif ça marche très bien , mais quand j'entre 3 valeur pour mes variables tel que Delta soit strictement inférieur à 0 mon petit bout de logiciel se referme tout seul au lieu d'afficher "Il n'ya pas de solution" .

Expliquez-moi s'il vous plait ce qui s'est passé ? et comment faire pour que ça marche ?

2 réponses

  1. Profil bloqué
     
    Quand le compilateur se retrouve devant une situation qu'il ne peut gerer, une exception est declenchée, (EInvalidOp dans ton cas), selon que les exceptions sont gerées par le debogueur ou à la charge du programmeur, dans le deuxième cas si aucune gestion des exceptions n'existe dans ton programme, l'exception se propage et le systeme d'exploitation intervient et ferme le programme devenu instable.

    Parce que dans R la règle des signes fait qu'un nombre négatif ne peut donc être que le produit de deux nombres de signes inverses, ce qui est en contradiction avec la définition d'un carré qui est le produit d'un même nombre par lui-même, dans l'égalité : D := B*B - (4*A*C); Si D est négatif, l'égalité m := (-B-sqrt(D))/(2*A); induit le compilateur à calculer la racine carrée d'un nombre négatif (Sujet qui necessite un traitement dans le plan des nombres complexes).
    1
    1. Hadjer's Messages postés 12 Date d'inscription   Statut Membre Dernière intervention  
       
      Merci :D
      0
    2. Hadjer's Messages postés 12 Date d'inscription   Statut Membre Dernière intervention  
       
      Donc je dois mettre mes deux solutions après la conditions (si D<0 alors..) pour que le logiciel n'aie pas à faire des calculs incluant la racine carrée d'un nombre négatif. et ça a marchééééé :D
      0
  2. Hadjer's Messages postés 12 Date d'inscription   Statut Membre Dernière intervention  
     
    et puis j'ai essayé avec ça
    Program RESOLUTION  (input,output);
    Var
    A, B, C, D, x, m, n: Real;
    Const
    E= 'Pas de soluion';
    Begin
    Writeln ('Entrer A ');
    Readln (A);
    Writeln('Entrer B');
    Readln (B);
    Writeln ('Entrer C');
    Readln (C);
    D := B*B - (4*A*C);
    x := (-B)/(2*A);
    m := (-B-sqrt(D))/(2*A);
    n := (-B+sqrt(D))/(2*A);
    IF D=0 = True THEN
    Begin
    Writeln ('La solution est',x)
    End
    Else IF D<0 = True THEN
    Begin
    writeln(E)
    End
    Else
    BEGIN
    Writeln ('la premiere solution est:',m,'La deuxieme est',n)
    END;
    
    Readln;
    
    End.


    même résultat :( .
    0