Witam!
Dostałem w szkole do napisania program wykonujące różne operacje na macierzach m. in. mnożenie.
Napisałem program, który mnoży tablicę A przez tablicę B, wpisuje wyniki mnożenia do tablicy C oraz wypisuje ją w konsoli:
#include <iostream>
using namespace std;
//Poprawne rozwiazanie
//10 13 2
//22 29 4
//34 45 6
int main() {
int a_rows = 3;
int a_cols = 2;
int b_rows = 2;
int b_cols = 3;
int A[3][2] = {{1,2}, {3,4}, {5,6}};
int B[2][3] = {{2,3,0}, {4,5,1}};
int C[a_rows][b_cols];
if (a_cols == b_rows) {
// Wypelnia tablice C wynikami mnozenia tablic A i B
for (int r = 0; r < a_rows; r++) {
for (int c = 0; c < b_cols; c++) {
// cout << r << 0 << "*" << c << 0 << "+" << r << 1 << "*" << 1 << c << '\t';
cout << A[r][0] << '*' << B[c][0] << " + " << A[r][1] << '*' << B[1][c] << '\t';
C[r][c] = (A[r][0] * B[c][0]) + (A[r][1] * B[1][c]);
}
cout << endl;
}
// Wypisz zawartosc tablicy
for (int i = 0; i < a_rows; i++) {
for (int j = 0; j < b_cols; j++) {
cout << C[i][j] << '\t';
}
cout << endl;
}
} else {
cout << "Tablice nie spelniaja warunku" << endl;
}
return 0;
}
Wyniki mnożenia zgadzają się dla tylko dla 1-szej kolumny w tablicy C, a w drugiej i trzeciej wyniki odbiegają od tych oczekiwanych. Poprawne rozwiązanie umieściłem na początku kodu.
Utworzyłem w 25 linijce aż kod, który pokazuje mi które indeksy z obu tabel są w danym działaniu używane i po ich przeanalizowaniu wszystko się zgadza - oprócz wyniku.
W skrócie mówiąc:
- W pierwszej kolumnie w tablicy C wszystkie wyniki się zgadzają
- W drugiej i trzeciej kolumnie odbiegają one od tych oczekiwanych
- (od drugiej kolumny) zamiast działania "1*3 + 2*5" program wykonuje "1*4 + 2*5", zamiast "1*0 + 2*1" wykonuje "1*1 + 2*1" itd. dla pozostałych wierszy
Proszę o pomoc, gdyż nie zbyt wiem w tym momencie dlaczego występuje ten błąd.