Forum
Tipps
News
Menu-Icon

Matrizenmultiplikation forschleifen

#include <stdio.h>
#include <stdlib.h>

int main()
{   int m1,n1,m2,n2,sum=0,k;

    //Gre Matrix A
    printf ("Wieviele Zeilen soll Matrix A haben:");
    scanf("%i",&m1);
    printf("\nWieviele Spalten soll  Matrix A haben:");
    scanf("%i",&n1);

    //Gre Matrix B
    printf ("\nWieviele Zeilen soll Matrix B haben:");
    scanf("%i",&m2);
    printf("\nWieviele Spalten soll  Matrix B haben:");
    scanf("%i",&n2);

    int A[m1+1][n1+1],B[m2+1][n2+1],i=1,j=1,C[m1+1][n2+1];
//Matrix A init
for (j=0;j<m1;j++)
    {for (i=0;i<n1;i++)
   {printf("\nGeben Sie den Wert fur Matrix A Zeile%i/Spalte%i ein:",j+1,i+1);
    scanf("%i",&A[j]);}}
//Matrix B init
for (j=0;j<m2;j++)
    {for (i=0;i<n2;i++)
   {printf("\nGeben Sie den Wert fur Matrix B Zeile%i/Spalte%i ein:",j+1,i+1);
    scanf("%i",&B[j]);}}


//Matrix A ausgeben
printf("\nSie haben Matrix A wiefolgt initialisiert:\n");
for(j=0; j<m1; j++) {

   for(i=0; i<n1; i++) {
        printf(" %i  ", A[j]);
   }
      printf("\n");
}
//Matrix B ausgeben
printf("\nSie haben Matrix B wiefolgt initialisiert:\n");
for(j=0; j<m2; j++) {

   for(i=0; i<n2; i++) {
       printf(" %i  ", A[j]);
   }

   printf("\n");
}

//case abfrage ob Multiplizieren oder Addieren
int fall;
printf("\n Wollen Sie Ihre eingegebenen Matrizen Addieren geben Sie 1 ein:\n Wollen Sie Ihre eingegebenen Matrizen Multiplizieren geben sie 2 ein:\n");
scanf("%i",&fall);




switch (fall)
{//fall 1 Addieren
    case 1:
 if (m1==m2&& n1==n2&& fall==1)
 {
     for (j=0;j<m1;j++)
        {for (i=0;i<n1;i++)
        {A[j]=A[j]+B[j];
        }}
        printf("\nIhre Matrizen wurden Addiert und es fuehrte zu folgendem Ergebnis:\n");
        for(j=0; j<m1; j++)
{

   for(i=0; i<n1; i++) {
      printf(" %i  ", A[j]);

   }
      printf("\n");
}
 }

 else
    printf("\nEine Addition ist nicht mglich da Ihre Matrizen unterschiedlich gro sind!");
break;

//fall 2 Multiplizieren
    case 2:
        if(n1==m2)
        {  for (j=0;j<m2;j++)
           {for (k=0;k<n2;k++)
            {for (i=0;i<n1;i++)
            sum=sum+A[j]*B[j+k];}
               C[j][k]=sum;
           }
           printf("\nDie Multiplikation ergab folgendes Ergebnis:\n");
            for(j=0; j<m1; j++) {

            for(i=0; i<n2; i++) {
            printf(" %i  ", C[j]);
                }

            printf("\n");
}
}
        else
        printf("\nEine Multiplikation n ist nicht mglich da die Spaltenanzahl von Matrix A nicht mit der Zeilenanzahl von Matrix B bereinstimmt!");
        break;

        default : printf("Porgrammfehler");
}








    return 0;


}



Das Problem dass ich habe ist bei case 2 die multiplikation funktioniert nicht.


Antworten zu Matrizenmultiplikation forschleifen:

was heist das funktioniert nicht du musst schon bedenken dass man spalte mit zeile malnimmt und das must du entsprechend in den variablen ueber die schleifen einproggen

http://statistik.wu-wien.ac.at/~leydold/MOK/HTML/node17.html

a11*b11
a12*b21
a13*b31

a21*b12
a22*b22
a23*b32

c31*b13
c32*b23
c33*b33

//fall 2 Multiplizieren
    case 2:
        if(n1==m2)
        {  for (j=0;j<m1;j++)
           {for (k=0;k<n2;k++)
            {for (i=0;i<n1;i++)
            sum=sum+A[j]*B[k];

               C[j][k]=sum;
               sum=0;}
           }
           printf("\nDie Multiplikation ergab folgendes Ergebnis:\n");
            for(j=0; j<m1; j++) {

            for(i=0; i<n2; i++) {
            printf(" %i  ", C[j]);
                }

            printf("\n");
}
}
        else
        printf("\nEine Multiplikation n ist nicht mglich da die Spaltenanzahl von Matrix A nicht mit der Zeilenanzahl von Matrix B bereinstimmt!");
        break;

        default : printf("Porgrammfehler");
}

habs lösen können hatte sum =0 vergessen in der k schleife

sum also summe mhhh du willst malnehmen und nich plus  [???]


« Turbo-Pascal Dreieck berechnenProgramm das Binärzahlen überprüft »
 

Schnelle Hilfe: Hier nach ähnlichen Fragen und passenden Tipps suchen!