I noticed that my function skips the last row if the matrix is not square when multiplying. I don’t see an error yet, so please help.
void multiplication (int (& amp; a1) [4] [4], int (& amp; b) [4] [ 4], int (& amp; c) [4] [4], int n, int l) {
for (int i = 0; i & lt; n; i ++) {
for (int j = 0; j & lt; l; j ++) {
for (int k = 0; k & lt; n; k ++) {
int save = a1 [i] [k] * b [k] [j];
c [i] [j] + = save;
save = 0;
}
}
}
}
The condition for matrix multiplication (the number of rows in one = the number of columns in the second) is checked in another function.
Answer 1, authority 100%
You don’t need a new loop, you need the function to know about all matrix sizes, now you pass n
and l
this is enough only for multiplying square matrices like 4 by 4
.
When multiplying the 3 by 4
matrix from 4 by 2
, notice that you have 3 numbers that are 3, 4, 2
, and yours the function can currently only learn about two of them.
Here is a correct example of your function:
// row1 - number of rows in matrix a1, col1 - number of columns in 1
matrix, col2 - number of columns in matrix 2
void multiplication (int (& amp; a1) [4] [4], int (& amp; b) [4] [4], int (& amp; c) [4] [4], int row1, int col1, int col2 ) {
for (int i = 0; i & lt; row1; i ++) {
for (int j = 0; j & lt; col2; j ++) {
c [i] [j] = 0;
for (int k = 0; k & lt; col1; k ++)
c [i] [j] + = a1 [i] [k] * b [k] [j];
}
}
}
For better understanding, I renamed the variables and signed in the comments what they mean.
Now, to multiply the matrix 3 by 4
and 4 by 2
, you need to call the function like this:
multiplication (a, b, c, 3, 4, 2);