Numerical determinant solve of n order , written in c++

#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;
}

Post a Comment

0 Comments