[console] discriminant d'un polynôme du second degré

Description

Comme ce code source est devenu inaccessible du fait d'un plantage du réseau codes-sources le week-end dernier, je le publie de nouveau en attendant de pouvoir supprimer le précédent.

Ce code est en réponse à une question sur le forum, à savoir : calcul du discriminant et des racines d'un polynôme du second degré réalisé dans une application console.

Merci à JMP77 qui s'est exprimé sur ce même sujet en réalisant le tout sous la forme d'une application GUI de laquelle je me suis fortement inspiré (ben oui, mes souvenirs en la matière ayant 30 ans d'âge environ) mais en prenant une petite précaution pas inutile (voir plus bas).

Source / Exemple :


program discriminant;

{$APPTYPE CONSOLE}

uses
  SysUtils, Windows;

const
  T1 = 'Discriminant = ';
  T2 = 'Racine 1 = ';
  T3 = 'Racine 2 = ';
  NoRoots = 'Pas de racine reelles';

var
  A, B, C, D, X1, X2: Double;
  StrA, StrB, StrC: string;
  Response: char;

begin
  Response := ' ';
  SetConsoleTitle('Polynôme du second degré');

  repeat
    Writeln('*********************************************');
    WriteLn('*  Calcul du discriminant et des racines     *');
    Writeln('*      d''un polynome du second degre        *');
    WriteLn('*                                           *');
    WriteLn('* exemple : 2 X^2 + 3 X - 1                 *');
    WriteLn('* Les coefficients A, B et C du polynome    *');
    WriteLn('* ci-dessus sont respectivement :           *');
    WriteLn('* A = 2, B = 3 et C = 1                     *');
    WriteLn('*********************************************');
    WriteLn;
    {Récupération des infos saisies}
    Write('Valeur de A : ');
    Readln(StrA);
    Write('Valeur de B : ');
    Readln(StrB);
    Write('Valeur de C : ');
    Readln(StrC);

    //conversions en flottants
    A := StrToFloatDef(StrA, 0);
    B := StrToFloatDef(StrB, 0);
    C := StrToFloatDef(StrC, 0);

    //Eviter la division par zéro, ça fait désordre...
    if A <> 0 then
    begin
      WriteLn('___________________');
      WriteLn('Resultats :');
      {Calcul}
      D := Sqr(B) - 4 * A * C;
      WriteLn(T1 + FloatToStr(D));

      if D < 0 then
      begin
        WriteLn(T2 + NoRoots);
        WriteLn(T3 + NoRoots);
      end
      else
      begin
        X1 := (-B + SQR(D)) / (2 * A);
        X2 := (-B - SQR(D)) / (2 * A);
        WriteLn(T2 + FloatToStr(X1));
        WriteLn(T3 + FloatToStr(X2));
        WriteLn('*** VERIFICATION ***');
        Write(StrA,' X^2 + ', StrB, ' X + ', StrC, ' = 0 ');
        WriteLn('lorsque X vaut ', FloatToStr(X1), ' ou ', FloatToStr(X2), '.');
      end;
    end
    else
    begin
      WriteLn('A ne doit pas etre nul !');
      MessageBeep(MB_ICONEXCLAMATION);
    end;
    
    WriteLn('Tapez sur une touche pour continuer ou');
    Write('sur la lettre ''Q'' pour quitter...');
    ReadLn(Response);
    WriteLn;
  until UpperCase(Response) = 'Q';
end.

Conclusion :


Dans ce code, vous remarquerez que l'on teste que la valeur de A ne soit pas nulle avant d'effecture une division.

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.