```Contributor: STEVE ROGERS

{Just for grins, here's a complex number unit I wrote come time back:}

unit complex;
(*
polar/rectangular conversions and complex math
Steve Rogers, ~1993
*)

{----------------------}
interface

type
tComplex=record
r,             { real component }
x              { imaginary component }
: real;
end;

procedure r2p(var r,p : tComplex);
procedure p2r(var p,r : tComplex);
procedure c_sub(var c1,c2,c3 : tComplex);
procedure c_mult(var c1,c2,c3 : tComplex);
procedure c_div(var c1,c2,c3 : tComplex);

implementation

const

{----------------------}
procedure r2p(var r,p : tComplex);
{ returns polar in degrees in p, given rectangular in r }
begin
p.r:= sqrt(sqr(r.r)+sqr(r.x));
end;

{----------------------}
procedure p2r(var p,r : tComplex);
{ returns rectangular in r, given polar in degrees in p }
begin
end;

{----------------------}
{ adds c2 to c1, places result in c3 }
begin
c3.r:= c1.r+c2.r;
c3.x:= c1.x+c2.x;
end;

{----------------------}
procedure c_sub(var c1,c2,c3 : tComplex);
{ subtracts c2 from c1, places result in c3 }
begin
c3.r:= c1.r-c2.r;
c3.x:= c1.x-c2.x;
end;

{----------------------}
procedure c_mult(var c1,c2,c3 : tComplex);
{ multiplies c1 by c2, places result in c3  }
begin
c3.r:= (c1.r*c2.r)-(c1.x*c2.x);
c3.x:= (c1.r*c2.x)+(c1.x*c2.r);
end;

{----------------------}
procedure c_div(var c1,c2,c3 : tComplex);
{ divides c1 by c2, places result in c3  }
var
p1,p2,p3 : tComplex;

begin
r2p(c1,p1);                          { convert c1 to polar form }
r2p(c2,p2);                          { convert c2 to polar form }
p3.r:= p1.r/p2.r;                    { divide real component    }
p3.x:= p1.x-p2.x;                    { subtract imaginary component }
if (p3.x<0) then p3.x:= p3.x+180;    { Pretty it up                 }
p2r(p3,c3);                          { convert c3 back to rectangular }
end;
                                                               ```