September 2017 Update
This commit is contained in:
parent
bba7bfd280
commit
ba8067c3b7
14570 changed files with 153136 additions and 63871 deletions
99
Task/Matrix-arithmetic/Simula/matrix-arithmetic.simula
Normal file
99
Task/Matrix-arithmetic/Simula/matrix-arithmetic.simula
Normal file
|
|
@ -0,0 +1,99 @@
|
|||
! MATRIX ARITHMETIC ;
|
||||
BEGIN
|
||||
|
||||
INTEGER PROCEDURE LENGTH(A); REAL ARRAY A;
|
||||
LENGTH := UPPERBOUND(A, 1) - LOWERBOUND(A, 1) + 1;
|
||||
|
||||
PROCEDURE MINOR(A, X, Y, MAT); REAL ARRAY A, MAT; INTEGER X, Y;
|
||||
BEGIN
|
||||
INTEGER I, J, M; M := LENGTH(A) - 1;
|
||||
FOR I := 1 STEP 1 UNTIL M DO
|
||||
FOR J := 1 STEP 1 UNTIL M DO
|
||||
BEGIN
|
||||
IF I < X AND J < Y THEN
|
||||
MAT(I, J) := A(I, J)
|
||||
ELSE IF I >= X AND J < Y THEN
|
||||
MAT(I, J) := A(I + 1, J)
|
||||
ELSE IF I < X AND J >= Y THEN
|
||||
MAT(I, J) := A(I, J + 1)
|
||||
ELSE ! I > X AND J > Y ;
|
||||
MAT(I, J) := A(I + 1, J + 1)
|
||||
END
|
||||
END MINOR;
|
||||
|
||||
REAL PROCEDURE DET(A); REAL ARRAY A;
|
||||
BEGIN
|
||||
INTEGER N; N := LENGTH(A);
|
||||
IF N = 1 THEN
|
||||
DET := A(1, 1)
|
||||
ELSE
|
||||
BEGIN
|
||||
INTEGER I, SIGN;
|
||||
REAL SUM;
|
||||
SIGN := 1;
|
||||
FOR I := 1 STEP 1 UNTIL N DO
|
||||
BEGIN
|
||||
REAL ARRAY MAT(1:N-1, 1:N-1);
|
||||
MINOR(A, 1, I, MAT);
|
||||
SUM := SUM + SIGN * A(1, I) * DET(MAT);
|
||||
SIGN := SIGN * -1
|
||||
END;
|
||||
DET := SUM
|
||||
END
|
||||
END DET;
|
||||
|
||||
REAL PROCEDURE PERM(A); REAL ARRAY A;
|
||||
BEGIN
|
||||
INTEGER N; N := LENGTH(A);
|
||||
IF N = 1 THEN
|
||||
PERM := A(1, 1)
|
||||
ELSE
|
||||
BEGIN
|
||||
REAL SUM;
|
||||
INTEGER I;
|
||||
|
||||
FOR I := 1 STEP 1 UNTIL N DO
|
||||
BEGIN
|
||||
REAL ARRAY MAT(1:N-1, 1:N-1);
|
||||
MINOR(A, 1, I, MAT);
|
||||
SUM := SUM + A(1, I) * PERM(MAT)
|
||||
END;
|
||||
PERM := SUM
|
||||
END
|
||||
END PERM;
|
||||
|
||||
INTEGER SIZE;
|
||||
SIZE := ININT;
|
||||
BEGIN
|
||||
REAL ARRAY A(1:SIZE, 1:SIZE);
|
||||
INTEGER I, J;
|
||||
|
||||
FOR I := 1 STEP 1 UNTIL SIZE DO
|
||||
FOR J := 1 STEP 1 UNTIL SIZE DO
|
||||
A(I, J) := INREAL;
|
||||
|
||||
OUTTEXT("DETERMINANT ... : "); OUTREAL(DET (A), 10, 20); OUTIMAGE;
|
||||
OUTTEXT("PERMANENT ..... : "); OUTREAL(PERM(A), 10, 20); OUTIMAGE;
|
||||
END
|
||||
|
||||
! NOTE THAT THE FIRST INPUT IS THE SIZE OF THE MATRIX.
|
||||
! FOR EXAMPLE:
|
||||
|
||||
COMMENT
|
||||
! 2
|
||||
! 1 2
|
||||
! 3 4
|
||||
! DETERMINANT: -2.0
|
||||
! PERMANENT: 10.0 ;
|
||||
|
||||
COMMENT
|
||||
! 5
|
||||
! 0 1 2 3 4
|
||||
! 5 6 7 8 9
|
||||
! 10 11 12 13 14
|
||||
! 15 16 17 18 19
|
||||
! 20 21 22 23 24
|
||||
! DETERMINANT: 0.0
|
||||
! PERMANENT: 6778800.0 ;
|
||||
|
||||
END
|
||||
Loading…
Add table
Add a link
Reference in a new issue