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}}== |