У меня проблема с моим заданием, где у меня есть три матрицы. Я должен умножить первый (а) на второй (б), а результат вернуть в третий (с). Также стоит сказать, что я могу двигаться только по указателям, я не могу использовать индекс в циклах.
Основная проблема в том случае, когда dim1 == dim и матрица не квадратная. Все должно быть написано на C ++. Мой код возвращает почти хороший результат, но похоже, что в первой строке я передаю значения мусора. Похоже, я не заполняю их значениями. Буду признателен за любую помощь. Спасибо
void multiply(int* a[], int* b[], int* c[], int dim1, int dim2, int
dim3){
for(int i = 0; i < dim1; i++){
for(int j = 0; j < dim3; j++){
for( int k = 0; k < dim2; k++){
*(*(c+i)+j) += *(*(a+i)+k) * *(*(b+k)+j);
}
}
}
for(int i = 0; i < dim1; i++){
for(int j = 0; j < dim3; j++){
cout << *(*(c+i)+j) << "\t";
}
cout << endl;
}
}
int main(){
const int dim1 = 3;
const int dim2 = 2;
const int dim3 = 3;int a[dim1][dim2] = {{1,2},{3,4},{5,6}};
int b[dim2][dim3] = {{1,2,3},{4,5,6}};
int c[dim1][dim3] = {};
int *tab1 [dim1];
int *tab2 [dim2];
int *tab3 [dim3];for(int i = 0; i < dim1; i++){
*(tab1+i) = *(a+i);
*(tab2+i) = *(b+i);
*(tab3+i) = *(c+i);
}
multiply(tab1,tab2,tab3,dim1,dim2,dim3);
}
Все правильно кроме tab
инициализация. Вы итератор dim1=3
, но tab2
является dim2=2
размер. Попробуй это:
const int dim1 = 3;
const int dim2 = 2;
const int dim3 = 3;
void multiply(int a[dim1][dim2], int b[dim2][dim3], int c[dim1][dim3], int dim1, int dim2, int
dim3){
for(int i = 0; i < dim1; i++){
for(int j = 0; j < dim3; j++){
for( int k = 0; k < dim2; k++){
*(*(c+i)+j) += *(*(a+i)+k) * *(*(b+k)+j);
}
}
}
for(int i = 0; i < dim1; i++){
for(int j = 0; j < dim3; j++){
cout << *(*(c+i)+j) << "\t";
}
cout << endl;
}
}
int main()
{
int a[dim1][dim2] = {{1,2},{3,4},{5,6}};
int b[dim2][dim3] = {{1,2,3},{4,5,6}};
int c[dim1][dim3] = {};
multiply(a,b,c,dim1,dim2,dim3);
}
Других решений пока нет …