Matti Temat założony przez niniejszego użytkownika |
[C] Problem z tablicami dwuwymiarowymi i funkcją » 2012-02-06 22:06:28 Usiłuję napisać mnożenie macierzy, chciałem sprawdzić czy program do tego momentu poprawnie działa, niestety mam problem. Części programu: "zerowanie macierzy" i "mnozenie macierzy" nie chcą się wykonać. Robię błąd w:
macierz3 = ZerowanieMacierzy(macierz3, x1, y2);
return macierz3;
i odpowiednio to samo dla mnożenia macierzy.
Niestety nie wiem jak to poprawić. Może mi ktoś pomóc? Kod:
#include <stdio.h>
int ZerowanieMacierzy( int ** macierz3, int x1, int y2 ) { int i, j; for( i = 0; i < x1; ++i ) for( j = 0; j < y2; ++j ) macierz3[ i ][ j ] = 0; return macierz3; }
int MnozenieMacierzy( int ** macierz1, int ** macierz2, int x1, int y1, int x2, int y2 ) { int i, j, k; int macierz3[ x1 ][ y2 ]; for( i = 0; i < x1; ++i ) for( j = 0; j < y2; ++j ) for( k = 0; k < x1; ++k ) macierz3[ i ][ j ] +=( macierz1[ k ][ j ] * macierz2[ i ][ k ] ); return macierz3; }
int WypelnijMacierz( int x, int y ) { int i, j; int macierz[ x ][ y ]; for( i = 1; i <= x; ++i ) { for( j = 1; j <= y; ++j ) { printf( "w%d k%d:\n", i, j ); scanf( "%d", & macierz[ i - 1 ][ j - 1 ] ); } } printf( "Macierz wypelniona!\n" ); return macierz[ x ][ y ]; }
int WymiarMacierzy() { int x; scanf( "%d", & x ); return x; }
main() { int x1, x2, y1, y2; printf( "Podaj szerokosc i wysokosc pierwszej macierzy:\n" ); x1 = WymiarMacierzy(); y1 = WymiarMacierzy(); printf( "Podaj szerokosc i wysokosc drugiej macierzy:\n" ); x2 = WymiarMacierzy(); y2 = WymiarMacierzy(); if( x1 != y2 ) printf( "Nie da sie wymnozyc macierzy!" ); int macierz1[ x1 ][ y1 ], macierz2[ x2 ][ y2 ], macierz3[ x1 ][ y2 ]; macierz1[ x1 ][ y1 ] = WypelnijMacierz( x1, y1 ); macierz2[ x2 ][ y2 ] = WypelnijMacierz( x2, y2 ); macierz3 = ZerowanieMacierzy( macierz3, x1, y2 ); macierz3 = MnozenieMacierzy( macierz1, macierz2, x1, y1, x2, y2 ); return 0; }
|
|
malan |
» 2012-02-06 22:09:42 |
|
Matti Temat założony przez niniejszego użytkownika |
» 2012-02-06 22:16:00 Dobrze, ale co to ma wspólnego z moim programem? Nie widzę powiązania. Ja wchodzę do funkcji raz, obliczam w niej co trzeba i chcę wynik zwrócić jako tablicę do mojej tablicy. |
|
DejaVu |
» 2012-02-06 22:19:16 Po co funkcje zerowanieMacierzy i mnozenieMacierzy zwracają cokolwiek? :) Wywal tam te returny i daj void-a jako zwracany typ. |
|
Matti Temat założony przez niniejszego użytkownika |
» 2012-02-06 22:32:06 |
|
DejaVu |
» 2012-02-06 23:11:00 1. przy zerowaniu macierzy:
macierz3 = ZerowanieMacierzy(...)
Powinno być:
2. Przy mnożeniu analogiczna uwaga jak w pkt 1.. Ponadto masz źle zorganizowany kod, więc uwaga malana jest jak najbardziej poprawna i uzasadniona. |
|
Matti Temat założony przez niniejszego użytkownika |
» 2012-02-06 23:21:40 Poprawiłem do:
#include <stdio.h>
void ZerowanieMacierzy( int ** macierz3, int x1, int y2 ) { int i, j; for( i = 0; i < x1; ++i ) for( j = 0; j < y2; ++j ) macierz3[ i ][ j ] = 0; }
void MnozenieMacierzy( int ** macierz1, int ** macierz2, int x1, int y1, int x2, int y2, int ** macierz3 ) { int i, j, k; for( i = 0; i < x1; ++i ) for( j = 0; j < y2; ++j ) for( k = 0; k < x1; ++k ) macierz3[ i ][ j ] +=( macierz1[ k ][ j ] * macierz2[ i ][ k ] ); }
int WypelnijMacierz( int x, int y ) { int i, j; int macierz[ x ][ y ]; for( i = 1; i <= x; ++i ) { for( j = 1; j <= y; ++j ) { printf( "w%d k%d:\n", i, j ); scanf( "%d", & macierz[ i - 1 ][ j - 1 ] ); } } printf( "Macierz wypelniona!\n" ); return macierz[ x ][ y ]; }
int WymiarMacierzy() { int x; scanf( "%d", & x ); return x; }
main() { int x1, x2, y1, y2; printf( "Podaj szerokosc i wysokosc pierwszej macierzy:\n" ); x1 = WymiarMacierzy(); y1 = WymiarMacierzy(); printf( "Podaj szerokosc i wysokosc drugiej macierzy:\n" ); x2 = WymiarMacierzy(); y2 = WymiarMacierzy(); if( x1 != y2 ) printf( "Nie da sie wymnozyc macierzy!" ); int macierz1[ x1 ][ y1 ], macierz2[ x2 ][ y2 ], macierz3[ x1 ][ y2 ]; macierz1[ x1 ][ y1 ] = WypelnijMacierz( x1, y1 ); macierz2[ x2 ][ y2 ] = WypelnijMacierz( x2, y2 ); ZerowanieMacierzy( macierz3, x1, y2 ); MnozenieMacierzy( macierz1, macierz2, x1, y1, x2, y2, macierz3 ); return 0; }
Nadal nie wiem co mam źle, że są błędy. Poprawiłem te dwie funkcje, teraz nie korzystają ze zmiennej tymczasowej macierz3. |
|
DejaVu |
» 2012-02-06 23:23:42 Wklejaj treść logu kompilacji... (i nie jako screen bo screen za kilka dni przestanie działać). |
|
« 1 » 2 |