code 34292;
procedure SOLSYM2(A,N,B,P,DETAUX);
value N;integer N;
array A,B,DETAUX;integer array P;
begin integer I,II,J,K,IP1,PI,PII,DUMMY;
real DET,TEMP,SAVE;
I:=1;
for DUMMY:=0 while I<N do
begin IP1:=I+1;PI:=P[I];SAVE:=B[PI];
if P[IP1]>0 then
begin B[PI]:=B[I];B[I]:=SAVE/A[I,I];
ELMVECROW(IP1,N,I,B,A,SAVE);I:=IP1
end
else
begin TEMP:=B[I];B[PI]:=B[IP1];DET:=DETAUX[IP1];
B[I]:=(TEMP*A[IP1,IP1]-SAVE*A[I,IP1])/DET;
B[IP1]:=(SAVE*A[I,I]-TEMP*A[I,IP1])/DET;
ELMVECROW(I+2,N,I,B,A,TEMP);ELMVECROW(I+2,N,IP1,B,A,SAVE);
I:=I+2
end
end WHILE I;
if I=N then begin B[I]:=B[I]/A[I,I];I:=N-1 end
else I:=N-2;
for DUMMY:=0 while I>0 do
begin if P[I]=0 then II:=I-1 else II:=I;
for K:=II step 1 until I do
begin SAVE:=B[K];SAVE:=SAVE+MATVEC(I+1,N,K,A,B);
B[K]:=SAVE
end;
PII:=P[II];B[I]:=B[PII];B[PII]:=SAVE;I:=II-1
end WHILE I
end SOLSYM2;
eop