Programme Pascal
Résolution d'une équation du second degré
dans l'ensemble C
az2 + bz + c = 0
Présentation
Il faut noter tout d'abord qu'il y a deux types d'équations du second degré dans C:
1/ 1
er cas: les équations avec des coefficients a, b et c réels ex: 4z
2 + 2z + 1 = 0.
La résolution de ce type d'équation passe par le calcul de Δ (
b2 - 4ac) et quand ce dernier est < 0 on le remplace par i
2Δ avec bien sur i
2 = -1
2/ 2
ème cas: les équations avec des coefficients a, b, c complexe ex: iz
2 + 2iz + 1 = 0.
Pour résoudre ce type d'équation on remplace z par x+iy et on développe et on réduit pour séparer la partie réelle de la partie imaginaire et obtenir un système d'équation qui va permettre de calculer x et y.
Le programme pascal qui suit traite du premier cas c'est-à-dire la résolution dans C d'une équation du second degré à coefficients a, b et c réels. Il considère tous les cas de figure:
a = 0 =>
b = 0, Solution impossible, division par ZERO
a = 0 =>
b ≠ 0, Equation du premier degré , z = -c/b
Δ < 0 =>
b ≠ 0, Deux solutions complexes , z1 = (-b + i√Δ) / 2a et
z2 = (-b - i√Δ) / 2a
Δ < 0 =>
b = 0, Deux solutions complexes imaginaires pures,
z1 = + i√Δ / 2a et
z2 = - i√Δ / 2a
Δ = 0 =>
Une solution unique réelle dite aussi double,
z1 =
z2 = -b / 2a
Δ > 0 =>
Deux solutions réelles)
, z1 = (-b + √Δ) / 2a et
z2 = (-b - √Δ) / 2a
En fin et pour une meilleure lisibilité des résultats, le programme traite de la mise en page aussi.
L'algorithme
Le programme
(* Entête *)
program ResoudreEquationDuSecondDegreDansC ;
{$mode objfpc}{$H+}
uses
{$IFDEF UNIX}{$IFDEF UseCThreads}
cthreads,
{$ENDIF}{$ENDIF}
Classes
{ you can add units after this };
(* Déclarations *)
var
coeff_a, coeff_b, coeff_c, delta, solutionz, solutionz1, solutionz2 : real ;
(* Instructions *)
begin
(* Saisie des variables à introduire *)
writeln; (*saut de ligne*)
writeln; (*saut de ligne*)
writeln('Saisir les coefficients') ;
writeln; (*saut de ligne*)
writeln('coeff_a =') ;
readln(coeff_a);
writeln('coeff_b =') ;
readln(coeff_b);
writeln('coeff_c =') ;
readln(coeff_c);
(* Affichages des coefficients entrés *)
writeln; (*saut de ligne*)
writeln; (*saut de ligne*)
writeln('Les coefficients entrés');
writeln;(*saut de ligne*)
writeln('coeff_a =',coeff_a) ;
writeln('coeff_b =',coeff_b) ;
writeln('coeff_c =',coeff_c) ;
writeln; (*saut de ligne*)
(* Traitement des données et affichage des résultats *)
if coeff_a = 0 then
begin
if coeff_b = 0 then
begin
writeln ('b=0 => Solution impossible, division par ZERO');
writeln;(*saut de ligne*)
writeln;(*saut de ligne*)
end
else
begin
writeln ('a = 0 => L''équation est ramenée au 1er degré, la solution réelle est z=-c/b');
writeln;(*saut de ligne*)
solutionx := -coeff_c / coeff_b ;
writeln('solutionz = ', solutionz) ;
writeln;(*saut de ligne*)
writeln;(*saut de ligne*)
end;
end
else
begin
delta := sqr(coeff_b) - 4 * coeff_a * coeff_c ;
if delta < 0 then (* Δ négatif *)
begin
if coeff_b = 0 then
begin
writeln ('Delta < 0 & coeff_b = 0 => L''équation a deux solutions complexes imaginaires pures');
writeln;(*saut de ligne*)
writeln('Delta = ',delta) ;
writeln('solutionz1 = +i',sqrt(-delta) / (2 * coeff_a)) ;
writeln('solutionz2 = -i',sqrt(-delta) / (2 * coeff_a)) ;
writeln;(*saut de ligne*)
writeln;(*saut de ligne*)
end
else
begin
writeln ('Delta < 0 & coeff_b <> 0 => L''équation a deux solutions complexes');
writeln;(*saut de ligne*)
writeln('Delta = ',delta) ;
writeln('solutionz1 = ',(- coeff_b)/(2 * coeff_a),' +i',sqrt(-delta)/(2 * coeff_a)) ;
writeln('solutionz2 = ',(- coeff_b)/(2 * coeff_a),' -i',sqrt(-delta)/(2 * coeff_a)) ;
writeln;(*saut de ligne*)
writeln;(*saut de ligne*)
end;
end
else
begin
if delta = 0 then
begin
writeln ('Delta = 0 => L''équation a une solution unique réelle dite double aussi');
solutionz := (- coeff_b ) / (2 * coeff_a) ;
writeln;(*saut de ligne*)
writeln('Delta = ',delta) ;
writeln('solutionz = ',solutionz) ;
writeln;(*saut de ligne*)
writeln;(*saut de ligne*)
end
else (*Pour Delta >0*)
begin
writeln ('Delta > 0 => L''équation a deux solutions réelles');
solutionz1 := (- coeff_b + sqrt(delta)) / (2 * coeff_a) ;
solutionz2 := (- coeff_b - sqrt(delta)) / (2 * coeff_a) ;
writeln;(*saut de ligne*)
writeln('Delta = ',delta) ;
writeln('solutionz1 = ',solutionz1) ;
writeln('solutionz2 = ',solutionz2) ;
writeln;(*saut de ligne*)
writeln;(*saut de ligne*)
end;
end;
end;
writeln('Press [Enter] To Quit');
readln();
end.
Exécution du programme
Vous pouvez voir l'exécution de ce programme en suivant l'un des liens suivants:
Sur notre site web
ICI
Sur notre chaine youtube
ICI