📄 cdet.cpp
字号:
#include "CDet.h"
#include "iostream.h"
//constructor
//intialize Mat
CDet::CDet(int dim)
{
int RowCnt,ColCnt;
Dim=dim;
Mat=new int*[Dim];
for(RowCnt=0;RowCnt<Dim;RowCnt++)
{
Mat[RowCnt]=new int[Dim];
for(ColCnt=0;ColCnt<Dim;ColCnt++)
cin>>Mat[RowCnt][ColCnt];
cout<<endl;
}
}
//destructor
CDet::~CDet()
{
int Cnt;
for(Cnt=0;Cnt<Dim;Cnt++)
delete []Mat[Cnt];
delete []Mat;
}
//function Det():return determinant of Mat
//recursive algorithm used
int CDet::Determinant(int **mat,int dim)
{
int Det=0;
//if dimension is 1,return the single element
if(dim==1)
Det=mat[dim-1][dim-1];
else if(dim>=2)
{
int Cnt1,Cnt2;
for(Cnt1=0;Cnt1<dim;Cnt1++)
{
int **dedim;
dedim=DeDim(mat,dim,0,Cnt1);
if(Cnt1%2==0)
Det+=mat[0][Cnt1]*Determinant(dedim,dim-1);
else
Det-=mat[0][Cnt1]*Determinant(dedim,dim-1);
//free **dedim
for(Cnt2=0;Cnt2<dim-1;Cnt2++)
delete []dedim[Cnt2];
delete []dedim;
}
}
return Det;
}
//function reduce dimension of a matrix
int **CDet::DeDim(int **mat,int dim,int i,int j)
{
int **temp;//to be returned
//intialize **temp
temp=new int*[dim-1];
int RowCnt,ColCnt;
for(RowCnt=0;RowCnt<dim-1;RowCnt++)
temp[RowCnt]=new int[dim-1];
for(RowCnt=0;RowCnt<i;RowCnt++)
{
for(ColCnt=0;ColCnt<j;ColCnt++)
temp[RowCnt][ColCnt]=mat[RowCnt][ColCnt];
for(ColCnt=j;ColCnt<dim-1;ColCnt++)
temp[RowCnt][ColCnt]=mat[RowCnt][ColCnt+1];
}
for(RowCnt=i;RowCnt<dim-1;RowCnt++)
{
for(ColCnt=0;ColCnt<j;ColCnt++)
temp[RowCnt][ColCnt]=mat[RowCnt+1][ColCnt];
for(ColCnt=j;ColCnt<dim-1;ColCnt++)
temp[RowCnt][ColCnt]=mat[RowCnt+1][ColCnt+1];
}
return temp;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -