Witam, muszę napisać program mnożący 2 macierze ze sobą, jeśli to możliwe. Mam do dyspozycji strukturę zawierającą wymiary macierzy oraz dynamiczną tablicę dwuwymiarową. Wszystko niby jest ok, przeszukałem już wiele postów, forów i stosując te same rozwiązania program nie mnoży macierzy nawet kwadratowych... Bardzo prosiłbym o sprawdzenie kodu, szczególnie funkcji MnozenieMacierzy gdyż po zakomentowaniu części tej funkcji program normalnie działa, w sensie tworzy macierze, wypisuje je dla sprawdzenia itd.
#include <iostream>
using namespace std;
struct tablica{
int wys, szer;
int **tab2;
};
void PodajWymiary(tablica & macierzA, tablica & macierzB, tablica & macierzC);
void StworzMacierz(tablica macierzA, tablica macierzB);
bool CzyMnozenie(tablica macierzA, tablica macierzB);
tablica MnozenieMacierzy(tablica macierzA, tablica macierzB, tablica macierzC);
int main()
{
tablica macierzA;
tablica macierzB;
tablica macierzC;
bool sprawdzenie;
PodajWymiary(macierzA, macierzB, macierzC);
StworzMacierz(macierzA, macierzB);
sprawdzenie = CzyMnozenie(macierzA, macierzB);
cout << endl << sprawdzenie << endl << endl;
// SPRAWDZENIE WARUNKU CZY MOŻNA POMNOŻYC MACIERZE
if(sprawdzenie == true)
{
macierzC = MnozenieMacierzy(macierzA, macierzB, macierzC);
}
else cout << "Tych macierzy nie da sie pomnozyc!\n\n";
}
void PodajWymiary(tablica & macierzA, tablica & macierzB, tablica & macierzC)
{
cout << "Podaj wymiary macierzy pierwszej: ";
cin >> macierzA.szer;
cin >> macierzA.wys;
cout << endl;
cout << "Podaj wymiary macierzy drugiej: ";
cin >> macierzB.szer;
cin >> macierzB.wys;
cout << endl;
macierzC.szer = macierzB.szer;
// AUTOMATYCZNIE MACIERZ WYNIKOWA DOSTAJE JUZ WYMIARY TAKIE JAKIE POWINNY BYC
macierzC.wys = macierzA.wys;
}
void StworzMacierz(tablica macierzA, tablica macierzB)
{
//STWORZENIE MACIERZY A
macierzA.tab2 = new int*[macierzA.szer];
for (int i = 0; i < macierzA.szer; i++)
macierzA.tab2[i] = new int[macierzA.wys];
//WYPEŁNIENIE MACIERZY A
for (int i = 0; i < macierzA.szer; i++)
{
cout << endl;
for (int j = 0; j < macierzA.wys; j++)
{
macierzA.tab2[i][j] = i+j;
cout << macierzA.tab2[i][j];
}
}
cout << endl << endl;
//STWORZENIE MACIERZY B
macierzB.tab2 = new int*[macierzB.szer];
for (int j = 0; j < macierzB.szer; ++j)
macierzB.tab2[j] = new int[macierzB.wys];
//WYPELNIENIE MACIERZY B
for (int i = 0; i < macierzB.szer; i++)
{
cout << endl;
for (int j = 0; j < macierzB.wys; j++)
{
macierzB.tab2[i][j] = i+j+2;
cout << macierzB.tab2[i][j];
}
}
cout << "\n\nStworzono macierze!\n";
}
bool CzyMnozenie(tablica macierzA, tablica macierzB)
{
if (macierzA.wys == macierzB.szer)
return true;
else
return false;
}
tablica MnozenieMacierzy(tablica macierzA, tablica macierzB, tablica macierzC)
{
//UTWORZENIE MACIERZY C
macierzC.tab2 = new int*[macierzB.szer];
for (int i = 0; i < macierzB.szer; i++)
macierzC.tab2[i] = new int[macierzA.wys];
//MNOZENIE MACIERZY AxB = C TU GDZIEŚ BŁĄD!!!!
for(int i = 0; i< macierzC.wys; i++)
{
for(int j = 0; j < macierzC.szer; j++)
{
macierzC.tab2[i][j] = 0;
for(int k = 0; k < macierzC.wys; k++)
{
macierzC.tab2[i][j] += macierzC.tab2[i][j] + macierzA.tab2[i][k] * macierzB.tab2[k][j];
}
cout << macierzC.tab2[i][j];
}
}
return macierzC;
}