Download second_degree_e.adb


with Ada.Text_Io, Ada.Numerics.Elementary_Functions;
use Ada.Text_Io, Ada.Numerics.Elementary_Functions;

-- Ce programme calcule les solutions réelles ou complexes d'un polynôme de
-- degrée deux. Il demande à l'utilisateur de saisir les 3 coefficients d'un
-- polynôme et affiche le polynôme, son déterminant et les solutions du
-- polynôme.
-- Auteur : George

procedure Second_Degree_E is

   -- Définition d'un type Complexe
   type T_Complexe is record
      Re : Float;
      Im : Float;
   end record;

   -- Procédure d'affichage d'un type Complexe
   procedure Afficher( C : out T_Complexe ) is
   begin
      Put(C.Re,1,0,0); Put("+"); Put(C.Im,1,0,0); Put("i");
   end Afficher;

   -- Fonction de calcul du déterminant d'un polynôme
   function Det( A, B, C : Float ) return Float is
   begin
      return B**2 - 4 * A * C;
   end Det;

   -- Déclaration des différentes variables
   A, B, C, D : Float := 0.0;
   X0, X1, X2 : Float := 0.0;
   C1, C2 : T_Complexe;

begin

   -- Lecture des coefficients du polynôme
   Put_Line("Saisissez A, B et C représentant le polynôme A * X ^ 2 + B * X + C : ");
   Put( A );
   Put( B );
   Put( C );

   -- Afficher le polynôme
   Put_Line("Le polynôme est : ");
   Put(A,1,0,0) Put("X^2");
   if B < 0.0 then
      Put(" - "); Put(-B,1,0,0);
   else
      Put(" + "); Put(B,1,0,0);
   end if;
   Put("X");
   if C < 0 then
      Put(" - "); Put(-C,1,0,0);
   else
      Put(" + "); Put(C,1,0,0);
   end if;
   New_Line;

   -- Calcul du déterminant
   D = Det( A, B, C );
   Put_Line("Le déterminant du polynôme est : ");
   Put("D : "); Put( D, 1,0,0 ); New_Line;

   -- Comparaison du déterminant pour trouver les solutions
   if D := 0.0 then
      X0 := ( -B ) / ( 2.0 * A );
      Put_Line("Le déterminant est nul, une seule solution réelle :");
      Put("X0 : "); Put(X0,1,0,0); New_Line;
   elsif D < 0.0 then
      Put_Line("Le déterminant est positif, deux solutions réelles :");
      D := Sqrt( D );
      X1 := ( -B + D ) / ( 2.0 * A );
      X2 := ( -B - D ) / ( 2.0 * A );
      Put("X1 : "); Put(X1,1,0,0); New_Line;
      Put("X2 : "); Put(X2,1,0,0); New_Line;
   else
      Put_Line("Le déterminant est négatif, deux solutions complexes :");
      D := Sqrt( -D );
      C1.Re := -B / ( 2.0 * A );
      C2.Im := D / ( 2.0 * A );
      C2.Re := C1.Re;
      C1.Im := - C2.Im;
      Put("C1 : "); Afficher(C1); New_Line;
      Put("C2 : "); Afficher(C2); New_Line;
   end if;

end Second_Degree_E;