Matrix multiplication: Difference between revisions

Content added Content deleted
(Undo revision 198285 by Bearophile (talk))
No edit summary
Line 3,250: Line 3,250:
<0/1,0/1,1/1,0/1>,
<0/1,0/1,1/1,0/1>,
<0/1,0/1,0/1,1/1>></pre>
<0/1,0/1,0/1,1/1>></pre>

=={{header|Visual FoxPro}}==
<lang vfp>
LOCAL ARRAY a[4,2], b[2,3], c[4,3]
CLOSE DATABASES ALL
*!* The arrays could be created directly but I prefer to do this:
CREATE CURSOR mat1 (c1 I, c2 I)
CREATE CURSOR mat2 (c1 I, c2 I, c3 I)
*!* Since matrix multiplication of integer arrays
*!* involves only multiplication and addition,
*!* the result will contain integers
CREATE CURSOR result (c1 I, c2 I, c3 I)
INSERT INTO mat1 VALUES (1, 2)
INSERT INTO mat1 VALUES (3, 4)
INSERT INTO mat1 VALUES (5, 6)
INSERT INTO mat1 VALUES (7, 8)
SELECT * FROM mat1 INTO ARRAY a

INSERT INTO mat2 VALUES (1, 2, 3)
INSERT INTO mat2 VALUES (4, 5, 6)
SELECT * FROM mat2 INTO ARRAY b
STORE 0 TO c
MatMult(@a,@b,@c)
SELECT result
APPEND FROM ARRAY c
BROWSE


PROCEDURE MatMult(aa, bb, cc)
LOCAL n As Integer, m As Integer, p As Integer, i As Integer, j As Integer, k As Integer
IF ALEN(aa,2) = ALEN(bb,1)
n = ALEN(aa,2)
m = ALEN(aa,1)
p = ALEN(bb,2)
FOR i = 1 TO m
FOR j = 1 TO p
FOR k = 1 TO n
cc[i,j] = cc[i,j] + aa[i,k]*bb[k,j]
ENDFOR
ENDFOR
ENDFOR
ELSE
? "Invalid dimensions"
ENDIF
ENDPROC
</lang>


=={{header|XPL0}}==
=={{header|XPL0}}==