Умножение матриц си++
Я заметил, что у меня функция пропускает последнюю строку, если матрица не квадратная при умножении. Ошибку пока не вижу, поэтому прошу помочь.
void multiplication(int (&a1)[4][4], int (&b)[4][4], int (&c)[4][4], int n, int l){
for (int i=0; i<n; i++){
for (int j=0; j<l; j++){
for(int k=0; k<n; k++){
int save = a1[i][k]*b[k][j];
c[i][j] += save;
save = 0;
}
}
}
}
Условие для умножения матриц (количество строк одной=количество столбцов второй) проверяется в другой функции.
Ответы (1 шт):
Вам не нужен новый цикл, вам нужно чтобы функция знала о всех размерах матриц, сейчас вы передаете n и l этого хватит только для умножения квадратный матриц по типу 4 на 4.
При умножении матрицы 3 на 4 с 4 на 2 заметьте, что у вас 3 числа это 3, 4, 2, а ваша функция на данный момент может узнать только о двух из них.
Вот правильный пример вашей функции:
//row1 - кол-во строк в матрице a1, col1 - кол-во столбцов в 1
матрице, col2 - кол-во столбвоц во 2 матрице
void multiplication(int(&a1)[4][4], int(&b)[4][4], int(&c)[4][4], int row1, int col1, int col2) {
for (int i = 0; i < row1; i++) {
for (int j = 0; j < col2; j++) {
c[i][j] = 0;
for (int k = 0; k < col1; k++)
c[i][j] += a1[i][k] * b[k][j];
}
}
}
Для большего понимания, я переименовал переменные и подписал в комментарии, что они обозначают.
Теперь чтобы умножить матрицу 3 на 4 и 4 на 2 нужно вызывать функцию так:
multiplication(a, b, c, 3, 4, 2);