[Back to NUMBERS SWAG index] [Back to Main SWAG index] [Original]

    {
    >A>overlooked. No Pascal compiler that I know of (including Turbo) can return
    >A>a complex value (i.e., a record or an array) from a FUNCTION. In order for
    >
    >Hmm...never tried this before. Anyway, the sollution is quite simple:
    >just have the megaword-variable public, and pass it to the procedure.

    Returning function values by setting a public variable is pretty dangerous -
    what if your function calls another that uses the same public to return its
    value?  In this case, it's not necessary, since there's a trick to let TP
    return complex numbers:
    }

    type
      Float = Double;
      TComplex = string[2*sizeof(float)];
      { Complex number.  Not a true string:  the values are stored in binary
        format within it. }

      TCmplx = record   { The internal storage format for TComplex }
        len : byte;
        r,i : float;
      end;

    function Re(z:TComplex):float;
    begin
      Re := TCmplx(z).r;
    end;

    function Im(z:TComplex):float;
    begin
      Im := TCmplx(z).i;
    end;

    function Complex(x,y:float):TComplex;
    { Convert x + iy to complex number. }
    var
      result : TCmplx;
    begin
      with result do
      begin
        len := 2*sizeof(float);
        r := x;
        i := y;
      end;
      Complex := TComplex(result);
    end;

    {You can use these to build up lots of functions returning TComplex types.}

[Back to NUMBERS SWAG index] [Back to Main SWAG index] [Original]