Initial data commit
This commit is contained in:
parent
72d218235f
commit
f23f22d71c
199087 changed files with 3378941 additions and 0 deletions
|
|
@ -0,0 +1,67 @@
|
|||
Module CheckMatMult {
|
||||
\\ Matrix Multiplication
|
||||
\\ we use array pointers so we pass arrays byvalue but change this by reference
|
||||
\\ this can be done because always arrays passed by reference,
|
||||
\\ and Read statement decide if this goes to a pointer of array or copied to a local array
|
||||
\\ the first line of code for MatMul is: Read a as array, b as array
|
||||
\\ interpreter insert this at function construction.
|
||||
\\ if a pointer inside function change to point to a new array, the this has no reflect to the passed array.
|
||||
Function MatMul(a as array, b as array) {
|
||||
if dimension(a)<>2 or dimension(b)<>2 then Error "Need two 2D arrays "
|
||||
let a2=dimension(a,2), b1=dimension(b,1)
|
||||
if a2<>b1 then Error "Need columns of first array equal to rows of second array"
|
||||
let a1=dimension(a,1), b2=dimension(b,2)
|
||||
let aBase=dimension(a,1,0)-1, bBase=dimension(b,1,0)-1
|
||||
let aBase1=dimension(a,2,0)-1, bBase1=dimension(b,2,0)-1
|
||||
link a,b to a(), b() ' change interface for arrays
|
||||
dim base 1, c(a1, b2)
|
||||
for i=1 to a1 : let ia=i+abase : for j=1 to b2 : let jb=j+bBase1 : for k=1 to a2
|
||||
c(i,j)+=a(ia,k+aBase1)*b(k+bBase,jb)
|
||||
next k : next j : next i
|
||||
\\ redim to base 0
|
||||
dim base 0, c(a1, b2)
|
||||
=c()
|
||||
}
|
||||
\\ define arrays with different base per dimension
|
||||
\\ res() defined as empty array
|
||||
dim a(10 to 13, 4), b(4, 2 to 5), res()
|
||||
\\ numbers from ADA task
|
||||
a(10,0)= 1, 1, 1, 1, 2, 4, 8, 16, 3, 9, 27, 81, 4, 16, 64, 256
|
||||
b(0,2)= 4, -3, 4/3, -1/4, -13/3, 19/4, -7/3, 11/24, 3/2, -2, 7/6, -1/4, -1/6, 1/4, -1/6, 1/24
|
||||
res()=MatMul(a(), b())
|
||||
for i=0 to 3 :for j=0 to 3
|
||||
Print res(i,j),
|
||||
next j : Print : next i
|
||||
}
|
||||
CheckMatMult
|
||||
Module CheckMatMult2 {
|
||||
\\ Matrix Multiplication
|
||||
\\ pass arrays by reference
|
||||
\\ if we change a passed array here, to a new array then this change also the reference array.
|
||||
Function MatMul(&a(),&b()) {
|
||||
if dimension(a())<>2 or dimension(b())<>2 then Error "Need two 2D arrays "
|
||||
let a2=dimension(a(),2), b1=dimension(b(),1)
|
||||
if a2<>b1 then Error "Need columns of first array equal to rows of second array"
|
||||
let a1=dimension(a(),1), b2=dimension(b(),2)
|
||||
let aBase=dimension(a(),1,0)-1, bBase=dimension(b(),1,0)-1
|
||||
let aBase1=dimension(a(),2,0)-1, bBase1=dimension(b(),2,0)-1
|
||||
dim base 1, c(a1, b2)
|
||||
for i=1 to a1 : let ia=i+abase : for j=1 to b2 : let jb=j+bBase1 : for k=1 to a2
|
||||
c(i,j)+=a(ia,k+aBase1)*b(k+bBase,jb)
|
||||
next k : next j : next i
|
||||
\\ redim to base 0
|
||||
dim base 0, c(a1, b2)
|
||||
=c()
|
||||
}
|
||||
\\ define arrays with different base per dimension
|
||||
\\ res() defined as empty array
|
||||
dim a(10 to 13, 4), b(4, 2 to 5), res()
|
||||
\\ numbers from ADA task
|
||||
a(10,0)= 1, 1, 1, 1, 2, 4, 8, 16, 3, 9, 27, 81, 4, 16, 64, 256
|
||||
b(0,2)= 4, -3, 4/3, -1/4, -13/3, 19/4, -7/3, 11/24, 3/2, -2, 7/6, -1/4, -1/6, 1/4, -1/6, 1/24
|
||||
res()=MatMul(&a(), &b())
|
||||
for i=0 to 3 :for j=0 to 3
|
||||
Print res(i,j),
|
||||
next j : Print : next i
|
||||
}
|
||||
CheckMatMult2
|
||||
Loading…
Add table
Add a link
Reference in a new issue