Initial data commit

This commit is contained in:
Ingy döt Net 2023-07-01 11:58:00 -04:00
parent 72d218235f
commit f23f22d71c
199087 changed files with 3378941 additions and 0 deletions

View file

@ -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