Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Mnożenie macierzy - pocz.programista - dużo problemów.

Ostatnio zmodyfikowano 2011-05-23 17:33
Autor Wiadomość
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:

C/C++
#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)
P-33176
capajera18
» 2011-05-19 14:02:58
kod programu opraw w znaczniki cpp - - /cpp
Bedzie czytelniej wyglądać
P-33177
malan
» 2011-05-19 14:23:53
int i = 0;
 w
for
, w C? Hm...
P-33180
ison
» 2011-05-19 14:42:27
C/C++
#include <iostream>
w C?

poza tym brakuje
C/C++
#include <stdlib.h>
do system() i
C/C++
#include <stdio.h>
do printf,scanf,puts

C/C++
for( int i = 0; i < m; i++ ); //tu nie powinno być tego średnika

{
    ( 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
P-33181
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.
P-33188
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 ).
P-33190
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 :)
P-33193
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.
P-33196
« 1 » 2 3
  Strona 1 z 3 Następna strona