dodawanie macierzy, nie wiem w jaki sposób stworzyć dalszą część programu

0

to jest mój pierwszy program który piszę i nie wiem w jaki sposób mogę dodać do siebie te macierze. pomoże ktoś?

void dodawanie()
{
    int w, k;
    cout << "liczba wierszy: ";
    cin >> w;
    cout << "liczba kolumn: ";
    cin >> k;

    cout << "\n\nmacierz a:\n";
    int** tab1 = new int* [w];
    for (int i = 0; i < w; ++i)
    {
        tab1[i] = new int[k];
        for (int j = 0; j < 1; ++j)
            for (int j = 0; j < k; j++) {
                cin >> tab1[i][j];
            }
    }

    cout << "\n\nmacierz b:\n";
    int** tab2 = new int* [w];
    for (int i = 0; i < w; ++i)
    {
        tab2[i] = new int[k]; 
        for (int j = 0; j < 1; ++j)
            for (int j = 0; j < k; j++) {
                cin >> tab2[i][j];
            }
    }

    cout << "\n\nmacierz a:\n";
    for (int i = 0; i < w; ++i, cout << endl)
        for (int j = 0; j < k; ++j)
            cout << tab1[i][j] << '\t';

    cout << "\n\nmacierz b:\n";
    for (int i = 0; i < w; ++i, cout << endl)
        for (int j = 0; j < k; ++j)
            cout << tab2[i][j] << '\t';

    for (int i(0); i < w; ++i)
        delete[] tab1[i]; 
    delete[] tab1; 
    tab1 = NULL;

    for (int i(0); i < w; ++i)
        delete[] tab2[i];
    delete[] tab2; 
    tab2 = NULL;

    system("PAUSE");
    return;
}
0

Dodawanie macierzy jest proste(*). Wystarczy utworzyć nową macierz o tej samej liczbie kolumn i wierszy np tab3
i następnie dodać:

for( int i = 0; i < w; ++i )
{
   for( int j = 0; j < k; ++j )
   {
      tab3[i][j] = tab1[i][j]+tab2[i][j];
   }
}

Pomyśl o zastosowaniu kontenera std::vector<std::vector<int>> zamiast tablicy wskaźników do definicji macierzy.

(*) Jeżeli pominiemy możliwy overflow

0

Tak jak wyświetlasz, tworzysz trzecią macierz, i w takiej podwójnej pętli, elementy macierzy, będącej wynikiem dodawania:
c_{ij} = a_{ij} + b_{ij}

https://en.wikipedia.org/wiki/Matrix_addition

2

A może zaczniesz od początku w stylu C++:

class MatrixInt {
    size_t columns, rows;
    std::vector<int> a;

public:
    MatrixInt(size_t columns, size_t  rows)
        : columns{columns}
        , rows{rows}
        , a(columns*rows)
    {}

    int get(size_t i, size_t  j) const {
        return a[index(i, j)];
    }

    MatrixInt& add(const MatrixInt& b) {
         ....
         return *this;
    }

private:
    size_t index(size_t i, size_t j) const {
         if (i < rows && j < columns)
              return i * columns + j;
         throw std::invalid_argument{ "index out of range" };
    }
};

1 użytkowników online, w tym zalogowanych: 0, gości: 1