mnozenie macierzy
Ostatnio zmodyfikowano 2012-07-17 15:10
Mufas Temat założony przez niniejszego użytkownika |
mnozenie macierzy » 2012-07-15 18:15:42 niby proste, a program mi nie chce dzialac (ale kompiluje sie juz ok) petelki przy mnozeniu wygladaja tak: for( int i = 0; i < m; i++ ) { for( int j = 0; j < p; j++ ) { c[ i ][ j ] = 0; for( int k = 0; k < o; k++ ) { c[ i ][ j ] = c[ i ][ j ] + a[ i ][ k ] * b[ k ][ j ]; } } }
co tu jest zle?? macierz a[m][n] macierz b[o][p] to macierz c[m][p] |
|
Mufas Temat założony przez niniejszego użytkownika |
» 2012-07-15 21:19:03 moze doprecyzuje, bo brak odpowiedzi widze Program mnozy 2 macierze przez siebie - liczby pseudolosowe Macierz 1 Podaj liczbe wierszy dla 1 macierzy 3 Podaj liczbe kolumn dla 1 macierzy 3 2 0 2 3 0 0 2 0 1 Macierz 2 Podaj liczbe wierszy dla 2 macierzy 3 Podaj liczbe kolumn dla 2 macierzy 3 0 0 3 1 3 3 4 0 4 Mnozenie macierzy -495105442 0 14044800 -495105442 0 14044800 -495105442 0 14044800
tak to wyglada, chyba nie do konca dobrze. A kod wyglada tak #include <iostream> #include <conio.h> #include <time.h> #include <math.h> #include <stdlib.h>
using namespace std;
int main() { srand( static_cast < unsigned int >( time( NULL ) ) ); cout << "Program mnozy 2 macierze przez siebie - liczby pseudolosowe" << '\n'; short int m, n, p, o; int a[ m ][ n ]; cout << "Macierz 1" << '\n'; cout << "Podaj liczbe wierszy dla 1 macierzy" << '\n'; cin >> m; cin.ignore(); cout << "Podaj liczbe kolumn dla 1 macierzy" << '\n'; cin >> n; cin.ignore(); for( int i = 1; i <= m; i++ ) { for( int j = 1; j <= n; j++ ) { a[ i ][ j ] = rand() % 5; cout << a[ i ][ j ] << " "; } cout << "" << '\n'; } cout << "Macierz 2" << '\n'; cout << "Podaj liczbe wierszy dla 2 macierzy" << '\n'; cin >> o; cin.ignore(); cout << "Podaj liczbe kolumn dla 2 macierzy" << '\n'; cin >> p; cin.ignore(); int b[ o ][ p ]; for( int i = 1; i <= o; i++ ) { for( int j = 1; j <= p; j++ ) { b[ i ][ j ] = rand() % 5; cout << b[ i ][ j ] << " "; } cout << "" << '\n'; } cout << "Mnozenie macierzy" << '\n'; int c[ m ][ p ]; for( int i = 0; i < m; i++ ) { for( int j = 0; j < p; j++ ) c[ i ][ j ] = 0; } for( int i = 0; i < m; i++ ) { for( int j = 0; j < p; j++ ) { for( int k = 0; k < o; k++ ) { c[ i ][ j ] = c[ i ][ j ] + a[ i ][ k ] * b[ k ][ j ]; } } } for( int i = 0; i < m; i++ ) { for( int j = 0; j < p; j++ ) cout << c[ i ][ j ] << " "; cout << "" << '\n'; } getch(); return 0; }
jak w petli mnozenia macierzy dam c [j] =0 (jak w poscie wczesniej) to program wogole sie nie włacza pls help |
|
mati1qazxsw2 |
» 2012-07-16 12:54:14 ... short int m, n, p, o; int a[ m ][ n ]; ...
Co ja pacze tu UłuuO.o? ... int b[ o ][ p ]; ...
Co ty tutaj paczysz! Jeśli chcesz tworzyć tablice z określonymi przez użytkownika rozmiarami to musisz tworzyć ją dynamicznie po wybraniu wartości m i n, dlatego pokazuje ci te śmieci :P |
|
Mufas Temat założony przez niniejszego użytkownika |
» 2012-07-17 13:20:43 tablica dynamiczna dla macierzy b i petla mnozenia int ** b = new int *[ o ]; for( int i = 1; i <= o; i++ ) { for( int j = 1; j <= n; j++ ) { b[ i ] = new int[ p ]; b[ i ][ j ] = rand() % 5; cout << b[ i ][ j ] << " "; } cout << "" << '\n'; } cout << "Mnozenie macierzy" << '\n'; int c[ m ][ p ]; for( int i = 1; i <= m; i++ ) { for( int j = 1; j <= p; j++ ) { c[ i ][ j ] = 0; for( int k = 1; k <= o; k++ ) { c[ i ][ j ] = c[ i ][ j ] + a[ i ][ k ] * b[ k ][ j ]; } } }
macierz b mysle ze jest dobrze, ale prosze o potwierdzenie a w przypadku mnozenia tablice c, tez mam dynamiczna zrobic?? a jesli tak to jak (bo mi dziwne wyniki wychodza zarowno przy dynamicznej jak i statycznej) |
|
mati1qazxsw2 |
» 2012-07-17 15:10:06 #include <iostream> #include <time.h> #include <math.h> #include <stdlib.h>
using namespace std;
int main() { srand( static_cast < unsigned int >( time( NULL ) ) ); cout << "Program mnozy 2 macieze przez ciebie - liczby pseldolosowe" << '\n'; short int m, n, p, o;
cout << "Macierz 1" << '\n'; cout << "Podaj liczbe wierszy dla 1 maciezy" << '\n'; cin >> m; cin.ignore(); cout << "Podaj liczbe kolumn dla 1 maciezy" << '\n'; cin >> n; cin.ignore();
int** a = new int*[m]; for( int i = 0; i < m; i++ ) { a[i] = new int[n]; for( int j = 0; j < n; j++ ) { a[ i ][ j ] = rand() % 5; cout << a[ i ][ j ] << " "; } cout << "" << '\n'; }
cout << "Macierz 2" << '\n'; cout << "Podaj liczbe wierszy dla 2 maciezy" << '\n'; cin >> o; cin.ignore(); cout << "Podaj liczbe kolumn dla 2 maciezy" << '\n'; cin >> p; cin.ignore();
int** b = new int*[o]; for( int i = 0; i < o; i++ ) { b[i] = new int[p]; for( int j = 0; j < p; j++ ) { b[ i ][ j ] = rand() % 5; cout << b[ i ][ j ] << " "; } cout << "" << '\n'; }
int w = m>o?m:o,h = p>n?p:n,w2 = m>o?o:m,h2 = p>n?n:p;
cout << "Mnorzenie macierzy" << '\n'; int** c = new int*[h]; for( int i = 0; i < h; i++ ) { c[i] = new int[w]; for(int j = 0;j < w;++j) { c[i][j] = 0; } } cout << w << " " << h << endl; for( int i = 0; i < h; i++ ) { for( int j = 0; j < w; j++ ) { if(j < w2 && i < h2) { c[ i ][ j ] = a[ i ][ j ] * b[ i ][ j ]; }else { c[i][j] = (w2<o&&h2<p?b[i][j]:a[i][j]); } cout << c[ i ][ j ] << " "; } cout << "" << '\n'; } cout << "TROLOLOLO wymnorzylem!" << endl; /* System(oprócz win 9x) sam zwolni pamięć dlatego nie ma wycieku */
cin.ignore(); return 0;
}
|
|
« 1 » |