Element-wise operations: Difference between revisions
Content deleted Content added
SqrtNegInf (talk | contribs) m →{{header|Perl 6}}: added custom infix op, revised output format |
m →{{header|REXX}}: changed/added comments and whitespace, changed indentations. |
||
Line 1,396: | Line 1,396: | ||
=={{header|REXX}}== |
=={{header|REXX}}== |
||
===discrete=== |
===discrete=== |
||
<lang rexx>/*REXX program multiplies two matrixes together, |
<lang rexx>/*REXX program multiplies two matrixes together, displays the matrixes and the result.*/ |
||
m=(1 2 3) (4 5 6) (7 8 9) |
m=(1 2 3) (4 5 6) (7 8 9) |
||
w=words(m); do k=1; if k*k>=w then leave; end /*k*/; rows=k; cols=k |
w=words(m); do k=1; if k*k>=w then leave; end /*k*/; rows=k; cols=k |
||
call showMat M, 'M matrix' |
call showMat M, 'M matrix' |
||
answer=matAdd(m, 2 ); call showMat answer, 'M matrix, added 2' |
answer=matAdd(m, 2 ); call showMat answer, 'M matrix, added 2' |
||
answer=matSub(m, 7 ); call showMat answer, 'M matrix, subtracted 7' |
answer=matSub(m, 7 ); call showMat answer, 'M matrix, subtracted 7' |
||
answer=matMul(m, 2.5); call showMat answer, 'M matrix, multiplied by 2½' |
answer=matMul(m, 2.5); call showMat answer, 'M matrix, multiplied by 2½' |
||
answer=matPow(m, 3 ); call showMat answer, 'M matrix, cubed' |
answer=matPow(m, 3 ); call showMat answer, 'M matrix, cubed' |
||
answer=matDiv(m, 4 ); call showMat answer, 'M matrix, divided by 4' |
answer=matDiv(m, 4 ); call showMat answer, 'M matrix, divided by 4' |
||
answer=matIdv(m, 2 ); call showMat answer, 'M matrix, integer halved' |
answer=matIdv(m, 2 ); call showMat answer, 'M matrix, integer halved' |
||
answer=matMod(m, 3 ); call showMat answer, 'M matrix, modulus 3' |
answer=matMod(m, 3 ); call showMat answer, 'M matrix, modulus 3' |
||
exit /*stick a fork in it, we're done.*/ |
exit /*stick a fork in it, we're all done. */ |
||
/*──────────────────────────────────────────────────────────────────────────────────────*/ |
|||
/*──────────────────────────────────SHOWMAT subroutine──────────────────*/ |
|||
matAdd: parse arg @,#; call mat#; do j=1 for w; !.j=!.j+#; end; return mat@() |
|||
matSub: parse arg @,#; call mat#; do j=1 for w; !.j=!.j-#; end; return mat@() |
|||
⚫ | |||
⚫ | |||
⚫ | |||
n=0 |
|||
matIdv: parse arg @,#; call mat#; do j=1 for w; !.j=!.j%#; end; return mat@() |
|||
do |
matPow: parse arg @,#; call mat#; do j=1 for w; !.j=!.j**#; end; return mat@() |
||
⚫ | |||
⚫ | |||
mat#: w=words(@); do j=1 for w; !.j=word(@,j); end; return |
|||
return |
|||
mat@: @=!.1; do j=2 to w; @=@ !.j; end; return @ |
|||
/*──────────────────────────────────one-liner subroutines───────────────*/ |
|||
/*──────────────────────────────────────────────────────────────────────────────────────*/ |
|||
⚫ | |||
showMat: parse arg @, hdr; L=0; say |
|||
⚫ | |||
do j=1 for w; L=max(L,length(word(@,j))); end |
|||
⚫ | |||
⚫ | |||
⚫ | |||
matIdv: arg @,#; call mat#; do j=1 for w; !.j=!.j%#; end; return mat@() |
|||
do r =1 for rows; _= |
|||
do c=1 for cols; n=n+1; _=_ right(word(@,n),L); end; say _ |
|||
end |
|||
return</lang> |
|||
'''output''' |
|||
{{out}} |
|||
<pre style="height: |
<pre style="height:63ex"> |
||
──M matrix── |
──M matrix── |
||
1 2 3 |
1 2 3 |
||
Line 1,472: | Line 1,471: | ||
===generalized=== |
===generalized=== |
||
<lang rexx>/*REXX program multiplies two matrixes together, |
<lang rexx>/*REXX program multiplies two matrixes together, displays the matrixes and the result. */ |
||
m=(1 2 3) (4 5 6) (7 8 9) |
m=(1 2 3) (4 5 6) (7 8 9) |
||
w=words(m); do k=1; if k*k>=w then leave; end /*k*/; rows=k; cols=k |
w=words(m); do k=1; if k*k>=w then leave; end /*k*/; rows=k; cols=k |
||
call showMat M, 'M matrix' |
call showMat M, 'M matrix' |
||
ans=matOp(m, '+2' ); call showMat ans, |
ans=matOp(m, '+2' ); call showMat ans, "M matrix, added 2" |
||
ans=matOp(m, '-7' ); call showMat ans, |
ans=matOp(m, '-7' ); call showMat ans, "M matrix, subtracted 7" |
||
ans=matOp(m, '*2.5' ); call showMat ans, |
ans=matOp(m, '*2.5' ); call showMat ans, "M matrix, multiplied by 2½" |
||
ans=matOp(m, '**3' ); call showMat ans, |
ans=matOp(m, '**3' ); call showMat ans, "M matrix, cubed" |
||
ans=matOp(m, '/4' ); call showMat ans, |
ans=matOp(m, '/4' ); call showMat ans, "M matrix, divided by 4" |
||
ans=matOp(m, '%2' ); call showMat ans, |
ans=matOp(m, '%2' ); call showMat ans, "M matrix, integer halved" |
||
ans=matOp(m, '//3' ); call showMat ans, |
ans=matOp(m, '//3' ); call showMat ans, "M matrix, modulus 3" |
||
ans=matOp(m, '*3-1' ); call showMat ans, |
ans=matOp(m, '*3-1' ); call showMat ans, "M matrix, tripled, less one" |
||
exit /*stick a fork in it, we |
exit /*stick a fork in it, we"re all done. */ |
||
/*──────────────────────────────────────────────────────────────────────────────────────*/ |
|||
/*──────────────────────────────────SHOWMAT subroutine──────────────────*/ |
|||
matOp: parse arg @,#; call mat#; do j=1 for w; interpret '!.'j"=!."j #;end; return mat@() |
|||
mat#: w=words(@); do j=1 for w; !.j=word(@,j); end; return |
|||
mat@: @=!.1; do j=2 to w; @=@ !.j; end; return @ |
|||
⚫ | |||
/*──────────────────────────────────────────────────────────────────────────────────────*/ |
|||
n=0 |
|||
showMat: parse arg @, hdr; say |
|||
⚫ | |||
do |
L=0; do j=1 for w; L=max(L,length(word(@,j))); end |
||
⚫ | |||
n=0 |
|||
return |
|||
⚫ | |||
/*──────────────────────────────────one-liner subroutines───────────────*/ |
|||
do c=1 for cols; n=n+1; _=_ right(word(@,n),L); end; say _ |
|||
end |
|||
return</lang> |
|||
'''output''' |
|||
{{out}} |
|||
<pre style="height: |
<pre style="height:63ex"> |
||
──M matrix── |
──M matrix── |
||
1 2 3 |
1 2 3 |