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

Mnożenie macierzy HELP Ktoś pomoże??

Ostatnio zmodyfikowano 2011-03-27 23:42
Autor Wiadomość
lukas__87
Temat założony przez niniejszego użytkownika
Mnożenie macierzy HELP Ktoś pomoże??
» 2011-03-27 22:22:23
mam problem ze stworzeniem algorytmu dla obliczania macierzy, na początku chce wprowadzić liczbę wierszy i kolumn a następnie wartości macierzy, tak samo z drugą macierzą, no i oczywiście warunek dla mnożenia czyli liczba wierszy musi być równa liczbie kolumn, no i tutaj pętla jeśli się zgadza to mnożymy a jeśli nie wyrzuca i wyświetla napis nie można podzielić,
niby proste, łatwo napisać jakby się to zrobiło ale jako osoba początkująca proszę o jakikolwiek kod pomocny dla mojego przypadku.  

C/C++
#include "stdafx.h"

int main( int argc, char * argv[] )
{
    int w, k, i, j, x, y, z;
    int tab_a, tab_b, tab_c;
   
    printf( "MNOZENIE MACIERZY\nPamietaj, ze A[x,y] x B[y,z] = C[x,z]\n" );
    printf( "Podaj liczbe wierszy A: " );
    scanf( "%d", & x );
    printf( "Podaj liczbe kolumn A: " );
    scanf( "%d", & y );
    int tab_a[ x ][ y ];
   
    printf( "Podaj liczbe kolumn B: " );
    scanf( "%d", & z );
    int tab_b[ y ][ z ];
   
    int tab_c[ x ][ z ];
   
    printf( "Wprowadz wartosci do macierzy A wierszami:\n" );
    for( i = 0; i < x; i++ )
    {
        printf( "Wiersz %d\n", i + 1 );
        for( j = 0; j < y; j++ )
             scanf( "%d", & tab_a[ x ][ y ] );
       
    }
   
    printf( "Wprowadz wartosci do macierzy B wierszami:\n" );
    for( i = 0; i < y; i++ )
    {
        printf( "Wiersz %d\n", i + 1 );
        for( j = 0; j < z; j++ )
             scanf( "%d", & tab_b[ y ][ z ] );
       
    }
   
    for( i = 0; i < x; i++ )
    for( j = 0; j < z; j++ )
         tab_c[ i ][ j ] = 0;
   
   
    for( i = 0; i < x; i++ )
    for( j = 0; j < z; j++ )
    {
        for( k = 0; k < y; k++ )
             tab_c[ i ][ j ] =( tab_a[ i ][ k ] * tab_b[ k ][ j ] ) + tab_c[ i ][ j ];
       
    }
   
    for( i = 0; i < x; i++ )
    for( j = 0; j < z; j++ )
         printf( "%d %d = %d\n", i + 1, j + 1, tab_c[ i ][ j ] );
   
    getchar();
    return 0;
}

zdecydowanie wydaje mi się że jest zła deklaracja tabeli, i brakuje pętli, pomocy !!!
P-29859
ison
» 2011-03-27 23:02:13
kod umieść w [cpp][/cpp]

C/C++
int tab_a[ x ][ y ];
taka konstrukcja jest niedozwolona jeśli x,y nie są stałe

dlaczego najpierw deklarujesz pojedyncze zmienne
C/C++
int tab_a, tab_b, tab_c;
a potem tablice o takich samych nazwach?
P-29861
lukas__87
Temat założony przez niniejszego użytkownika
??
» 2011-03-27 23:06:23
coś dokładniej?? bo jestem mało kumaty w te klocki
P-29862
ison
» 2011-03-27 23:08:04
jeśli nie chcesz bawić się w dynamiczną alokację pamięci to ustal sobie stały maksymalny rozmiar tablic
np.
C/C++
int tab_a[ 100 ][ 100 ];

nie możesz deklarować niedynamicznych tablic o nieznanym przed kompilacją rozmiarze tak jak to zrobiłeś w swoim kodzie

zaraz przepatrzę resztę kodu
P-29863
lukas__87
Temat założony przez niniejszego użytkownika
??
» 2011-03-27 23:12:00
chcę aby wielkość tablicy była wyznaczana przez liczbę wprowadzoną klawiaturą ,
P-29864
McAffey
» 2011-03-27 23:16:24
Jeśli nie znasz dynamicznych tablic to tego nie osiągniesz, a wielkość takiej tablicy musisz mieć zadeklarowaną tak jak napisał ison.
P-29865
ison
» 2011-03-27 23:19:20
zaraz poprawię kod to zobaczysz o co mi chodziło, zwyczajnie deklarujesz sobie dużą tablicę a używasz tylko tych pól których chcesz, zabawa w dynamiczne tablice nie ma sensu

C/C++
for( i = 0; i < x; i++ )
czyżby przyzwyczajenie z pascala? ;)
zmienne do iteracji lepiej deklarować w forze
C/C++
for( int i = 0; i < x; i++ )
P-29866
lukas__87
Temat założony przez niniejszego użytkownika
??
» 2011-03-27 23:19:23
moge zadeklarować wartość tablicy w taki sposób tab_a[x=max][y=max]?? 
P-29867
« 1 » 2
  Strona 1 z 2 Następna strona