Compucolor.org – Virtual Media

Listing of file='DETERM.BAS;01' on disk='vmedia/ncc_18-sector.ccvf'

100 REM  ---------------------------------------------------
120 REM         DETERMINANT OF A MATRIX
140 REM         CREATED 20/05/81
160 REM         FROM BYTE MARCH 1981( B.J. FLYNN )
170 REM         UPPER TRIANGULAR MATHOD
175 REM         LAST REVISED 21/05/81
180 REM  --------------------------------------------------
190 CLEAR  1000
200 REM  MOD 1 INIT. & ENTER DATA
220 GOSUB  1000
240 REM  MOD 2 CALC. DETERMINANT
260 GOSUB  2000
280 REM  MOD 3 PRINT DETERMINANT
300 GOSUB  3000
320 PLOT  3,0,30:INPUT "AGAIN ? > ";A$
340 IF  A$< > "N" GOTO  100
360 END
380 REM  ---------------------------------------
600 REM  GENERATE RANDOM MATRIX
610 PLOT  12:PRINT :INPUT "RANDOM MATRIX ? > ";A$
620 IF  A$= "N" THEN  G$= "A":RETURN
630 PRINT :KK= K
640 FOR  I=  1 TO  KK
650 FOR  J=  1 TO  KK
660 X(I,J)= INT (9* RND (J))
665 Z(I,J)= X(I,J)
670 NEXT  J,I
690 G$= "X"
700 RETURN
710 REM
1000 REM  ----------- MODULE 1 ------------------
1002 SIGN= 1:DT= 1
1010 PLOT  12:PRINT "THIS PROGRAM COMPUTE THE DETERMINANT OF A MATRIX":PRINT
1020 PRINT :INPUT "MATRIX DIMENSION > ";K
1030 DIM  X(K,K),Z(K,K)
1040 REM
1045 GOSUB  600
1048 IF  G$= "X" THEN  RETURN
1050 FOR  I=  1 TO  K
1060 PRINT :PRINT "ENTER";TAB( 10);"ROW # ";I;":"
1070 FOR  J=  1 TO  K
1080 PRINT :PRINT "COL # ";J;:INPUT "   ";X(I,J)
1090 NEXT  J,I
1100 FOR  I=  1 TO  K: FOR  J=  1 TO  K:Z(I,J)= X(I,J):NEXT  J,I
1110 RETURN
2000 REM  ----------- MODULE 2 ------------------
2002 Z= 0:POKE  33209,Z:POKE  33210,Z:POKE  33211,Z
2005 PLOT  12:PLOT  3,15,15:PRINT "***  CALCULATING  ***"
2010 IF  K= 1 THEN  DT= X(1,1):RETURN
2020 REM  FILL LOWER TRIANGLE WITH 0 S
2030 FOR  L=  1 TO  K- 1
2040 FOR  I=  L TO  K- 1
2050 REM  AVOID DIVIDE BY 0
2060 IF  X(L,L)= 0 THEN  GOSUB  4000
2070 IF  DT= 0 GOTO  2180
2080 C= X(I+ 1,L)/ X(L,L)
2090 FOR  J=  1TO  K
2100 X(I+ 1,J)= X(I+ 1,J)- X(L,J)* C
2110 NEXT  J,I,L
2120 REM  ADD UP PRODUCT OF DIAGONAL
2130 FOR  I=  1 TO  K
2140 DT= DT* X(I,I)
2150 NEXT  I
2160 DT= DT* SIGN
2170 REM
2172 DD= PEEK (33209):MM= PEEK (33210):YY= PEEK (33211)
2174 IF  DD<  60 GOTO  2176
2175 MM= MM+ 1:DD= DD- 60
2176 IF  MM< 60 GOTO  2178
2177 YY= YY+ 1:MM= MM- 60
2178 PRINT :PRINT
2180 RETURN
3000 REM  ----------- MODULE 3 ------------------
3002 PLOT  12:PRINT "ORIGINAL MATRIX":PRINT :FOR  I=  1 TO  K
3003 FOR  J=  1 TO  K
3004 PRINT  TAB( 5);Z(I,J);TAB( 5+ J* 5);:NEXT  J:PRINT :NEXT  I
3005 PRINT :PRINT :PRINT :PRINT "FINAL MATRIX":PRINT :FOR  I= 1 TO  K
3006 FOR  J=  1 TO  K
3007 PRINT  TAB( 5);X(I,J);TAB( 5+ 5* J);:NEXT  J:PRINT :NEXT  I
3008 PRINT :PRINT :PRINT "TOTAL TIME = ";INT (YY);INT (MM);INT (DD):PRINT :PRINT
3010 PRINT :PRINT "DETERMINANT = ";DT:PLOT  6,2
3020 RETURN
4000 REM  ------- SUB SWITCH ROWS ---------
4010 FOR  M=  L+ 1 TO  K
4020 IF  X(M,L)= 0 GOTO  4070
4030 FOR  Q=  1 TO  K
4040 HOLD= X(L,Q):X(L,Q)= X(M,Q):X(M,Q)= HOLD
4050 NEXT  Q
4060 SIGN= - SIGN:GOTO  4100
4070 NEXT  M
4080 REM  DET = 0
4090 DT= 0
4100 RETURN
4110 REM  ------- END ----------