Monożenie macierzy
Ostatnio zmodyfikowano 2019-10-28 20:00
| Mikelolo Temat założony przez niniejszego użytkownika | Monożenie macierzy » 2019-10-28 10:04:08 Witam, robie sobie program gdzie mnożę dwie losowe macierze (A[n][m],B[m][1] ) i ma mi to dac macierz C[n][1]. Macierze mi ładnie się pokazują jednak niestety nie mnoży mi poprawnie w  ostatnim punkcie. Nie wiem co mam zrobić.  Poniżej mój kod: #include <iostream>#include <time.h>
 #include <math.h>
 #include <stdlib.h>
 #include <iomanip>
 
 using namespace std;
 
 int main()
 {
 cout << "Program mnozy 2 macieze przez ciebie - liczby pseldolosowe" << '\n';
 short int m, n, o, i, j, s, k;
 
 cout << "Macierz 1" << '\n';
 cout << "Podaj liczbe wierszy dla 1 maciezy" << '\n';
 cin >> n;
 cin.ignore();
 cout << "Podaj liczbe kolumn dla 1 maciezy" << '\n';
 cin >> m;
 cin.ignore();
 cout << '\n';
 
 int ** A = new int *[ n ];
 for( int i = 0; i < n; i++ )
 {
 A[ i ] = new int[ m ];
 for( int j = 0; j < m; j++ )
 {
 A[ i ][ j ] = rand() % 5;
 cout << A[ i ][ j ] << " ";
 }
 cout << "" << '\n';
 }
 cout << "Macierz 2" << '\n';
 int ** B = new int *[ m ];
 for( int i = 0; i < m; i++ )
 {
 
 B[ i ] = new int[ o ];
 o = 0;
 for( int j = 0; j <= o; j++ )
 {
 B[ i ][ j ] = rand() % 5;
 cout << B[ i ][ j ] << " ";
 }
 cout << "" << '\n';
 }
 cout << "Mnozenie maciezy " << '\n';
 int ** C = new int *[ n ];
 for( int i = 0; i < n; i++ )
 {
 C[ i ] = new int[ o ];
 for( int j = 0; j < o; j++ )
 {
 C[ i ][ j ] = 0;
 }
 for( k = 0; k < m; k++ )
 C[ i ][ j ] = C[ i ][ j ] + A[ i ][ k ] * B[ k ][ j ];
 
 {
 
 cout << C[ i ][ j ] << " ";
 }
 cout << "" << '\n';
 
 }
 
 
 return 0;
 }
 | 
|  | 
| pekfos | » 2019-10-28 17:39:58 Wszystkie użycia zmiennej o są błędne. | 
|  | 
| Mikelolo Temat założony przez niniejszego użytkownika | » 2019-10-28 18:53:47 Jakby umiał Pan/Pani dokładniej wytłumaczyć na czym polega błąd bo nie rozumiem . | 
|  | 
| pekfos | » 2019-10-28 19:30:32 Pierwsze użycie o  jest błędne, bo zmienna jest niezainicjalizowana. Potem przypisujesz jej 0, co nie ma żadnego sensu, a to zrównoważasz błędnym warunkiem w następnej pętli używającej o . Zerowa wartość jest określona jako błędna w sposób demokratyczny - przypisanie zera i pętla z warunkiem j <= o  to 2 głosy że zero jest poprawne, dwie alokacje tablicy zerowej długości i pętla j < o  to 3 głosy że zero jest błędne. To pomijając najbardziej oczywisty argument, że m , n  i o  opisują rozmiary macierzy, więc powinny to robić spójnie. Kolejne błędy maskuje zły dobór zakresu widoczności zmiennych short int m, n, o, i, j, s, k;
Nie ma powodu, by tworzyć wszystkie zmienne na początku, skoro i tak zamierzasz je redefiniować w mniejszych zakresach. for( int j = 0; j < o; j++ ) {
 C[ i ][ j ] = 0;
 }
 for( k = 0; k < m; k++ )
 C[ i ][ j ] = C[ i ][ j ] + A[ i ][ k ] * B[ k ][ j ];
 
 
 | 
|  | 
| Mikelolo Temat założony przez niniejszego użytkownika | » 2019-10-28 20:00:36 Poprawiłem i udało się, działa.Bardzo dziekuje Panu/Pani.
 Pozdrawiam :D
 | 
|  | 
| « 1 » |