#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
#define ZEILENZAHL1 4
#define SPALTENZAHL1 3
#define ZEILENZAHL2 3
#define SPALTENZAHL2 4
#define ZEILENZAHL3 4
#define SPALTENZAHL3 4
 
void funktioneingabematrix1(int[][SPALTENZAHL1],int);
void funktioneingabematrix2(int[][SPALTENZAHL2],int);
void funktionberechnungergebnismatrix(int[][SPALTENZAHL3],int[][SPALTENZAHL1],int[][SPALTENZAHL2]);
void funktionausgabeergebnismatrix(int[][SPALTENZAHL3]);

int main()
{
  int matrix1[ZEILENZAHL1][SPALTENZAHL1],
  		matrix2 [ZEILENZAHL2][SPALTENZAHL2],
  		ergebnismatrix[ZEILENZAHL3][SPALTENZAHL3];

  funktioneingabematrix1(matrix1,ZEILENZAHL1);

  funktioneingabematrix2(matrix2,ZEILENZAHL2);

  funktionberechnungergebnismatrix(ergebnismatrix, matrix1, matrix2);

  funktionausgabeergebnismatrix(ergebnismatrix);

  return 0;
}
 

void funktioneingabematrix1(int matrix1[][SPALTENZAHL1],int z1)
{
  int zaehl1,zaehl2, counter=0;
  printf("Bitte geben Sie die erste Matrix ein\n");
  for(zaehl1=0;zaehl1<z1;zaehl1++)
      for(zaehl2=0;zaehl2<SPALTENZAHL1;zaehl2++)
         {
           scanf("%i",&matrix1[zaehl1][zaehl2]);
           counter++;
           if(counter==SPALTENZAHL1)
              {
                  printf("\n");
                  counter=0;
              }
         }
 
}
 
void funktioneingabematrix2(int matrix2[][SPALTENZAHL2],int z2)
{
 int zaehl1,zaehl2, counter=0;
 printf("Bitte geben Sie die zweite Matrix ein\n");
  for(zaehl1=0;zaehl1<z2;zaehl1++)
      for(zaehl2=0;zaehl2<SPALTENZAHL2;zaehl2++)
      {
          scanf("%i",&matrix2[zaehl1][zaehl2]);
          counter++;
          if(counter==SPALTENZAHL2)
          {
              printf("\n");
              counter=0;
          }
      }
   counter=0;
}
 
void funktionberechnungergebnismatrix(int e[][SPALTENZAHL3],int m1[][SPALTENZAHL1],int m2[][SPALTENZAHL2])
{
    int zaehl1,zaehl2,x=0;
    for(zaehl1=0;zaehl1<ZEILENZAHL3;zaehl1++)
      for(zaehl2=0;zaehl2<SPALTENZAHL3;zaehl2++)
         for(e[zaehl1][zaehl2]=x=0;x<SPALTENZAHL1;++x)
            e[zaehl1][zaehl2]+=m1[zaehl1][x]*m2[x][zaehl2];
}
 
void funktionausgabeergebnismatrix(int ergebnismatrix[][SPALTENZAHL3])
{
    int zaehl1,zaehl2, counter=0;
    printf("Die resultierende Matrix aus Matrix1 * Matrix 2 lautet: \n");
    for(zaehl1=0;zaehl1<ZEILENZAHL3;zaehl1++)
      for(zaehl2=0;zaehl2<SPALTENZAHL3;zaehl2++)
          {
              printf("%i ", ergebnismatrix[zaehl1][zaehl2]);
              counter++;
              if(counter==SPALTENZAHL3)
              {
                  printf("\n");
                  counter=0;}
          }
           
}
