Determinant and permanent: Difference between revisions

(Added Kotlin)
Line 1,973:
determinant: 0
permanent: 6778800
</pre>
=={{header|Simula}}==
<lang simula>! 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
</lang>
Input:
<pre>
2
1 2
3 4
</pre>
{{Output}}
<pre>
DETERMINANT ... : -2.000000000&+000
PERMANENT ..... : 1.000000000&+001
</pre>
Input:
<pre>
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
</pre>
{{Output}}
<pre>
DETERMINANT ... : 0.000000000&+000
PERMANENT ..... : 6.778800000&+006
</pre>
 
Anonymous user