//JOB(ERCC07,STEPHENS,T=200,L=10000) //OPTIONS(QUOTES,OPT) //ALGOL 'COMMENT' *************** * * * ALGG002 * * * *************** ; 'BEGIN' 'INTEGER' I,J,K,NEQS,NVBS; 'REAL' SUM; 'COMMENT' INPUT/OUTPUT PROCEDURES; 'COMMENT' END OF INPUT/OUTPUT PROCEDURES; 'PROCEDURE' INVERT(N,A,B); 'VALUE' N; 'INTEGER' N; 'ARRAY' A,B; 'BEGIN' 'COMMENT' INVERTS MATRIX A, N BY N, AND PUTS INVERSE INTO MATRIX B; 'INTEGER' I,J,K; 'REAL' M; 'FOR' I := 1 'STEP' 1 'UNTIL' N 'DO' 'FOR' J := 1 'STEP' 1 'UNTIL' N 'DO' B[I,J] := 'IF' I = J 'THEN' 1.0 'ELSE' 0.0; M := A[1,1]; 'IF' M # 1.0 'THEN' 'BEGIN' 'FOR' I := 1 'STEP' 1 'UNTIL' N 'DO' 'BEGIN' A[1,I] := A[1,I]/M; B[1,I] := B[1,I]/M 'END' 'END'; 'FOR' I := 1 'STEP' 1 'UNTIL' N-1 'DO' 'FOR' J := I+1 'STEP' 1 'UNTIL' N 'DO' 'BEGIN' M := -A[J,I]/A[I,I]; 'FOR' K := 1 'STEP' 1 'UNTIL' N 'DO' 'BEGIN' A[J,K] := M*A[I,K] + A[J,K]; B[J,K] := M*B[I,K] + B[J,K] 'END' 'END'; 'FOR' I := 2 'STEP' 1 'UNTIL' N 'DO' 'BEGIN' M := A[I,I]; 'FOR' J := 1 'STEP' 1 'UNTIL' N 'DO' 'BEGIN' A[I,J] := A[I,J]/M; B[I,J] := B[I,J]/M; 'END' 'END'; 'FOR' I := N 'STEP' -1 'UNTIL' 2 'DO' 'FOR' J := I-1 'STEP' -1 'UNTIL' 1 'DO' 'BEGIN' M := -A[J,I]/A[I,I]; 'FOR' K := N 'STEP' -1 'UNTIL' 1 'DO' 'BEGIN' A[J,K] := M*A[I,K] + A[J,K]; B[J,K] := M*B[I,K] + B[J,K]; 'END' 'END' ; 'FOR' I := 1 'STEP' 1 'UNTIL' N 'DO' 'BEGIN' 'FOR' J := 1 'STEP' 1 'UNTIL' N 'DO' PRINT(A[I,J],5,4); NEWLINES(1) 'END'; NEWLINES(2); 'FOR' I := 1 'STEP' 1 'UNTIL' N 'DO' 'BEGIN' 'FOR' J := 1 'STEP' 1 'UNTIL' N 'DO' PRINT(B[I,J],5,4); NEWLINES(1) 'END'; 'END' PROCEDURE INVERT; NEQS := READ; NVBS := READ; 'BEGIN' 'REAL' 'ARRAY' A[1:NEQS,1:NVBS+1], B[1:NVBS,1:NVBS+1],C[1:NVBS,1:NVBS]; 'FOR' I := 1 'STEP' 1 'UNTIL' NEQS 'DO' 'FOR' J := 1 'STEP' 1 'UNTIL' NVBS+1 'DO' A[I,J] := READ; 'COMMENT' PDS DELETION NEWPAGE; NEWLINES(3); 'FOR' I := 1 'STEP' 1 'UNTIL' NVBS 'DO' 'BEGIN' PRINT(I,6,0); SPACES(3) 'END'; NEWLINES(2); 'FOR' I := 1 'STEP' 1 'UNTIL' NEQS 'DO' 'BEGIN' 'FOR' J := 1 'STEP' 1 'UNTIL' NVBS+1 'DO' PRINT(A[I,J],4,4); NEWLINES(1) 'END'; 'FOR' I := 1 'STEP' 1 'UNTIL' NVBS 'DO' 'FOR' J := 1 'STEP' 1 'UNTIL' NVBS+1 'DO' 'BEGIN' SUM := 0.0; 'FOR' K := 1 'STEP' 1 'UNTIL' NEQS 'DO' SUM := A[K,I]*A[K,J]+SUM; B[I,J] := SUM 'END'; NEWLINES(3); INVERT(NVBS,B,C); 'FOR' I := 1 'STEP' 1 'UNTIL' NVBS 'DO' 'BEGIN' SUM := 0.0; 'FOR' K := 1 'STEP' 1 'UNTIL' NVBS 'DO' SUM := C[I,K]*B[K,NVBS+1] + SUM; NEWLINES(1); SPACES(3); WRITE TEXT('('VALUE')'); SPACES(1); WRITE TEXT('('OF')'); SPACES(1); WRITE TEXT('('VARIABLE')'); PRINT(I,4,0); SPACES(1); WRITE TEXT('('IS')'); PRINT(SUM,8,4); 'END' 'END' 'END' //RUN 5; 4; 1.1; 2.1; 2.8; 1.3; 15.19; 3.0; 2.2; 0.9; 2.1; 13.01; 2.1; 1.0; 1.0; 7.1; 14.11; 0.0; 1.0; 0.9; 5.0; 10.56; 2.1; 0.9; 0.8; 6.9; 13.96;