Mnożenie macierz, błąd

0
int fun(int **tab,int **tab1,int n,int m,int k,int l){
    if(m!=k) {
        printf("Blad!!");
        return -1;
        }
    tab=(int**)malloc(n*sizeof(int*));
    int i,j,s,o;
    for( i=0;i<n;i++){
        tab[i]=(int*)malloc(m*sizeof(int));
    }
    tab1=(int**)malloc(k*sizeof(int*));
    for( i=0;i<k;i++){
        tab[i]=(int*)malloc(l*sizeof(int));
    }
    int **tab2;
    tab2=(int**)malloc(n*sizeof(int*));
    for( i=0;i<n;i++){
        tab[i]=(int*)malloc(l*sizeof(int));
    }
    printf("siema");
    //mnozenie
    for(i=0;i<n;i++)
        for(j=0;j<l;j++)
    {
        s=0;
        printf("siema");
        for(o=0;o<m;o++) s+=tab[i][o]*tab1[o][j];
        tab2[i][j]=s;

    }
    printf("elo");
    int b,c;
     printf("Tablica %dx%d\n\n", n,l);
    for(b=0; b<n; b++){
        printf("\n");
        for(c=0; c<l; c++) printf("%d ", tab2[b][c]);
    }
}
int main(){

        int tab[2][2]={{1,1},{2,2}};
        int tab1[2][2]={{1,1},{2,2}};
        fun(tab,tab1,2,2,2,2);

return 0;
}

Program powinien liczyć iloczyn dwóch macierzy o wymiarach nxm i kxl i zwracać nową macierz. Jednak coś nie działa jak należy, nie mam pojęcia co :(

0

w wyniku są jakieś ogromne liczby, po czym wywala program

0

Dlaczego nadpisujesz swoje tablice wejściowe?

0

jak to?

0

W całości sam napisałeś ten kod, tak?
Wytłumacz zatem w jakim celu wykorzystujesz tam malloc na zmiennej tab.

0

no alokuje pamięć, a faktycznie może to sensu nie ma :/

0

tzn. chciałem zrobić dynamiczną macierz

0

Co masz na myśli?

0

w zaleznosci od macierzy podanej przez uzytkownika tyle pamieci zaalokuje, a to tab[][] tab1[][] to tak dla szybkich testów

1

Co wspólnego ma mieć funkcja obliczania iloczynu macierzy z wczytywaniem danych od użytkownika? Przecież to są dwa, zupełnie różne procesy.

0

wiem, czyli ogólnie te alokacje powiedzmy w mainie powinienem mieć tak?

0

Czyli ogólnie nie ma odpowiedzi na przypadek ogólny. Pokaż przykład.

0
  1. Sprawdź na czym polega działanie mnożenia macierzy. Napisz funkcję, która jako argumenty otrzymuje
    dwie macierze (dynamiczne tablice dwuwymiarowe) oraz ich wymiary, a zwraca (alokuje w pamięci i
    wypełnia) nową macierz będącą wynikiem mnożenia. Funkcja ma sygnalizować błąd w przypadku błędnych
    danych wejściowych (złe wymiary tablic).
0

No to przecież wszystko masz napisane w poleceniu, co gdzei alokować :)

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