code 34170;
comment MCA 2400;
procedure TFMREAHES(A, N, EM, INT); value N; integer N;
array A, EM; integer array INT;
begin integer I, J, J1, K, L;
real S, T, MACHTOL, MACHEPS, NORM;
array B[0:N - 1];
MACHEPS:= EM[0]; NORM:= 0;
for I:= 1 step 1 until N do
begin S:= 0;
for J:= 1 step 1 until N do S:= S + ABS(A[I,J]);
if S > NORM then NORM:= S
end;
EM[1]:= NORM; MACHTOL:= NORM * MACHEPS; INT[1]:= 0;
for J:= 2 step 1 until N do
begin J1:= J - 1; L:= 0; S:= MACHTOL;
for K:= J + 1 step 1 until N do
begin T:= ABS(A[K,J1]); if T > S then
begin L:= K; S:= T end
end;
if L ^= 0 then
begin if ABS(A[J,J1]) < S then
begin ICHROW(1, N, J, L, A);
ICHCOL(1, N, J, L, A)
end
else L:= J; T:= A[J,J1];
for K:= J + 1 step 1 until N do
A[K,J1]:= A[K,J1] / T
end
else
for K:= J + 1 step 1 until N do A[K,J1]:= 0;
for I:= 1 step 1 until N do
B[I - 1]:= A[I,J]:= A[I,J] +
(if L = 0 then 0 else MATMAT(J + 1, N, I, J1, A, A))-
MATVEC(1, if J1 < I - 2 then J1 else I - 2, I, A, B);
INT[J]:= L
end
end TFMREAHES
eop