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;