websavoir
La passion du savoir
 
     

Jeudi 25-04-2024  Citations à méditer
  **...Et pourtant, elle tourne...** Quoi qu'il arrive, une découverte, une idée lancée, n'appartient plus à son auteur. Galilée s'est récusé, mais la terre n'a pas pour autant cessé de tourner.    Galilée  

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/ 1er cas: les équations avec des coefficients a, b et c réels ex: 4z2 + 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 i2Δ avec bien sur i2 = -1

2/ 2ème cas: les équations avec des coefficients a, b, c complexe ex: iz2 + 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