code 34184;
comment MCA 2414;
integer procedure REAEIG1(A, N, EM, VAL, VEC); value N;
integer N; array A, EM, VAL, VEC;
begin integer I, K, MAX, J, L;
real RESIDU, R, MACHTOL;
array D, V[1:N], B[1:N,1:N];
integer array INT, INT0[1:N];
RESIDU:= 0; MAX:= 0; EQILBR(A, N, EM, D, INT0);
TFMREAHES(A, N, EM, INT);
for I:= 1 step 1 until N do
for J:= (if I = 1 then 1 else I - 1)
step 1 until N do B[I,J]:= A[I,J];
K:= REAEIG1:= REAVALQRI(B, N, EM, VAL);
for I:= K + 1 step 1 until N do
for J:= I + 1 step 1 until N do
begin if VAL[J] > VAL[I] then
begin R:= VAL[I]; VAL[I]:= VAL[J]; VAL[J]:= R end
end;
MACHTOL:= EM[0] * EM[1];
for L:= K + 1 step 1 until N do
begin if L > 1 then
begin if VAL[L - 1] - VAL[L] < MACHTOL then
VAL[L]:= VAL[L - 1] - MACHTOL
end;
for I:= 1 step 1 until N do
for J:= (if I = 1 then 1 else I - 1)
step 1 until N do B[I,J]:= A[I,J];
REAVECHES(B, N, VAL[L], EM, V);
if EM[7] > RESIDU then RESIDU:= EM[7];
if EM[9] > MAX then MAX:= EM[9];
for J:= 1 step 1 until N do VEC[J,L]:= V[J]
end;
EM[7]:= RESIDU; EM[9]:= MAX;
BAKREAHES2(A, N, K + 1, N, INT, VEC);
BAKLBR(N, K + 1, N, D, INT0, VEC);
REASCL(VEC, N, K + 1, N)
end REAEIG1
eop