Matrix multiplication: Difference between revisions

Content added Content deleted
m (→‎{{header|REXX}}: changed a glyph in a comment.)
m (→‎{{header|REXX}}: added/changed comments and whitespace, changed a subroutine name.)
Line 3,925: Line 3,925:
=={{header|REXX}}==
=={{header|REXX}}==
<lang rexx>/*REXX program multiplies two matrices together, displays the matrices and the results. */
<lang rexx>/*REXX program multiplies two matrices together, displays the matrices and the results. */
x.=; x.1= 1 2 /*╔═══════════════════════════════════╗*/
x.=; x.1= 1 2 /*╔═══════════════════════════════════╗*/
x.2= 3 4 /*║ As none of the matrix values have ║*/
x.2= 3 4 /*║ As none of the matrix values have ║*/
x.3= 5 6 /*║ a sign, quotes aren't needed. ║*/
x.3= 5 6 /*║ a sign, quotes aren't needed. ║*/
x.4= 7 8 /*╚═══════════════════════════════════╝*/
x.4= 7 8 /*╚═══════════════════════════════════╝*/
do r=1 while x.r\=='' /*build the "A" matrix from X. numbers.*/
do r=1 while x.r\=='' /*build the "A" matrix from X. numbers.*/
do c=1 while x.r\==''; parse var x.r a.r.c x.r; end /*c*/
do c=1 while x.r\==''; parse var x.r a.r.c x.r; end /*c*/
end /*r*/
end /*r*/
Arows= r - 1 /*adjust the number of rows (DO loop).*/
Arows= r - 1 /*adjust the number of rows (DO loop).*/
Acols= c - 1 /* " " " " cols " " .*/
Acols= c - 1 /* " " " " cols " " .*/
y.=; y.1= 1 2 3
y.=; y.1= 1 2 3
y.2= 4 5 6
y.2= 4 5 6
do r=1 while y.r\=='' /*build the "B" matrix from Y. numbers.*/
do r=1 while y.r\=='' /*build the "B" matrix from Y. numbers.*/
do c=1 while y.r\==''; parse var y.r b.r.c y.r; end /*c*/
do c=1 while y.r\==''; parse var y.r b.r.c y.r; end /*c*/
end /*r*/
end /*r*/
Brows= r - 1 /*adjust the number of rows (DO loop).*/
Brows= r - 1 /*adjust the number of rows (DO loop).*/
Bcols= c - 1 /* " " " " cols " " */
Bcols= c - 1 /* " " " " cols " " */
Line 3,944: Line 3,944:
c.= 0; do i=1 for Arows /*multiply matrix A and B ───► C */
c.= 0; do i=1 for Arows /*multiply matrix A and B ───► C */
do j=1 for Bcols
do j=1 for Bcols
do k=1 for Acols; c.i.j= c.i.j + a.i.k*b.k.j; w= max(w, length(c.i.j) )
do k=1 for Acols; c.i.j= c.i.j + a.i.k*b.k.j; w= max(w, length(c.i.j) )
end /*k*/ /* ↑ */
end /*k*/ /* ↑ */
end /*j*/ /* */
end /*j*/ /* └────────◄───────────┐ */
end /*i*/ /*max width of the matrix elements.*/
end /*i*/ /*max width of the matrix elements─►─┘ */


call showMatrix 'A', Arows, Acols /*display matrix A ───► the terminal.*/
call showMat 'A', Arows, Acols /*display matrix A ───► the terminal.*/
call showMatrix 'B', Brows, Bcols /* " " B ───► " " */
call showMat 'B', Brows, Bcols /* " " B ───► " " */
call showMatrix 'C', Arows, Bcols /* " " C ───► " " */
call showMat 'C', Arows, Bcols /* " " C ───► " " */
exit /*stick a fork in it, we're all done. */
exit /*stick a fork in it, we're all done. */
/*──────────────────────────────────────────────────────────────────────────────────────*/
/*──────────────────────────────────────────────────────────────────────────────────────*/
showMatrix: parse arg mat,rows,cols; say; say center(mat 'matrix', cols*(w+1) +9, "─")
showMat: parse arg mat,rows,cols; say; say center(mat 'matrix', cols*(w+1) + 9, "─")
do r=1 for rows; _= ' '
do r=1 for rows; _= ' '
do c=1 for cols; _=_ right(value(mat'.'r"."c), w); end; say _
do c=1 for cols; _= _ right( value(mat'.'r"."c), w); end; say _
end /*r*/
end /*r*/; return</lang>
return</lang>
{{out|output|text=&nbsp; when using the internal default input:}}
{{out|output|text=&nbsp; when using the internal default input:}}
<pre>
<pre>