RosettaCodeData/Task/Reduced-row-echelon-form/BBC-BASIC/reduced-row-echelon-form.basic
2023-07-01 13:44:08 -04:00

42 lines
1.1 KiB
Text

DIM matrix(2,3)
matrix() = 1, 2, -1, -4, \
\ 2, 3, -1, -11, \
\ -2, 0, -3, 22
PROCrref(matrix())
FOR row% = 0 TO 2
FOR col% = 0 TO 3
PRINT matrix(row%,col%);
NEXT
PRINT
NEXT row%
END
DEF PROCrref(m())
LOCAL lead%, nrows%, ncols%, i%, j%, r%, n
nrows% = DIM(m(),1)+1
ncols% = DIM(m(),2)+1
FOR r% = 0 TO nrows%-1
IF lead% >= ncols% EXIT FOR
i% = r%
WHILE m(i%,lead%) = 0
i% += 1
IF i% = nrows% THEN
i% = r%
lead% += 1
IF lead% = ncols% EXIT FOR
ENDIF
ENDWHILE
FOR j% = 0 TO ncols%-1 : SWAP m(i%,j%),m(r%,j%) : NEXT
n = m(r%,lead%)
IF n <> 0 FOR j% = 0 TO ncols%-1 : m(r%,j%) /= n : NEXT
FOR i% = 0 TO nrows%-1
IF i% <> r% THEN
n = m(i%,lead%)
FOR j% = 0 TO ncols%-1
m(i%,j%) -= m(r%,j%) * n
NEXT
ENDIF
NEXT
lead% += 1
NEXT r%
ENDPROC