-1
3 행렬이있는 내 과제에 문제가 있습니다. 나는 첫 번째 (a)를 두 번째 (b)로 곱해야하고 결과는 세 번째 (c)로 반환해야합니다. 포인터로만 움직일 수 있다는 것을 말할 가치가 있습니다. 루프에서 인덱스를 사용할 수 없습니다.C++에서 다른 행렬에 행렬 곱하기
주요 문제는 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);
}
'k' 루프 전에'* (* (c + i) + j) = 0'을 설정해야합니다. – LutzL