USES complexe,crt ;
var ar,ai,br,bi,cr,ci,dr,di,er,ei : real ;
fr,fi,gr,gi,deltar,deltai,xr,xi : real ;
ro,teta : real ;
reponse : char ;
BEGIN (* principal *)
repeat
clrscr;
writeln<’Résolution de 1’’équation a*X*X
+ b*X + c = O’>;
writeln(’ a, b, c sont des complexes ; a non nul’);
(* notations : r pour partie réelle et i pour partie imaginaire *)
writeln('saisie de a :') ;
repeat saisir(ar,ai) until (ar<>0) or (ai<>0);
writeln('saisie de b :') ;
saisir(br,bi) ;
writeln('saisie de c :') ;
saisir(cr,ci) ;
(* calcul de delta *)
produit(br,bi,br,bi,dr,di) ;
(* d = b*b
*)
produit(ar,ai,cr,ci,er,ei) ;
(* e = a*c
*)
produit(-4,0,er,ei,er,ej) ;
(* e = -4*a*c*c *)
somme(dr,di,er,ei,deltar,deltai) ; (* delta = b*b*-*a*c
*)
(* calcul de la racine de delta *)
ro:=module(deltar,deltai) ;
ro:=sqrt(ro) ;
teta:=arg(deltar,deltai) ;
teta:=teta/2 ;
dr:=ro*cos(teta) ;
di:=ro*sin(teta) ; (* d racine de delta *)
(* résolution *)
produit(-l,O,br,bi,er,ei) ;
(* e = -b
*)
somme(er,ei,dr,di,fr,fi) ;
(* f = -b+racine(delta) *)
produit(2,0,ar,ai,gr,gi) ;
(* g = 2a
*)
inverse(gr,gi,gr,gi) ;
(* g = 1/(2a)
*)
produit(fr,fi,gr,gi,xr,xi) ;
(* x = racine1 *)
write('1ère racine : ') ; ecrire(xr,xi) ;
produit(-1,0,dr,di,dr,di) ;
(* d = -racine(delta) *)
somme(er,ei,dr,di,fr,fi) ;
(* f = -b-racine(delta) *)
produit(fr,fi,gr,gi,xr,xi) ;
(* x= racine2
*)
write('2ème racine : '); ecrire(xr,xi) ;
write('une autre équation (o/n) ? ') ;
readln(reponse) ;
until reponse='n' ;
END.