E làm như này nhưng chạy bị sai, e sửa mãi mà ko đc. các a chỉ giúp e với ạ.
void inMaTran(float **p, int x, int y)
{
for(int i=0; i<x; i++)
{
cout<<"\n\t";
for(int j=0; j<y; j++) cout<<setw(5)<<p[i][j]<<" ";
}
cout<<endl;
float dinhThuc(float **a,int m, int n)
{
if(m==n)
{
float det=1.0;
//Tao ma tran B lay gia tri cua ma tran A
float **b=new float*[m];
for(int i=0; i<m; i++) b[i]=new float[n];
for(int i=0; i<m; i++)
for(int j=0; j<n; j++)
b[i][j]=a[i][j];
//Dua ma tran ve ma tran tam giac tren
int i=0;
for(i=0; i<m-1; i++)
{
if(b[i][i]==0)
for(int k=i+1; k<m; k++)
{
bool c=0;
if(b[k][i]!=0)
{
for(int j=0; j<n; j++)
{
float t=b[i][j];
b[i][j]=b[k][j];
b[k][j]=t;
}
c=1;
break;
}
if(c) break;
}
for(int k=i+1; k<m; k++)
{
float tl=b[k][i]/b[i][i];
for(int j=0; j<n; j++)
b[k][j]-=b[i][j]*tl;
}
}
//Tinh dinh thuc bang tich cac phan tu tren duong cheo chinh
for(int i=0; i<n; i++) det*=b[i][i];
for(int i=0; i<n; i++) delete[] b[i];
delete[] b;
return det;
}
else return 0;
}
//Tinh tung phan tu cua ma tran phu hop
float phuHop(float **b, float det, int x, int y)
{
float **p=new float*[m-1];
for(int i=0; i<m-1; i++) p[i]=new float[n-1];
for(int i=0; i<x-1; i++)
{
for(int j=0; j<y-1; j++)
p[i][j]=b[i][j];
for(int j=y; j<n-1; j++)
p[i][j]=b[i+1][j];
}
for(int i=x; i<m-1; i++)
{
for(int j=0; j<y-1; j++)
p[i][j]=b[i][j+1];
for(int j=y; j<n-1; j++)
p[i][j]=b[i+1][j+1];
}
float pTu=(pow(-1,x+y)*dinhThuc(p,m-1,n-1))/det;
for(int i=0; i<m-1; i++) delete[] p[i];
delete[] p;
return pTu;
}
void nghichDao()
{
if(dinhThuc(a,m,n)==0) cout<<"\tMa Tran A khong kha nghich\n";
else
{
float **b=new float*[m];
for(int i=0; i<m; i++) b[i]=new float[n];
for(int i=0; i<m; i++)
for(int j=0; j<n; j++)
b[i][j]=phuHop(a,dinhThuc(a,m,n),i,j);
cout<<"Ma tran nghich dao cua ma tran A la:";
inMaTran(b,m,n);
for(int i=0; i<m; i++) delete[] b[i];
delete[] b;
}
}
}