Problem z działaniem programu na n-ty stopień pierwiastka z liczby zespolonej

0

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.                                                      
0

Twoja deklaracja zmiennych jest poprawna, aczkolwiek w tym przypadku powinna być ujęta w nagłówku, zaraz po Type..
operujesz na globalnych zmiennych, więc kompilator widzi typ zmiennej, jednakże nie ma możliwości przy wykonywaniu Twojego kodu pracy na niej, gdyż nie został przyporządkowane dla niej miejsce w pamięci.

0

Spróbowałem przerzucić zmienne jednak dalej występuje ten sam problem.

Edit: Problem rozwiązany

1 użytkowników online, w tym zalogowanych: 0, gości: 1