Mnożenie macierzy

0

Możecie mi pomóc, bo nie wiem jak zapisać, żeby pomnożył dwie macierze?

void Mnozenie()//!odejmowanie dwóch macierzy
{
    int n,m,i,j,liczba;
    int **tabA,**tabB,**tabW;
    system("cls");
    printf("Ile wierszy? ");
    scanf("%d", &n);
    printf("Ile kolumn? ");
    scanf("%d", &m);
    tabA=(int**)malloc(n*sizeof(int *));//deklaracja pamięci dla macierzy A
        for(i=0; i<m; i++)
      {
                tabA[i]=(int*)malloc(m*sizeof(int));
      }
    tabB=(int**)malloc(n*sizeof(int *));//deklaracja pamięci dla macierzy B
        for(i=0; i<m; i++)
      {
                tabB[i]=(int*)malloc(m*sizeof(int));
      }
   tabW=(int**)malloc(n*sizeof(int *));//deklaracja pamięci dla macierzy W-Wynikowej
        for(i=0; i<m; i++)
      {
                tabW[i]=(int*)malloc(m*sizeof(int));
      }

    ///////
    printf("\nMacierz A\n");
    for (i = 0; i < n; i++)//!wypelnienie macierzy A
    {
        for (j = 0; j < m; j++)
        {
            printf("Podaj liczbe (%d/%d): ",i + 1,j + 1);
            scanf("%d", &liczba);
            tabA[i][j] = liczba;
        }
    }
    printf("\nMacierz B\n");
    for (i = 0; i < n; i++)//!wypelnienie macierzy B
    {
        for (j = 0; j < m; j++)
        {
            printf("Podaj liczbe (%d/%d): ",i + 1,j + 1);
            scanf("%d", &liczba);
            tabB[i][j] = liczba;
            tabW[i][j] = tabA[i][j] * tabB[i][j];
        }
    }
    printf("\nMacierz A ma postac: \n");//!wypisanie macierzy A
    for (i = 0; i < n; i++)
    {
        for (j = 0; j < m; j++)
        {
            printf("%d  ",tabA[i][j]);
        }
        printf("\n");
    }
    printf("\nMacierz B ma postac: \n");//!wypisanie macierzy B
    for (i = 0; i < n; i++)
    {
        for (j = 0; j < m; j++)
        {
            printf("%d  ",tabB[i][j]);
        }
        printf("\n");
    }
    printf("\nMacierz WYNIKOWA ma postac: \n");//!wypisanie macierzy B
    for (i = 0; i < n; i++)
    {
        for (j = 0; j < m; j++)
        {
            printf("%d  ",tabW[i][j]);
        }
        printf("\n");
    }

} 
4
  1. void Mnozenie()//!odejmowanie dwóch macierzy genialne
  2. Funkcja mnożąca nie powinna nic wczytywać ani wypisywać. Powinna dostać argumenty i zwrócić wynik.
  3. Mnożenie masz opisane tutaj: https://pl.wikipedia.org/wiki/Mno%C5%BCenie_macierzy Dla każdego elementu macierzy musisz wykonać n mnożeń odpowiednik elementów macierzy źródłowych. Nie widzę tego w Twoim kodzie.
  4. masz wycieki pamięci, nigdzie nie zwalniasz zaalokowanej pamięci.
2

...
5. Zapoznaj się z pojęciem formatowania kodu: http://4programmers.net/Forum/998482 wygląda tak jak by walczyłeś z IDE który próbuje porządek podtrzymać
6. Zapoznaj się z inkrementacją, bo jej nie rozumiesz: http://4programmers.net/Forum/1101404
7. Nie używaj innego niż angielskie nazewnictwa: http://4programmers.net/Forum/1208091
8. Stosuj się do zasady DRY, skooro już napisałeś kod wczytujący macierz to zastosuj go w funkcji dla obu macierzy. To samo dotyczy wyświetlenia.

0

Nie lepiej użyć GLM czy czegoś podobnego?

0

To prawdopodobnie zadanie z jakiegoś kursu C w technikum, gdzie ma zaimplementować to samodzielnie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1