# include<iostream.h>
# include<conio.h>
# include<process.h>
# include<ctype.h>
# include<iomanip.h>
class Matrix
{
float row,col;
float **arr;
public:
Matrix();
Matrix(float,float);
Matrix(Matrix &);
// ~Matrix();void inputDim(float,float);
Matrix inverse();
Matrix operator+(Matrix &);
Matrix operator-(Matrix &);
Matrix operator*(Matrix &);
floatoperator==(Matrix &);
voidoperator+=(Matrix &);
friend voidoperator<<(ostream &,Matrix &);
friend voidoperator>>(istream &,Matrix &);
};
Matrix::Matrix()
{
row=col=0;
arr=NULL;
}
Matrix::Matrix(float row,float col)
{
this->row=row;
this->col=col;
arr=newfloat*[row];
for(float i=0;i<row;i++)
arr[i]=newfloat[col];
}
Matrix::Matrix(Matrix &t)
{
this->row=t.row;
this->col=t.col;
this->arr=newfloat*[t.row];
for(float i=0;i<t.row;i++)
this->arr[i]=newfloat[t.col];
for(float j=0;j<t.row;j++)
for(float k=0;k<col;k++)
this->arr[j][k]=t.arr[j][k];
}
/*
Matrix::~Matrix()
{
delete arr;
}
*/
Matrix Matrix::inverse()
{
float temp,tt;
Matrix t,x;
x=*this;
t.inputDim(this->row,this->col);
for(int i=0;i<this->row;i++)
{
for(int j=0;j<this->col;j++)
{
if(i==j)
t.arr[i][j]=1;
else
t.arr[i][j]=0;
}
}
for(i=0;i<t.row;i++)
{
temp=x.arr[i][i];
if(temp==0)
{
for(int j=0;j<t.col;j++)
{
tt=x.arr[i][j];
x.arr[i][j]=x.arr[i+1][j];
x.arr[i+1][j]=tt;
tt=t.arr[i][j];
t.arr[i][j]=t.arr[i+1][j];
t.arr[i+1][j]=tt;
}
}
//Step 1:for(int j=0;j<t.col;j++)
{
x.arr[i][j]/=temp;
t.arr[i][j]/=temp;
}
cout<<endl<<"MATRIX A"<<endl;
cout<<"ÍÍÍÍÍÍÍÍÍÍÍÍÍÍ"<<endl;
cout<<x;
cout<<endl<<"MATRIX B"<<endl;
cout<<"ÍÍÍÍÍÍÍÍÍÍÍÍÍÍ"<<endl;
cout<<t;
getch();
//Step 2:for(int k=0;k<t.row;k++)
{
temp=x.arr[k][i];
if(k!=i)
{
for(j=0;j<t.col;j++)
{
t.arr[k][j]+=(t.arr[i][j]*(-temp));
x.arr[k][j]+=(x.arr[i][j]*(-temp));
}
}
}
cout<<endl<<"MATRIX A"<<endl;
cout<<"ÍÍÍÍÍÍÍÍÍÍÍÍÍÍ"<<endl;
cout<<x;
cout<<endl<<"MATRIX B"<<endl;
cout<<"ÍÍÍÍÍÍÍÍÍÍÍÍÍÍ"<<endl;
cout<<t;
getch();
}
return t;
}
void Matrix::inputDim(float row,float col)
{
this->row=row;
this->col=col;
this->arr=newfloat*[row];
for(float i=0;i<row;i++)
this->arr[i]=newfloat[col];
}
float Matrix::operator==(Matrix &t)
{
if(this->row!=t.row || this->col!=t.col)
{
cout<<endl<<"Comparison not possible";
getch();
// exit(1);
}
for(float i=0;i<this->row;i++)
{
for(float j=0;j<this->col;j++)
{
if(this->arr[i][j]!=t.arr[i][j])
return 0; //Unequal Matrix;
}
}
return 1; //Equal Matrix;
}
Matrix Matrix::operator+(Matrix &m)
{
if(this->row==m.row && this->col==m.col)
{
Matrix t;
t.inputDim(m.row,m.col);
for(float i=0;i<m.row;i++)
for(float j=0;j<m.col;j++)
t.arr[i][j]=this->arr[i][j]+m.arr[i][j];
return t;
}
else
{
cout<<endl<<"Addition is not possible : ";
getch();
// exit(1);
}
}
void Matrix::operator+=(Matrix &m)
{
if(this->row==m.row && this->col==m.col)
{
for(float i=0;i<m.row;i++)
for(float j=0;j<m.col;j++)
this->arr[i][j]+=m.arr[i][j];
}
else
{
cout<<endl<<"Addition is not possible : ";
getch();
// exit(1);
}
}
Matrix Matrix::operator-(Matrix &m)
{
if(this->row==m.row && this->col==m.col)
{
Matrix t;
t.inputDim(m.row,m.col);
for(float i=0;i<m.row;i++)
for(float j=0;j<m.col;j++)
t.arr[i][j]=this->arr[i][j]-m.arr[i][j];
return t;
}
else
{
cout<<endl<<"Subtraction is not possible : ";
getch();
// exit(1);
}
}
Matrix Matrix::operator*(Matrix &m)
{
if(this->col==m.row)
{
Matrix t;
t.inputDim(this->row,m.col);
for(float i=0;i<this->row;i++)
{
for(float j=0;j<m.col;j++)
{
t.arr[i][j]=0;
for(float k=0;k<m.row;k++)
t.arr[i][j]+=this->arr[i][k]*m.arr[k][j];
}
}
return t;
}
else
{
cout<<endl<<"Addition is not possible : ";
getch();
// exit(1);
}
}
voidoperator<<(ostream &mycout,Matrix &t)
{
for(float i=0;i<t.row;i++)
{
cout.width(4);
cout.precision(2);
for(float j=0;j<t.col;j++)
mycout<<setw(5)<<t.arr[i][j]<<" ";
mycout<<endl;
}
}
voidoperator>>(istream &mycin,Matrix &t)
{
for(float i=0;i<t.row;i++)
{
for(float j=0;j<t.col;j++)
{
cout<<endl<<"Enter m["<<i+1<<"]["<<j+1<<"] : ";
mycin>>t.arr[i][j];
}
}
}
void main()
{
int r,c,choice,DataEntered=0;
Matrix a,b,x;
void getDimension(int &,int &);
void showResult(Matrix &,Matrix &,Matrix &);
void showResult1(Matrix &,Matrix &);
char ch='Y';
do
{
clrscr();
gotoxy(20,6);
cout<<"Matrix Operations";
gotoxy(20,7);
cout<<"ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ";
gotoxy(20,8);
cout<<"Create two new matricies : 1";
gotoxy(20,9);
cout<<"Matrix addition : 2";
gotoxy(20,10);
cout<<"Matrix addition using += : 3";
gotoxy(20,11);
cout<<"Matrix subtraction : 4";
gotoxy(20,12);
cout<<"Matrix multiplicaton : 5";
gotoxy(20,13);
cout<<"Matrix Equality checking : 6";
gotoxy(20,14);
cout<<"Show both Matrices : 7";
gotoxy(20,15);
cout<<"Inverse Matrix : 8";
gotoxy(20,16);
cout<<"Exit : 0";
gotoxy(20,17);
cout<<"Select your choice : ";
cin>>choice;
clrscr();
/* if(!DataEntered && choice!=1 && choice !=0)
{
cout<<endl<<"Matrices are empty";
getch();
continue;
}
*/
switch(choice)
{
case 1:
cout<<endl<<"Matrix-A Details";
cout<<endl<<"ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ";
getDimension(r,c);
a = Matrix(r,c);
cin>>a;
cout<<endl<<"Matrix-B Details";
cout<<endl<<"ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ";
getDimension(r,c);
b = Matrix(r,c);
cin>>b;
DataEntered=1;
break;
case 2:
x=a+b;
showResult(a,b,x);
break;
case 3:
a+=b;
showResult1(a,b);
break;
case 4:
x=a-b;
showResult(a,b,x);
break;
case 5:
Matrix x=a*b;
showResult(a,b,x);
break;
case 6:
if(a==b)
cout<<"Both matrix are equal";
else
cout<<"Both matrix are unequal";
break;
case 7:
showResult1(a,b);
break;
case 8:
cout<<endl<<"Matrix-A Details";
cout<<endl<<"ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ";
getDimension(r,c);
a = Matrix(r,c);
cin>>a;
b = a.inverse();
showResult1(a,b);
case 0:
exit(1);
default:
gotoxy(20,16);
cout<<"Invalid selection";
}
cout<<endl<<"continue (y/n) : ";
cin>>ch;
ch=toupper(ch);
}while(ch=='Y');
getch();
}
void getDimension(int &r,int &c)
{
cout<<endl<<"Enter row dimension : ";
cin>>r;
cout<<endl<<"Enter col dimension : ";
cin>>c;
}
void showResult(Matrix &x,Matrix &y,Matrix &z)
{
clrscr();
cout<<endl<<"Matrix A";
cout<<endl<<"ÍÍÍÍÍÍÍÍ"<<endl;
cout<<x;
cout<<endl<<"Matrix B";
cout<<endl<<"ÍÍÍÍÍÍÍÍ"<<endl;
cout<<y;
cout<<endl<<"Result";
cout<<endl<<"ÍÍÍÍÍÍ"<<endl;
cout<<z;
}
void showResult1(Matrix &x,Matrix &y)
{
clrscr();
cout<<endl<<"Matrix A";
cout<<endl<<"ÍÍÍÍÍÍÍÍ"<<endl;
cout<<x;
cout<<endl<<"Matrix B";
cout<<endl<<"ÍÍÍÍÍÍÍÍ"<<endl;
cout<<y;
}
/* OUTPUT
Matrix Operations
ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
Create two new matricies : 1
Matrix addition : 2
Matrix addition using += : 3
Matrix subtraction : 4
Matrix multiplicaton : 5
Matrix Equality checking : 6
Show both Matrices : 7
Exit : 0
Select your choice : 5
Multiplication.
Matrix A
ÍÍÍÍÍÍÍÍ
1 2 3
4 5 6
Matrix B
ÍÍÍÍÍÍÍÍ
1 2
3 4
5 6
Result
ÍÍÍÍÍÍ
22 28
49 64
continue (y/n) :
*/