#include<conio.h>
#include<stdbool.h>
#include<iostream>
#include<math.h>
using namespace std;
class detFunc{
public:
float matrix[10][10],SecondOrderDet[2][2];
int order;
float val;
void createDet();
void printDet();
bool cfOrderIsOne();
void newDetCreate();
float SecondOrderDetSolve(float, float, float, float);
int SearchRowForNextNonZero();
int SearchColForNextNonZero();
};
void detFunc::createDet()
{
int i,j;
for(i=0;i<order;i++)
{
for(j=0;j<order;j++)
{
cin>>matrix[i][j];
}
}
}
void detFunc::printDet()
{
int i,j;
for(i=0;i<order;i++)
{
for(j=0;j<order;j++)
{
cout<<matrix[i][j];
cout<<"\t";
}
cout<<"\n";
}
}
void detFunc::newDetCreate()
{
int row,col;
float swap;
detFunc rec;
rec.order=order-1;
int i,j;
if(matrix[0][0]==0)
{
row=SearchRowForNextNonZero();
col=SearchColForNextNonZero();
if(row!=0)
{
val=val*(-1);
for(i=0;i<order;i++)
{
swap=matrix[0][i];
matrix[0][i]=matrix[row][i];
matrix[row][i]=swap;
}
}
if(col!=0)
{
val=val*(-1);
for(i=0;i<order;i++)
{
swap=matrix[i][0];
matrix[i][0]=matrix[i][col];
matrix[i][col]=swap;
}
}
}
for(i=0;i<rec.order;i++)
{
for(j=0;j<rec.order;j++)
{
rec.matrix[i][j]=SecondOrderDetSolve(matrix[0][0],matrix[0][j+1],matrix[i+1][0],matrix[i+1][j+1]);
}
}
rec.val=(float) pow(matrix[0][0],order-2);
rec.val=(1/rec.val);
rec.val=rec.val*val;
if(rec.cfOrderIsOne()==false)
{
rec.newDetCreate();
}
else
{
cout<<"\n result :: "<<rec.matrix[0][0]*rec.val;
}
}
bool detFunc::cfOrderIsOne()
{
if(order==1)
{
return true;
}
else
{
return false;
}
}
float detFunc::SecondOrderDetSolve(float i0,float i1,float i2,float i3)
{
float res=0;
SecondOrderDet[0][0]=i0;
SecondOrderDet[0][1]=i1;
SecondOrderDet[1][0]=i2;
SecondOrderDet[1][1]=i3;
res=(SecondOrderDet[0][0]*SecondOrderDet[1][1])-(SecondOrderDet[0][1]*SecondOrderDet[1][0]);
return res;
}
int detFunc::SearchRowForNextNonZero()
{
int i,j;
for(i=0;i<order;i++)
{
for(j=0;j<order;j++)
{
if(matrix[i][j]!=0)
{
break;
}
}
if(matrix[i][j]!=0)
{
break;
}
}
return i;
}
int detFunc::SearchColForNextNonZero()
{
int i,j=0;
for(i=0;i<order;i++)
{
for(j=0;j<order;j++)
{
if(matrix[i][j]!=0)
{
break;
}
}
if(matrix[i][j]!=0)
{
break;
}
}
return j;
}
int main()
{
detFunc det;
det.val=1;
cout<<"enter the order of determinant = ";
cin>>det.order;
det.createDet();
det.printDet();
det.newDetCreate();
getch();
return 0;
}
#include<stdbool.h>
#include<iostream>
#include<math.h>
using namespace std;
class detFunc{
public:
float matrix[10][10],SecondOrderDet[2][2];
int order;
float val;
void createDet();
void printDet();
bool cfOrderIsOne();
void newDetCreate();
float SecondOrderDetSolve(float, float, float, float);
int SearchRowForNextNonZero();
int SearchColForNextNonZero();
};
void detFunc::createDet()
{
int i,j;
for(i=0;i<order;i++)
{
for(j=0;j<order;j++)
{
cin>>matrix[i][j];
}
}
}
void detFunc::printDet()
{
int i,j;
for(i=0;i<order;i++)
{
for(j=0;j<order;j++)
{
cout<<matrix[i][j];
cout<<"\t";
}
cout<<"\n";
}
}
void detFunc::newDetCreate()
{
int row,col;
float swap;
detFunc rec;
rec.order=order-1;
int i,j;
if(matrix[0][0]==0)
{
row=SearchRowForNextNonZero();
col=SearchColForNextNonZero();
if(row!=0)
{
val=val*(-1);
for(i=0;i<order;i++)
{
swap=matrix[0][i];
matrix[0][i]=matrix[row][i];
matrix[row][i]=swap;
}
}
if(col!=0)
{
val=val*(-1);
for(i=0;i<order;i++)
{
swap=matrix[i][0];
matrix[i][0]=matrix[i][col];
matrix[i][col]=swap;
}
}
}
for(i=0;i<rec.order;i++)
{
for(j=0;j<rec.order;j++)
{
rec.matrix[i][j]=SecondOrderDetSolve(matrix[0][0],matrix[0][j+1],matrix[i+1][0],matrix[i+1][j+1]);
}
}
rec.val=(float) pow(matrix[0][0],order-2);
rec.val=(1/rec.val);
rec.val=rec.val*val;
if(rec.cfOrderIsOne()==false)
{
rec.newDetCreate();
}
else
{
cout<<"\n result :: "<<rec.matrix[0][0]*rec.val;
}
}
bool detFunc::cfOrderIsOne()
{
if(order==1)
{
return true;
}
else
{
return false;
}
}
float detFunc::SecondOrderDetSolve(float i0,float i1,float i2,float i3)
{
float res=0;
SecondOrderDet[0][0]=i0;
SecondOrderDet[0][1]=i1;
SecondOrderDet[1][0]=i2;
SecondOrderDet[1][1]=i3;
res=(SecondOrderDet[0][0]*SecondOrderDet[1][1])-(SecondOrderDet[0][1]*SecondOrderDet[1][0]);
return res;
}
int detFunc::SearchRowForNextNonZero()
{
int i,j;
for(i=0;i<order;i++)
{
for(j=0;j<order;j++)
{
if(matrix[i][j]!=0)
{
break;
}
}
if(matrix[i][j]!=0)
{
break;
}
}
return i;
}
int detFunc::SearchColForNextNonZero()
{
int i,j=0;
for(i=0;i<order;i++)
{
for(j=0;j<order;j++)
{
if(matrix[i][j]!=0)
{
break;
}
}
if(matrix[i][j]!=0)
{
break;
}
}
return j;
}
int main()
{
detFunc det;
det.val=1;
cout<<"enter the order of determinant = ";
cin>>det.order;
det.createDet();
det.printDet();
det.newDetCreate();
getch();
return 0;
}
0 Comments