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