Mnożenie macierzy

dbe_benio

Mnożenie macierzy kwadratowych , programik w C++.

/**********************************/
/* dbe_benio                      */
/* Mnożenie macierzy kwadratowych */
/* o rozmiarze N                  */
/**********************************/
//---------------------------------------------------------------------------
#pragma hdrstop
//---------------------------------------------------------------------------
#pragma argsused
//---------------------------------------------------------------------------
#include <iostream>
 
using namespace std;

int rozmiar;
long **tabA, **tabB, **tabC;

void wprowadz(long **tab);
void wyswietl(long **tab);
void mnozenie();

int main(int argc, char* argv[])
{
cout << "Wprowadz rozmiar macierzy kwadratowych ktore chcesz pomnozyc: ";
cin >> rozmiar;

tabA = new long* [rozmiar];
for (unsigned i = 0; i < rozmiar; ++i)
tabA[i] = new long [rozmiar];

tabB = new long* [rozmiar];
for (unsigned i = 0; i < rozmiar; ++i)
tabB[i] = new long [rozmiar];

tabC = new long* [rozmiar];
for (unsigned i = 0; i < rozmiar; ++i)
tabC[i] = new long [rozmiar];

cout << "\nWprowdzaj wartosci macierzy A wierszami i potwierdzaj ENTEREM " << endl;
wprowadz(tabA);
cout << "\nWprowdzaj wartosci macierzy B wierszami i potwierdzaj ENTEREM " << endl;
wprowadz(tabB);
cout << "\nMacierz A: " << endl;
wyswietl(tabA);
cout << "\nMacierz B: " << endl;
wyswietl(tabB);
cout << "\nIloczynem macierzy A i B jest macierz C: " << endl;
mnozenie();
wyswietl(tabC);

for (unsigned i = 0; i < rozmiar; ++i)
delete[] tabA[i];
delete[] tabA;

for (unsigned i = 0; i < rozmiar; ++i)
delete[] tabB[i];
delete[] tabB;

for (unsigned i = 0; i < rozmiar; ++i)
delete[] tabC[i];
delete[] tabC;

cout << endl;

system("pause"); 
return 0;
}

//----------------------------------------------
void wprowadz(long **tab)
{
 for(int a=0; a<rozmiar; a++)
 {
 cout << "Wiersz " << a+1 << ": " << endl;
     for(int b=0; b<rozmiar; b++)
     {
        cin >> tab[a][b];
     }
 }
}
//-----------------------------------------------
void wyswietl(long **tab)
{
 for(int n=0; n<rozmiar; n++)
 {
        for(int m=0; m<rozmiar; m++)
        {
        cout << tab[n][m] << "  ";
        }
 cout << "\n\n";
 }
}
//-----------------------------------------------
void mnozenie()
{
 for(int i=0; i<rozmiar; i++)
 {
   for(int j=0; j<rozmiar; j++)
     {
       tabC[i][j]=0;
         for(int k=0; k<rozmiar; k++)
          {
	   tabC[i][j] += tabA[i][k] * tabB[k][j];
	 }
     }
 }
}
//------------------------------------------------

1 komentarz

Skoro już C++, to wypadałoby to obiektowo zrobić, macierze to jest szkoleniowe ćwiczenie na przeciążanie operatorów.
Poza tym mnożymy nie tylko macierze o identycznych rozmiarach - warunek:
ilość kolumn w pierwszej = ilość wierszy w drugiej (mnożenie macierzy nie jest przemienne)