PROGRAM TP7EXCl ;

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.