#ifndef MATRIX_H
#define MATRIX_H
#include <iostream>
using namespace std;
class Matrix
{
private:
float * * pm;
int m,n;
void FillMatrix();
public:
Matrix(int x=0,int y=0);
Matrix(Matrix & mx);
~Matrix();
Matrix operator+(Matrix & x);
Matrix operator*(Matrix & mx);
friend ostream & operator<<(ostream & os,Matrix & mx);
};
#endif
#include "matrix.h"
#include <iostream>
#include <iomanip>
#include <ctime>
using namespace std;
Matrix::Matrix(int x,int y)
{
m=x;
n=y;
pm=new float * [m];
for(int i=0;i<m;i++)
pm[i]=new float[n];
FillMatrix();
}
Matrix::Matrix(Matrix & mx)
{
m=mx.m;
n=mx.n;
pm=new float * [m];
for(int i=0;i<m;i++)
pm[i]=new float[n];
for( i=0;i<m;i++)
for(int j=0;j<n;j++)
pm[i][j]=mx.pm[i][j];
}
void Matrix::FillMatrix()
{
//srand(time(NULL));
for(int i=0;i<m;i++)
for(int j=0;j<n;j++)
pm[i][j]=rand()%10;
}
Matrix::~Matrix()
{
for(int i=0;i<m;i++)
delete [] pm[i];
delete [] pm;
}
Matrix Matrix::operator+(Matrix & x)
{
Matrix temp(m,n);
for(int i=0;i<m;i++)
for(int j=0;j<n;j++)
temp.pm[i][j]=pm[i][j]+x.pm[i][j];
return temp;
}
Matrix Matrix::operator*(Matrix & mx)
{
Matrix temp(m,mx.n);
for(int i=0;i<temp.m;i++)
for(int j=0;j<temp.n;j++)
{ temp.pm[i][j]=0;
for(int l=0;l<n;l++)
temp.pm[i][j]+=pm[i][l]*mx.pm[l][j];
}
return temp;
}
ostream & operator<<(ostream & os,Matrix & mx)
{
for(int i=0;i<mx.m;i++)
{
for(int j=0;j<mx.n;j++)
os<<setw(8)<<mx.pm[i][j];
os<<endl;
}
return os;
}
#include "matrix.h"
#include <ctime>
#include <iostream>
using namespace std;
void main()
{
srand(time(NULL));
Matrix mx1(5,2),mx2(2,6),mx3(mx1*mx2);
cout<<mx1<<endl;
cout<<mx2<<endl;
cout<<mx3<<endl;
}