Mnożenie macierz, błąd

Mnożenie macierz, błąd
WO
  • Rejestracja:około 10 lat
  • Ostatnio:prawie 5 lat
  • Postów:49
0
Kopiuj
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 :(

Patryk27
Co to znaczy coś nie działa ?
WO
  • Rejestracja:około 10 lat
  • Ostatnio:prawie 5 lat
  • Postów:49
0

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

Patryk27
Na komentarze odpowiadaj w komentarzach :P
Patryk27
Moderator
  • Rejestracja:ponad 17 lat
  • Ostatnio:ponad rok
  • Lokalizacja:Wrocław
  • Postów:13042
0

Dlaczego nadpisujesz swoje tablice wejściowe?


WO
  • Rejestracja:około 10 lat
  • Ostatnio:prawie 5 lat
  • Postów:49
0

jak to?

Patryk27
Moderator
  • Rejestracja:ponad 17 lat
  • Ostatnio:ponad rok
  • Lokalizacja:Wrocław
  • Postów:13042
0

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


WO
  • Rejestracja:około 10 lat
  • Ostatnio:prawie 5 lat
  • Postów:49
0

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

WO
  • Rejestracja:około 10 lat
  • Ostatnio:prawie 5 lat
  • Postów:49
0

tzn. chciałem zrobić dynamiczną macierz

Patryk27
Moderator
  • Rejestracja:ponad 17 lat
  • Ostatnio:ponad rok
  • Lokalizacja:Wrocław
  • Postów:13042
0

Co masz na myśli?


WO
  • Rejestracja:około 10 lat
  • Ostatnio:prawie 5 lat
  • Postów:49
0

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

Patryk27
Moderator
  • Rejestracja:ponad 17 lat
  • Ostatnio:ponad rok
  • Lokalizacja:Wrocław
  • Postów:13042
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.


WO
  • Rejestracja:około 10 lat
  • Ostatnio:prawie 5 lat
  • Postów:49
0

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

Patryk27
Moderator
  • Rejestracja:ponad 17 lat
  • Ostatnio:ponad rok
  • Lokalizacja:Wrocław
  • Postów:13042
0

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


WO
  • Rejestracja:około 10 lat
  • Ostatnio:prawie 5 lat
  • Postów:49
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).
Patryk27
Moderator
  • Rejestracja:ponad 17 lat
  • Ostatnio:ponad rok
  • Lokalizacja:Wrocław
  • Postów:13042
0

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


Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.