Mnozenie macierzy
Kod był wyświetlany 2023 razy.
    /*
  Name: Mnozenie macierzy
  Copyright: GPL GNU
  Date: 13-02-10 16:04
  Description:
              Program reprezentuje implementację 
              algorytmu mnożenia dwóch macierzy. 
              Wartości liczbowe w macierzach są losowane 
              z wykorzystaniem generatora liczb 
              pseudolosowych srand/rand. W celu uniknięcia 
              przekroczenia maksymalnej wartości typu 
              integer elementy macierzy mają wartości 
              z przedziału 0 do 49 
*/

#include <iostream>
#include <stdlib.h>


using namespace std;


//Struktura pomocnicza przechowujÄ…ca rozmiar macierzy
struct rozm
{
    int x; //Liczba wierszy
    int y; //Liczba kolumn
};


//Funkcja przydzielająca pamięć tablicy dwuwymiarowej
void inicjalizuj(int** &mat,struct rozm r)
{
    mat = new int*[r.x];
    for(int k=0;k<r.x;k++)
    {
       mat[k] = new int[r.y];
    }
}

//Funkcja losujÄ…ca elementy macierzy
void losuj_macierz(int** mat, struct rozm r)
{
    srand(time(0));
    for(int i=0;i<r.x;i++)
    {
        for(int j=0;j<r.y;j++)
	   {
	       mat[i][j] = rand()%50;
	   }
    }
}

//Funkcja wyświetlająca macierz
void pokaz_macierz(int**mat, struct rozm r)
{
   for(int i=0;i<r.x;i++)
   {
       cout<<"|";
       for(int j=0;j<r.y;j++)
       {
           cout<<mat[i][j]<<"\t";
       }
       cout<<"|"<<endl;
   }
}

//Implementacja algorytmu mnoĹĽenia macierzy:
//mat1 - macierz pierwsza
//mat2 - macierz druga
//wyj - referencja do macierzy wyjściowej
//r1 - rozmiar macierzy 1
//r2 - rozmiar macierzy 2
//rwyj - rozmiar macierzy wyjściowej
void mnoz_macierz(int **mat1,int **mat2,int **&wyj,struct rozm r1, struct rozm r2,struct rozm* rwyj)
{
//Przydzielenie pamięci dla macierzy wyjściowej
    wyj = new int*[r1.x];

    for(int i=0;i<r1.x;i++)
    {
         wyj[i] = new int[r2.y];
    }
//Zapisanie rozmiaru macierzy wyjściowej do zmiennej rwyj
    rwyj->x = r1.x; 
    rwyj->y = r2.y;

//Implementacja algorytmu mnoĹĽenia macierzy
    for(int i=0;i<rwyj->x;i++)
    {
        for(int j=0;j<rwyj->y;j++)
	{
	    int elem = 0;
	    for(int k = 0;k<r1.y;k++)
	    {
	        elem +=mat1[i][k]*mat2[k][j];
	    }
	    wyj[i][j] = elem;
	}
    }
}

int main()
{
    int **m1;
    int **m2;
    struct rozm rozmiar1;
    struct rozm rozmiar2;
    cout<<"Podaj liczbe wierszy pierwszej macierzy: ";
    cin >> rozmiar1.x;
    cout<<"Podaj liczbe kolumn pierwszej macierzy: ";
    cin >> rozmiar1.y;
    cout<<"Podaj liczbe wierszy drugiej macierzy: ";
    cin >> rozmiar2.x;
    cout<<"Podaj liczbe kolumn drugiej macierzy: ";
    cin >> rozmiar2.y;
    if(rozmiar1.y!=rozmiar2.x)
    {
        cout<<"Tych macierzy nie da sie pomnozyc"<<endl;
    cin.ignore();
    getchar();
	return 0;
    }
    inicjalizuj(m1,rozmiar1);
    inicjalizuj(m2,rozmiar2);
    losuj_macierz(m1,rozmiar1);
    losuj_macierz(m2,rozmiar2);
    cout<<"Macierz pierwsza: "<<endl;
    pokaz_macierz(m1,rozmiar1);
    cout<<endl<<"Macierz druga: "<<endl;
    pokaz_macierz(m2,rozmiar2);
    struct rozm rwyj;
    int **mat_wyj;
    mnoz_macierz(m1,m2,mat_wyj,rozmiar1,rozmiar2,&rwyj);
    cout<<"Macierz wyjsciowa: "<<endl;
    pokaz_macierz(mat_wyj,rwyj);
    
    cin.ignore();
    getchar();
    return 0;
}
    
Pobierz plik tekstowy
Załączniki
Administrator WJL
PHP&SQL coded by NOVA-IT