2016-04-20 18 views
-3

Ich habe versucht, diesen Code aber etwas falschWie Matrixmultiplikation in der Sprache C

 for (i = 0; i < row1; i++) { 
     for (j = 0; j < col2; j++) 
      suma = 0; 
      for (l = 0; l < row2; l++) 
      suma += a[i][l] * bt[l][j]; 
      c[i][j] = suma;    
    } 
    printf("\nMultiplication of 2 matrices:\n"); 
    for (i = 0; i < row1; i++) { 
     for (j = 0; j < col2; j++) 
      printf("%2d", c[i][j]); 
     printf("\n"); 
    } 

wenn ich debuggen es druckt es aus Zufallszahlen in beiden Reihen und Spalten (so etwas wie -895.473)

+0

http://stackoverflow.com/questions/6311309/how-can-i-multiply-two-matrices-in-c –

Antwort

5

berechnen Fehlende Zahnspange.

for (i = 0; i < row1; i++) { 
    for (j = 0; j < col2; j++) { // added brace 
     suma = 0; 
     for (l = 0; l < row2; l++) { // added brace 
      suma += a[i][l] * bt[l][j]; 
     } // added brace 
     c[i][j] = suma;    
    } // added brace 
} 

Die Streben sind auf der Innenseite nicht unbedingt notwendig aber wenn Sie immer Klammern verwenden, sind Sie weniger wahrscheinlich, dass diese besondere Fehler in der Zukunft zu machen.

Ohne die Klammern, sieht es so aus, richtig eingerückt:

for (i = 0; i < row1; i++) { 
    for (j = 0; j < col2; j++) 
     suma = 0; 
    // Note that j = col2, which means that we are accessing 
    // array elements out of bounds, which is an error. 
    for (l = 0; l < row2; l++) 
     suma += a[i][l] * bt[l][j]; 
    c[i][j] = suma;    
} 

Diese mehr offensichtlich falsch ist. Eine weitere Möglichkeit, den Fehler weniger wahrscheinlich zu machen, ist die Variablen innerhalb der Schleifen zu bewegen:

for (int i = 0; i < row1; i++) { 
    for (int j = 0; j < col2; j++) { 
     double suma = 0; 
     for (int l = 0; l < row2; l++) { 
      suma += a[i][l] * bt[l][j]; 
     } 
     c[i][j] = suma;    
    } 
} 

Auf diese Weise, wenn Sie die Klammern entfernen, wird eine Fehlermeldung angezeigt, weil j nicht definiert ist. (Dies funktioniert nicht in C90, aber das ist alte Geschichte in diesen Tagen.)

+0

Sorry but es hat nicht funktioniert. – CoolPigeon

+0

@CoolPigeon: Funktioniert für mich: https://ideone.com/J56xiH –

+0

Hier ist mein gesamter Code: * https: //ideone.com/pdBf8K*. Ich würde mich freuen, wenn Sie mir sagen könnten, was ich falsch gemacht habe. – CoolPigeon