Witam
Po długich walkach udało mi się sklecić ten program jednak mam problem gdyż kompilacja przebiega poprawnie a kompilator wywala "project raised exception class external" przy liczeniu pierwiastka. Z góry dziękuje jeśli ktoś mi wytłumaczy w czym jest problem.
program project1;
Uses Math;
type
complex = record
re, im : float;
z, fi : float;
end;
Procedure AssignXY(VAR Z:Complex; x,y:float);
Begin
Z.re:=x; Z.im:=y;
End;
Procedure DisplayComplex(Z:Complex;i,j:Integer);
Begin
write('(',Z.re:i:j,',',Z.im:i:j,')');
End;
Procedure DisplayComplexR(Z:Complex;i,j:Integer);
Begin
write('(',Z.z:i:j,',',Z.fi:i:j,')');
End;
function zabs(const z : complex) : float; {moduł liczby zespolonej}
begin
zabs := sqrt(sqr(z.re)+sqr(z.im));
end;
procedure efi(const z : complex;var y : complex);
{przeliczanie z postaci klasycznej na eulerowską}
begin
y.z := zabs(z);
if (z.re = 0) and (z.im <> 0) then y.fi := pi/2 else y.fi := abs(arctan(z.im/z.re));
if (z.re < 0) and (z.im > 0) then y.fi := y.fi + pi/2 else
if (z.re < 0) and (z.im = 0) then y.fi := y.fi + pi else
if (z.re > 0) and (z.im < 0) then y.fi := y.fi + 3*pi/2;
end;
procedure compl(const z : complex;var y : complex);
{przeliczanie z postaci Eulera na klasyczną}
begin
y.re := z.z*cos(z.fi);
y.im := z.z*sin(z.fi);
end;
procedure zsqrn(const z : complex;n : byte;var X : array of complex);
{pierwiastek dowolnego naturalnego stopnia}
var
a : complex;
i : byte;
begin
efi(z,a);
a.z := power(a.z,1/n);
for i := 0 to n-1 do
begin
x[i].re := a.z*cos(a.fi+ (i/n)*2*pi);
x[i].im := a.z*sin(a.fi+ (i/n)*2*pi);
end;
end;
var
Z1, Z2:complex;
tab:array of complex;
Begin
AssignXY(Z1,2,-2);
DisplayComplex(Z1,4,2);
//efi(Z1,Z2);
//DisplayComplexR(Z2,4,2);
zsqrn(Z1,2,tab);
writeln(tab[0].re,'+i',tab[0].im);
readln;
End.