(*$B- AUFGABE 2.21 *) PROGRAM komplexewurzel; TYPE komplex = RECORD re,im: real END; VAR x,y: komplex; PROCEDURE csqrt(a:komplex; VAR x:komplex); BEGIN IF a.re>0 THEN x.im:=abs(a.im)/sqrt(2*(a.re+sqrt(sqr(a.re)+sqr(a.im)))) ELSE x.im:= sqrt((-a.re+sqrt(sqr(a.re)+sqr(a.im)))/2); IF x.im=0 THEN IF a.re<0 THEN BEGIN x.re:=0; x.im:=sqrt(-a.re) END ELSE x.re:=sqrt(a.re) ELSE x.re:= a.im/2/x.im; END; (*$I mult Algorithmus 2.8*) BEGIN REPEAT writeln('Berechnung der Quadratwurzel aus a'); writeln('Re(a) und Im(a) eingeben'); read(x.re,x.im); csqrt(x,y); writeln('Wurzel = ',y.re,' + I* ',y.im); writeln('Kontrolle'); mult(y,y,y); writeln(x.re-y.re,x.im-y.im) UNTIL eof END.