Mnożenie tablic o podanym wymiarze z wpisanego, losowego przedziału liczb
Ostatnio zmodyfikowano 2020-03-10 22:53
matt21mcr Temat założony przez niniejszego użytkownika |
Mnożenie tablic o podanym wymiarze z wpisanego, losowego przedziału liczb » 2020-03-10 09:15:09 Witam, Mam problem. Napisałem program, który prosi o rozmiar macierzy oraz maksymalną liczbę losową, którą będzie wypełniana macierz 1 i druga, natomiast wynik końcowy nie jest taki, jaki być powinien po mnożeniu macierzy. #include <iostream> #include <cstdlib> #include <time.h>
using namespace std; int main() { srand( time( NULL ) ); cout << "Podaj wymiary pierwszej tablicy(ilosc wierszy, ilosc kolumn):\n"; int TWier1, TKol1, za; cin >> TWier1 >> TKol1; int taba[ TWier1 ][ TKol1 ]; cout << "Podaj maksymalny przedzial dla pierwszej maciezy:\n"; cin >> za; for( int i = 0; i < TWier1; i++ ) { for( int j = 0; j < TKol1; j++ ) { taba[ i ][ j ] = rand() % za; } } for( int i = 0; i < TWier1; i++ ) { for( int j = 0; j < TKol1; j++ ) { cout << taba[ i ][ j ] << " "; } cout << "\n"; } cout << "Podaj wymiary drugiej tablicy (ilosc wierszy, ilosc kolumn):\n"; int TWier2, TKol2, zw; cin >> TWier2 >> TKol2; int tabb[ TWier2 ][ TKol2 ]; for( int i = 0; i < TWier2; i++ ) { for( int j = 0; j < TKol2; j++ ) { taba[ i ][ j ] = rand() % za; } } for( int i = 0; i < TWier2; i++ ) { for( int j = 0; j < TKol2; j++ ) { cout << tabb[ i ][ j ] << " "; } cout << "\n"; } int tabc[ TWier1 ][ TKol2 ]; for( int i = 0; i < TWier1; i++ ) { for( int j = 0; j < TKol2; j++ ) { tabc[ i ][ j ] = 0; } } for( int i = 0; i < TWier1; i++ ) { for( int j = 0; j < TKol2; j++ ) { for( int k = 0; k < TWier1; k++ ) { tabc[ i ][ j ] += taba[ k ][ j ] * tabb[ i ][ k ]; } } } for( int i = 0; i < TWier1; i++ ) { for( int j = 0; j < TKol2; j++ ) { cout << tabc[ i ][ j ] << " "; } cout << "\n"; } system( "pause" ); return 0; }
Czy ktokolwiek może wie, gdzie popełniłem błąd? |
|
nanoant20 |
» 2020-03-10 13:24:47 wynik końcowy nie jest taki, jaki być powinien po mnożeniu macierzy |
Czynnikiem, który powoduje błędny wynik może być: 1. Jeśli chcesz tworzyć tablice z określonymi przez użytkownika rozmiarami to musisz tworzyć je dynamicznie. 2. Rozmiary tych macierzy nie mogą być dowolne, warunek jest taki, że macierz M1 musi posiadać w wierszu tyle samo elementów, co macierz M2 ma ich w kolumnie. //EDIT cout << "Podaj wymiary drugiej tablicy (ilosc wierszy, ilosc kolumn):\n"; int TWier2, TKol2, zw; cin >> TWier2 >> TKol2; int tabb[ TWier2 ][ TKol2 ];
for( int i = 0; i < TWier2; i++ ) { for( int j = 0; j < TKol2; j++ ) { taba[ i ][ j ] = rand() % za; } }
3. Zakres losowanych liczb jest od ZERA co jest błędem, chyba że chcesz mnożyć przez ZERO tabc[ i ][ j ] += taba[ k ][ j ] * tabb[ i ][ k ]; ten zapis jest błędny, powinno być: tabc[ i ][ j ] += taba[ i ][ k ] * tabb[ k ][ j ]; |
|
pekfos |
» 2020-03-10 22:53:07 tabb jest niezainicjalizowane. Przypisujesz dwa razy do taba. |
|
« 1 » |