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 |