2016-10-14 2 views
-2

Ich habe diesen Basiscode für meine Schulklasse geschrieben. Der Code wird ausgeführt, berechnet die multiplizierte Matrix jedoch nicht korrekt. Soweit ich das beurteilen kann, ist nichts falsch, aber deshalb bin ich hier. Es gibt mir Zahlen in Millionenhöhe.
Danke für jede Hilfe, die jemand zur Verfügung stellen kann.Multiplizierende Matrizen geben keine richtige Antwort

Ich denke, dass dieser Multiplikationsteil stimmt, was ich an anderer Stelle in diesen Foren gelesen habe.

#include<stdio.h> 

int main() 
{ 
int a[10][10], c[10][10], i, j, k; 
int sum = 0; 
printf("Enter your values for the 2x4 matrix:\n"); 
for (i = 0; i < 4; i++) 
{ 
    for (j = 0; j < 2; j++) 
    { 
     scanf("%d", &a[i][j]); 
    } 
} 
int b[3][3]; 
b[0][0]=2; 
b[1][0]=41; 
b[2][0]=12; 
b[3][0]=15; 
b[0][1]=7; 
b[0][2]=34; 
b[0][3]=3; 
b[1][1]=32; 
b[2][1]=1; 
b[3][1]=5; 
b[1][2]=13; 
b[1][3]=6; 
b[2][2]=0; 
b[3][2]=7; 
b[2][3]=11; 
b[3][3]=9; 
for (i = 0; i <= 3; i++) 
{ 
    for (j = 0; j <= 1; j++) 
    { 
     sum = 0; 
     for (k = 0; k <= 2; k++) 
     { 
      sum = sum + a[i][k] * b[k][j]; 
     } 
     c[i][j] = sum; 
    } 
} 
printf("Multiplication Of Two Matrices: \n"); 
for (i = 0; i < 2; i++) 
{ 
    for (j = 0; j < 4; j++) 
    { 
     printf(" %d ", c[i][j]); 
    } 
    printf("\n"); 
} 
return 0; 
} 
+6

Sie Ihre Array-Grenzen in 'b' zu verletzen, und als solche rufenden * undefiniert Verhalten *. "b" wird als "int b [3] [3]" deklariert. Das erste Element ist "b [0] [0]", das letzte ist "b [2] [2]". Alles mit einer "3" oder größer in * entweder * tiefgestellten Position ist falsch. – WhozCraig

+0

Größe der Matrix 'b' ist' int b [3] [3]; 'Sie können nicht ausführen b [0] [3] = 3;', 'b [1] [3] = 6;', 'b [2] [3] = 11; 'und' b [3] [3] = 9; 'Da die Größe 3x3 ist, können Sie auf Index 0,1 und 2 zugreifen. – Himanshu

+0

Matrix A ist 4 * 2. Sie brauchen Matrix B um 2 * n zu multiplizieren. Dann ist die resultierende Matrix von der Größe 4 * n –

Antwort

1

Es gibt viele Fehler:

  • Ihr Fehler ist in der Definition des b matrice. es ist von der Größe 3x3, aber Ihre Definition macht es von 4x4. Um klar zu sein, beginnt b von b[0][0] und endet bei b[2][2], so dass 3x3=9 Elemente haben.
  • Matrix a ist von Größe 4x2. Matrix b ist von Größe 3x3. Die zwei können nicht multipliziert werden. entweder die Matrix b sollte auf 2x3 Größe oder a auf 4x3 Größe geändert werden.

So wird der richtige Code sein:

#include<stdio.h> 

    int main() 
    { 
    int a[10][10], c[10][10], i, j, k; 
    int sum = 0; 
    printf("Enter your values for the 2x4 matrix:\n"); 
    for (i = 0; i < 4; i++) 
    { 
     for (j = 0; j < 3; j++) 
     { 
      scanf("%d", &a[i][j]); 
     } 
    } 
    int b[3][3]; 
    b[0][0]=2; 
    b[1][0]=41; 
    b[2][0]=12; 
    /* b[3][0]=15; */ 
    b[0][1]=7; 
    b[0][2]=34; 
    b[0][3]=3; 
    b[1][1]=32; 
    b[2][1]=1; 
    /* b[3][1]=5; */ 
    b[1][2]=13; 
    b[1][3]=6; 
    b[2][2]=0; 
    b[3][2]=7; 
    b[2][3]=11; 
    /* b[3][3]=9; */ 
    for (i = 0; i <= 3; i++) 
    { 
     for (j = 0; j <= 1; j++) 
     { 
      sum = 0; 
      for (k = 0; k <= 2; k++) 
      { 
       sum = sum + a[i][k] * b[k][j]; 
      } 
      c[i][j] = sum; 
     } 
    } 
    printf("Multiplication Of Two Matrices: \n"); 
    for (i = 0; i < 2; i++) 
    { 
     for (j = 0; j < 4; j++) 
     { 
      printf(" %d ", c[i][j]); 
     } 
     printf("\n"); 
    } 
    return 0; 
    } 
Verwandte Themen