[OOP C++] tìm ma trận nghịch đảo của mt vuông cấp n

lập trình hướng đối tượng tìm ma trận nghịch đảo của 1 ma trận vuông cấp n tùy ý

matran.h

#pragma once
#include<iostream>
#include<iomanip>
using namespace std;
class matran
{
private:
float a[100][100];
int n;
public:
matran(void);
~matran(void);
void nhap();
void xuat();
float get(int,int);
void set(float,int,int);
void setn(int);
float det();
float con(int,int);
void nghichdao();
};


matran.cpp

#include "matran.h"
matran::matran(void)
{
}
matran::~matran(void)
{
}
void matran::nhap()
{
do{
cout<<"\n*nhap cap ma tran N=";
cin>>n;
if(n<=0) cout<<"khong hop le! nhap lai!";
}while(n<=0);
for(int i=0;i<n;i++)
{
cout<<"\nnhap hang "<<i+1<<":\n";
for(int j=0;j<n;j++)
cin>>a[i][j];
}
cout<<"\n*ma tran da nhap la:\n";
xuat();
cout<<"\n---------------------------------------\n";
}
void matran::xuat()
{
for(int i=0;i<n;i++)
{
cout<<"\n\n";
for(int j=0;j<n;j++)
cout<<setw(10)<<a[i][j];
}
}
float matran::get(int i,int j)
{
return a[i][j];
}
void matran::set(float x,int i,int j)
{
a[i][j]=x;
}
float matran::det()
{
int i,j,k,dem=0,kt;
float b[100],kq=1,h;
for(i=0;i<n-1;i++)
{
if(a[i][i]==0)
{
kt=0;
for(j=i+1;j<n;j++)
{
if(a[i][j]!=0)
{
for(k=0;k<n;k++)
{
h=a[k][i];
a[k][i]=a[k][j];
a[k][j]=h;
}
dem++;
kt=1;
break;
}
if(kt==0) return 0;
}
}
b[i]=a[i][i];
for(j=0;j<n;j++) a[i][j]/=b[i];
for(j=i+1;j<n;j++)
{
h=a[j][i];
for(k=0;k<n;k++) a[j][k]=a[j][k]-h*a[i][k];
}
}
b[n-1]=a[n-1][n-1];
for(i=0;i<n;i++) kq*=b[i];
if(dem%2==0) return kq;
return -kq;
}
void matran::setn(int x)
{
n=x;
}
float matran::con(int h,int c)
{
matran b;
b.setn(n-1);
int i,j,x=-1,y;
for(i=0;i<n;i++)
{
if(i==h) continue;
x++;y=-1;
for(j=0;j<n;j++)
{
if(j==c)continue;
y++;
b.set(a[i][j],x,y);
}
}
if((h+c)%2==0) return b.det();
return -b.det();
}
void matran::nghichdao()
{
matran x;
int i,j;
float t;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
x.set(con(i,j),i,j);
x.setn(n);
for(i=0;i<n;i++)
for(j=i+1;j<n;j++)
{
t=x.get(i,j);
x.set(x.get(j,i),i,j);
x.set(t,j,i);
}
float k=det();
if(k==0) cout<<"\n*khong co ma tran nghich dao!";
else
{
for(i=0;i<n;i++)
for(j=0;j<n;j++)
x.set(x.get(i,j)/k,i,j);
cout<<"\n*ma tran nghich dao la:\n";
x.xuat();
}
}

source.cpp

#include"matran.h"
void main()
{
matran a;
a.nhap();
a.nghichdao();
system("pause");
}

Không có nhận xét nào:

Đăng nhận xét