```PROGRAM Solvec;
{ simultaneous solution for complex coefficients }
{ From Borland Pascal Programs for Scientists and Engineers }
{ by Alan R. Miller, Copyright C 1993, SYBEX Inc }
USES WinCrt; { Crt for non-windows version}

CONST
Maxr = 8;
Maxc = 8;

TYPE
FltPt = Real;
Ary   = ARRAY[1..Maxr] OF FltPt;
Arys  = ARRAY[1..Maxc] OF FltPt;
Ary2s = ARRAY[1..Maxr, 1..Maxc] OF FltPt;
Aryc2 = ARRAY[1..Maxr, 1..Maxc, 1..2] OF FltPt;
Aryc  = ARRAY[1..Maxr, 1..2] OF FltPt;

VAR
Y, Coef: Arys;
A, B: Ary2s;
N, M, I, J: Integer;
Error: Boolean;

PROCEDURE Get_Data(VAR A: Ary2s;
VAR Y: Arys;
VAR N, M: Integer);
{ Get complex values for N and arrays A, Y }

VAR
C: Aryc2;
V: Aryc;
I, J, K, L: Integer;

PROCEDURE Show;
{ print original data }

VAR
I, J, K: Integer;

BEGIN { show }
WriteLn;
FOR I:= 1 TO N  DO
BEGIN
FOR J:= 1 TO M DO
FOR K := 1 TO 2 DO
Write(C[I,J,K]:7:4, '  ');
WriteLn(' : ', V[I,1]:7:4,' : ',V[I,2]:7:4)
END;
N := 2 * N;   M := N;
WriteLn;
FOR I:= 1 TO N  DO
BEGIN
FOR J:= 1 TO M DO
Write(A[I,J]:7:4, '  ');
WriteLn(' : ', Y[I]:9:5)
END;
WriteLn
END; { show }

BEGIN { procedure Get_Data }
WriteLn;
REPEAT
Write(' How many equations? ');
M := N
UNTIL N < Maxr;
IF N > 1 THEN
BEGIN
FOR I := 1 TO N DO
BEGIN
WriteLn('Equation', I:3);
K := 0;
L := 2 * I - 1;
FOR J := 1 TO N DO
BEGIN
K := K + 1;
Write(' Real ', J:3, ': ');
Read(C[I,J, 1]); { real part }
A[L,K] := C[I,J, 1];
A[L+1,K+1] := C[I,J, 1];
K := K + 1;
Write(' Imag ', J:3, ': ');
A[L,K] := -C[I,J, 2];
A[L+1,K-1] := C[I,J, 2]
END; { J loop }
Write(' Real CONST: ');
Y[L] := V[I,1];
Write(' Imag CONST: ');
Y[L+1] := V[I,2]
END; { I loop }
Show { original data }
END  { if N>1 }
END; { procedure Get_Data }

{\$I ATAN}   {Listing 1.3}

PROCEDURE Write_Data;
{ print out the answers }

VAR
I, J: Integer;
Re, Im: FltPt;

FUNCTION Mag(X, Y: FltPt): FltPt;
{ polar magnitude }
BEGIN
Mag := Sqrt(Sqr(X) + Sqr(Y))
END; { function Mag }

BEGIN
WriteLn
('     Real     Imaginary   Magnitude   Angle');
FOR I := 1 TO M DIV 2 DO
BEGIN
J := 2*I -1;
Re := Coef[J];
Im := Coef[J+1];
WriteLn(Re:11:5, Im:11:5,
Mag(Re, Im):11:5,  Atan(Re, Im):11:5)
END; { FOR }
WriteLn
END; { Write_Data }

{\$I GAUSSJ} {Listing 4.4}

BEGIN  { main program }
WriteLn;
WriteLn
(' Simultaneous solution with complex coefficients');
WriteLn(' By Gauss-Jordan elimination');
REPEAT
Get_Data(A, Y, N, M);
IF N > 1 THEN
BEGIN
FOR I := 1 TO N DO
FOR J := 1 TO N DO
B[I,J] := A[I,J]; { Setup work array }
Gaussj(B, Y, Coef, N, Error);
IF NOT Error THEN Write_Data
END
UNTIL N < 2;
Writeln; Writeln('  Press Enter to end');
REPEAT UNTIL KeyPressed;
DoneWinCrt  { for Windows version only }
END.

```