Mnożenie macierzy - pocz.programista - dużo problemów.
Ostatnio zmodyfikowano 2011-05-23 17:33
dragoN Temat założony przez niniejszego użytkownika |
Mnożenie macierzy - pocz.programista - dużo problemów. » 2011-05-19 13:57:37 Witam!
Program na mnożenie macierzy w języku C.
Wygląda on tak:
#include <iostream> #include <conio.h>
int main( void ) { int ** tab, m, n; printf( "MNOZENIE MACIERZY\n\n" ); printf( "Podaj liczbe wierszy macierzy A: " ); scanf( "%d", & n ); printf( "Podaj liczbe kolumn macierzy A: " ); scanf( "%d", & m ); tab =( int ** ) malloc( m * sizeof( int * ) ); for( int i = 0; i < m; i++ ); { ( tab + i ) =( int * ) malloc( n * sizeof( int ) ); } for( int wiersz = 0; wiersz < n; wiersz++ ); { for( int kolumna = 0; kolumna < m; kolumna++ ) { tab[ wiersz ][ kolumna ] = kolumna + wiersz; printf( "%d ", tab[ wiersz ][ kolumna ] ); } printf( "\n" ); } puts( "\n\n" ); int ** tab2, x, y; printf( "Podaj liczbe wierszy macierzy B: " ); scanf( "%d", & x ); printf( "Podaj liczbe kolumn macierzy B: " ); scanf( "%d", & y ); tab2 =( int ** ) malloc( y * sizeof( int * ) ); for( int r = 0; r = 0; r < y; r++ ); { *( tab2 + r ) =( int * ) malloc( x * sizeof( int ) ); } for( int wiersz2 = 0; wiersz2 < x; wiersz2++ ) { for( int kolumna2 = 0; kolumna2 < y; kolumna2++ ) { tab2[ wiersz2 ][ kolumna2 ] = kolumna2 + wiersz2 + 1; printf( "%d ", tab2[ wiersz2 ][ kolumna2 ] ); } printf( "\n" ); } puts( "\n\n" ); int ** tab3; tab3 =( int ** ) malloc( y * sizeof( int * ) ); for( int u = 0; u < y; u++ ) { *( tab3 + u ) =( int * ) malloc( n * sizeof( int ) ); } if( m == x ); { int pomoc = 0; int wynik = 0; for( int q = 0; q < n; q++ ); { for( int w = 0; w < y; w++ ); { for( int e = 0; e < m; e++ ); { pomoc = tab[ q ][ e ] * tab2[ e ][ w ]; wynik = wynik + pomoc; tab3[ q ][ w ] = wynik; } printf( "%d ", tab3[ q ][ w ] ); } printf( "\n" ); } } else { printf( "\nNie da sie pomnozyc takich macierzy." ); } for( int i = 0; i < n; i++ ); { free( tab3[ i ] ); } free( tab3 ); for( int i = 0; i < n; i++ ); { free( tab[ i ] ); } free( tab ); for( int i = 0; i < x; i++ ); { free( tab2[ i ] ); } free( tab2 ); } system( "PAUSE" ); { return 0; }
I do tego milion błędów.
W linku zamieszczam screen'a.
http://w286.wrzuta.pl/obraz/1i9aAkZHo6Z/bledy_w_c
Program to CodeBlock, a kompilator GNU. W innych programach nie miałem takich problemów raczej.
Pomóżcie. (nie wiem jak włączyłem kursywe, ale nie specjalnie) |
|
capajera18 |
» 2011-05-19 14:02:58 kod programu opraw w znaczniki cpp - - /cpp
Bedzie czytelniej wyglądać |
|
malan |
» 2011-05-19 14:23:53 int i = 0; w for , w C? Hm... |
|
ison |
» 2011-05-19 14:42:27 w C? poza tym brakuje do system() i do printf,scanf,puts for( int i = 0; i < m; i++ );
{ ( tab + i ) =( int * ) malloc( n * sizeof( int ) ); }
ogólnie masz straszny bałagan w kodzie, nie dziw się że tyle błędów ;) zrób poprawne wcięcia |
|
dragoN Temat założony przez niniejszego użytkownika |
» 2011-05-19 16:15:40 "zrób poprawne wcięcia" - jakie wcięcia?
"C/C++ #include <iostream> w C?" - wykasować?
"for( int i = 0; i < m; i++ ); //tu nie powinno być tego średnika" - średnik usunąłem
"int i = 0; w for , w C? Hm..." - o co chodzi?
Napiszcie co usunąć a co dodać żeby było ok. |
|
Mrowqa |
» 2011-05-19 16:21:06 Nie uczyłem się C, ale z tego co wiem, to w C trzeba wszystkie zmienne zdefiniować przed jakąkolwiek instrukcją ( nie będącą definicją ) - czy jakoś tak :P W każdym razie iostream jest to biblioteka C++, nie C. Masz w niej zawarte strumienie wejścia i wyjścia ... ( odpowiedniki printf i scanf :P tylko że z buforowaniem :P ). |
|
DejaVu |
» 2011-05-19 17:02:41 Dodam, że biblioteka iostream nie istnieje w C oraz nie istnieje żaden do niej odpowiednik posiadający narzędzia o tej samej nazwie do pracy ze strumieniami :) |
|
Elaine |
» 2011-05-19 17:25:14 w C trzeba wszystkie zmienne zdefiniować przed jakąkolwiek instrukcją ( nie będącą definicją ) |
To ograniczenie zostało zniesione 12 lat temu. |
|
« 1 » 2 3 |