Kênh Tên Miền chuyên cung cấp tên miền đẹp, giá rẻ! Hãy liên hệ kỹ thuật: 0914205579 - Kinh doanh: 0912191357 để được tư vấn, hướng dẫn miễn phí, Cảm ơn quý khách đã ủng hộ trong thời gian qua!
Tuesday, February 3, 2015

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");
}

0 comments:

Post a Comment

Popular Posts