81 lines
1.3 KiB
Plaintext
81 lines
1.3 KiB
Plaintext
INCLUDE "D2:PRINTF.ACT" ;from the Action! Tool Kit
|
|
|
|
DEFINE PTR="CARD"
|
|
|
|
TYPE Matrix=[
|
|
BYTE width,height
|
|
PTR data] ;INT ARRAY
|
|
|
|
PROC PrintMatrix(Matrix POINTER m)
|
|
BYTE i,j
|
|
INT ARRAY d
|
|
CHAR ARRAY s(10)
|
|
|
|
d=m.data
|
|
FOR j=0 TO m.height-1
|
|
DO
|
|
FOR i=0 TO m.width-1
|
|
DO
|
|
StrI(d(j*m.width+i),s)
|
|
PrintF("%2S ",s)
|
|
OD
|
|
PutE()
|
|
OD
|
|
RETURN
|
|
|
|
PROC Create(MATRIX POINTER m BYTE w,h INT ARRAY a)
|
|
m.width=w
|
|
m.height=h
|
|
m.data=a
|
|
RETURN
|
|
|
|
PROC MatrixMul(Matrix POINTER m1,m2,res)
|
|
BYTE i,j,k
|
|
INT ARRAY d1,d2,dres,sum
|
|
|
|
IF m1.width#m2.height THEN
|
|
Print("Invalid size of matrices for multiplication!")
|
|
Break()
|
|
FI
|
|
d1=m1.data
|
|
d2=m2.data
|
|
dres=res.data
|
|
|
|
res.width=m2.width
|
|
res.height=m1.height
|
|
|
|
FOR j=0 TO res.height-1
|
|
DO
|
|
FOR i=0 TO res.width-1
|
|
DO
|
|
sum=0
|
|
FOR k=0 TO m1.width-1
|
|
DO
|
|
sum==+d1(k+j*m1.width)*d2(i+k*m2.width)
|
|
OD
|
|
dres(j*res.width+i)=sum
|
|
OD
|
|
OD
|
|
RETURN
|
|
|
|
PROC Main()
|
|
MATRIX m1,m2,res
|
|
INT ARRAY
|
|
d1=[2 1 4 0 1 1],
|
|
d2=[6 3 65535 0 1 1 0 4 65534 5 0 2],
|
|
dres(8)
|
|
|
|
Put(125) PutE() ;clear the screen
|
|
|
|
Create(m1,3,2,d1)
|
|
Create(m2,4,3,d2)
|
|
Create(res,0,0,dres)
|
|
MatrixMul(m1,m2,res)
|
|
|
|
PrintMatrix(m1)
|
|
PutE() PrintE("multiplied by") PutE()
|
|
PrintMatrix(m2)
|
|
PutE() PrintE("equals") PutE()
|
|
PrintMatrix(res)
|
|
RETURN
|