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

Mnożenie 2-wymiarowych macierzy

Object Storage Arubacloud
0 głosów
880 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 Ekspert (344,860 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 Ekspert (344,860 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ź 1,878 wizyt
pytanie zadane 4 marca 2019 w Python przez bednar98 Początkujący (440 p.)
0 głosów
2 odpowiedzi 5,478 wizyt
pytanie zadane 19 marca 2018 w C i C++ przez Groshq Użytkownik (590 p.)
–1 głos
1 odpowiedź 578 wizyt
pytanie zadane 25 marca 2021 w C i C++ przez Karina126 Początkujący (280 p.)

92,555 zapytań

141,402 odpowiedzi

319,539 komentarzy

61,938 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...