2017-03-31 5 views
-1

Ich habe ein Problem mit meiner Aufgabe, wo ich drei Matrizen habe. Ich sollte zuerst eins (a) mit Sekunde (b) multiplizieren und das Ergebnis zurück in das dritte (c). Es lohnt sich auch zu sagen, dass ich mich nur mit Zeigern bewegen kann, ich kann den Index nicht in Schleifen verwenden.Multiplikation der Matrix mit einer anderen in C++

Das Hauptproblem ist, wenn dim1 == dim und Matrix nicht quadratisch ist. Alle sollten in C++ geschrieben sein. Mein Code gibt fast ein gutes Ergebnis zurück, aber es sieht so aus, als ob ich in der ersten Zeile Müllwerte übergebe. Es sieht so aus, als würde ich diese nicht mit Werten füllen. Ich würde mich über jede Hilfe freuen. Danke

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

Sie sollten '* (* (c + i) + j) = 0 'vor der' k' Schleife setzen. – LutzL

Antwort

0

Alles ist korrekt außer tab Initialisierung. Sie Iterator zu dim1=3, aber tab2 ist dim2=2 Größe. Versuchen Sie folgendes:

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); 
}