2017-03-31 11 views
-1

3つの行列がある私の割り当てに問題があります。私は最初に1つ(a)を2番目に(b)、結果を3番目に戻す(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); 
}                   
+1

'k'ループの前に' *(*(c + i)+ j)= 0'を設定してください。 – LutzL

答えて

0

tabを除いてすべて正しいです。反復子はdim1=3ですが、tab2dim2=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); 
} 
関連する問題