(*$B- Aufgabe 2.20 *) PROGRAM quadrgleichung; TYPE komplex = RECORD re,im: real END; VAR a,b,c,wu,z1,z2,h,diskr: komplex; (*$I topolar Algorithmus 2.3*) (*$I csqrt Algorithmus 2.10*) (*$I mult Algorithmus 2.8 *) PROCEDURE add(a,b:komplex;VAR res:komplex); BEGIN res.re:=a.re+b.re; res.im:=a.im+b.im END; PROCEDURE sub(a,b:komplex;VAR res:komplex); BEGIN res.re:=a.re-b.re; res.im:=a.im-b.im END; PROCEDURE teil(a,b:komplex;VAR res:komplex); VAR ra,rb,phia,phib,r,phi:real; BEGIN topolar(a.re,a.im,ra,phia); topolar(b.re,b.im,rb,phib); r:=ra/rb; phi:=phia-phib; res.re := r*cos(phi); res.im:=r*sin(phi) END; PROCEDURE schreibzahl(res:komplex); BEGIN write(res.re); IF res.im>=0 THEN write(' + I*') ELSE write(' - I*'); write(abs(res.im)) END; BEGIN REPEAT writeln('Loesen von quadratischen Gleichungen mit komplexen '); writeln('Koeffizienten : a x**2 + b*x +c = 0 '); writeln(' Real- und Imaginaerteil von a,b und c eingeben'); read(a.re,a.im,b.re,b.im,c.re,c.im); h.re:=4*a.re; h.im:=4*a.im; mult(h,c,h); mult(b,b,diskr); sub(diskr,h,diskr); csqrt(diskr,wu); h.re:=2*a.re; h.im:=2*a.im; sub(wu,b,z1); teil(z1,h,z1); wu.re:=-wu.re; wu.im:=-wu.im; sub(wu,b,z2); teil(z2,h,z2); write('1.Loesung ='); schreibzahl(z1); writeln; write('2.Loesung ='); schreibzahl(z2); writeln; writeln('Kontrolle'); mult(a,z1,h); add(h,b,h); mult(h,z1,h); add(h,c,h); schreibzahl(h); writeln; mult(a,z2,h); add(h,b,h); mult(h,z2,h); add(h,c,h); schreibzahl(h); writeln;writeln; UNTIL eof(input) END.