• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Mnożenie 2-wymiarowych macierzy

42 Warsaw Coding Academy
0 głosów
1,149 wizyt
pytanie zadane 11 października 2019 w C i C++ przez kazik8980 Użytkownik (810 p.)

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.

1 odpowiedź

+1 głos
odpowiedź 11 października 2019 przez adrian17 Mentor (353,220 p.)
wybrane 11 października 2019 przez kazik8980
 
Najlepsza

Na pierwszy rzut oka, indeksy masz źle.

Na przykład

B[c][0]

W ostatniej iteracji, czyli r==c==2, czytasz B[2][0]. Ale B w pierwszym wymiarze ma tylko dwa elementy, a czytasz trzeci - więc wychodzisz poza tablicę.

komentarz 11 października 2019 przez kazik8980 Użytkownik (810 p.)
To jest jedyne miejsce, w którym jest błąd?
komentarz 11 października 2019 przez adrian17 Mentor (353,220 p.)

nie wiem czy jedyne, sugeruję po prostu przejrzeć jeszcze raz czy indeksy w tej linii są poprawnie napisane.

C[r][c] = (A[r][0] * B[c][0]) + (A[r][1] * B[1][c]);

 

komentarz 11 października 2019 przez kazik8980 Użytkownik (810 p.)
Faktycznie indeksy były źle w tym konretnym miejscu. Okazało się, że wcześniej źle sobie wypisałem wszystko i na podstawie tego błędu zrobiłem również błąd w indeksach. Po zmianie na B[0][c] wszystko liczy jak należy. Dziękuję!

Podobne pytania

0 głosów
1 odpowiedź 2,176 wizyt
pytanie zadane 4 marca 2019 w Python przez bednar98 Początkujący (440 p.)
0 głosów
2 odpowiedzi 6,030 wizyt
pytanie zadane 19 marca 2018 w C i C++ przez Groshq Użytkownik (590 p.)
–1 głos
1 odpowiedź 775 wizyt
pytanie zadane 25 marca 2021 w C i C++ przez Karina126 Początkujący (280 p.)

93,377 zapytań

142,379 odpowiedzi

322,528 komentarzy

62,726 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
...