các dajka bài này vẫn có chỗ sai
ma trận là
0 2
1 3
định thức =-2 chứ ko phải là 2
còn ma trận nghịch đảo thì chuẩn rồi .mọi ng Xem lại giúp e với
Bài hoàn chỉnh đây:
Cám ơn thầy onminh rất nhiều.C Code:
/* DINH THUC VA MA TRAN NGHICH DAO */ #include<stdio.h> #include<conio.h> void main() { int i,j,k,m,n,na,dau=1; double det,x,tam; double a[50][50],b[50][50]; clrscr(); na=2*n;//so cot ma tran chuyen tiep. //Nhap ma tran A.------------------------------- for(i=0;i<n;i++) for(j=0;j<n;j++) { } //Tao ma tran lien ket.--------------------------- for(i=0;i<n;i++) for(j=n;j<na;j++) { if(i==(j-n)) a[i][j]=1; else a[i][j]=0; } //Ham giai phuong trinh.-------------------- //Dung phep BDSC dua Aij ve ma tran cheo. for(j=0;j<n;j++) { for(i=n-1;i>=j;i--) { if(a[i][j]==0) continue;//Neu phan tu a bang 0 thi tang i. if((i>j)&&(a[i][j]!=0)) { k=i-1; while((k>=j)&&(a[k][j]==0)) k--;//Xet cac phan tu a khac 0 tren cung cot j if(k<j) { //Doi cho dong thu i va j cho ca ma tran mo rong. for(m=0;m<na;m++) { tam=a[i][m]; a[i][m]=a[j][m]; a[j][m]=tam; } dau=-dau; } if((k>=j)&&(k>=0)) { x=-a[i][j]/a[k][j]; //Nhan dong thu k cho x roi cong vao dong thu i. for(m=0;m<na;m++) a[i][m]+=a[k][m]*x; } } } } for(j=n-1;j>=0;j--) { for(i=0;i<=j;i++) { if(a[i][j]==0) continue; if((i<j)&&(a[i][j]!=0)) { k=i+1; while((k<=j)&&(a[k][j]==0)) k++; if((k<=j)&&(k<na)) { x=-a[i][j]/a[k][j]; //Nhan dong thu k voi x roi cong vao dong thu i. for(m=0;m<na;m++) a[i][m]+=a[k][m]*x; } } } } //Tinh dinh thuc.------------------------------------ det=1; for(i=0;i<n;i++) for(j=0;j<n;j++) if(i==j) det*=a[i][j]; //Tinh ma tran nghich dao.----------------------- if(det!=0) { for(i=0;i<n;i++) for(j=n;j<na;j++) { a[i][j]=a[i][j]/a[i][i]; } for(i=0;i<n;i++) for(j=n;j<na;j++) { b[i][j-n]=a[i][j]; } //In ra ma tran nghich dao.----------------- for(i=0;i<n;i++) { for(j=0;j<n;j++) } } getch(); } //6:01 PM 4/22/2010
Đã được chỉnh sửa lần cuối bởi conrongchautien : 27-03-2012 lúc 12:05 AM.
YH : lobuocphuudu_218
Phone : 0126 463 5095
các dajka bài này vẫn có chỗ sai
ma trận là
0 2
1 3
định thức =-2 chứ ko phải là 2
còn ma trận nghịch đảo thì chuẩn rồi .mọi ng Xem lại giúp e với
Live as If tommorrow never comes
Mình vừa check lại rồi. Đúng là do mình sai sót. mình sửa lại cho chính xác rồi. Bạn click vào đây xem lại nha
YH : lobuocphuudu_218
Phone : 0126 463 5095
Ngôn ngữ là nhất thời, giải thuật là vĩnh cửu.
Em sửa lại rồi. Tại nghĩ sao làm vậy thôi, chưa bik tối ưu
http://forums.congdongcviet.com/show...3&postcount=21
Cám ơn thầy!
YH : lobuocphuudu_218
Phone : 0126 463 5095
mọi ng xem hộ em cái này vớiPHP Code:#include<conio.h>
#include<stdio.h>
#include<iostream.h>
#include<math.h>
#include<iomanip.h>
#include <dos.h>
#include <math.h>
#include <stdlib.h>
#include <ctype.h>
class MT
{ private:
int n;
double a[10][10];
public:
//---------------TOAN TU CONG-------------
MT MT::operator+(const MT &right)
{//if ( n!=right.n) exit (0) ;
MT c;
for (int i=1;i<=n;i++)
for (int j=1;j<=n;j++)
{ c.a[i][j] = a[i][j] + right.a[i][j] ; }
c.n=n;
return c ;
}
//-----------------TOAN TU TRU---------------
MT MT::operator-(const MT &b)
{
MT d;
if (n!=b.n) cout<<"Kh«ng tÝnh ®îc ";
else
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
{ d.a[i][j]=a[i][j]-b.a[i][j];}
d.n=n;
return d;
}
//-----------------TOAN TU NHAN--------------
MT MT::operator*(const MT &t)
{ MT c;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
for(int k=1;k<=n;k++)
{ c.a[i][j]+=a[i][k]*t.a[k][j];}
c.n=n;
return c;
}
void nhap();
void in();
void dt_nd(MT &a);
};
//================Dinh thuc nghich dao==========
void MT::dt_nd(MT &u)
{
int i,j,k,m,n,na,dau=0; //Thay vì dau=1;
double det,x,tam;
double b[10][10];
/*clrscr();
printf("\n CHAO MUNG DEN VOI CHUONG TRINH TINH DINH THUC VA MA TRAN NGHICH DAO");
printf("\n");
printf("\n NHAP CAP MA TRAN:"); scanf("%d",&n);*/
na=2*n;//so cot ma tran chuyen tiep.
//Nhap ma tran A.-------------------------------
/*for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
printf("a[%d][%d]=",i+1,j+1);
// scanf("%lf",&a[i][j]);
cin>>a[i][j];
}
*/
//Tao ma tran lien ket.---------------------------
for(i=0;i<n;i++)
for(j=n;j<na;j++)
{
if(i==(j-n)) a[i][j]=1;
else a[i][j]=0;
}
//Ham giai phuong trinh.--------------------
//Dung phep BDSC dua Aij ve ma tran cheo.
for(j=0;j<n;j++)
{
for(i=n-1;i>=j;i--)
{
if(a[i][j]==0) continue;//Neu phan tu a bang 0 thi tang i.
if((i>j)&&(a[i][j]!=0))
{
k=i-1;
while((k>=j)&&(a[k][j]==0)) k--;//Xet cac phan tu a khac 0 tren cung cot j
if(k<j)
{
//Doi cho dong thu i va j cho ca ma tran mo rong.
for(m=0;m<na;m++)
{
tam=a[i][m];
a[i][m]=a[j][m];
a[j][m]=tam;
}
dau++; // thay vì :dau=-dau;
}
if((k>=j)&&(k>=0))
{
x=-a[i][j]/a[k][j];
//Nhan dong thu k cho x roi cong vao dong thu i.
for(m=0;m<na;m++)
a[i][m]+=a[k][m]*x;
}
}
}
}
for(j=n-1;j>=0;j--)
{
for(i=0;i<=j;i++)
{
if(a[i][j]==0) continue;
if((i<j)&&(a[i][j]!=0))
{
k=i+1;
while((k<=j)&&(a[k][j]==0)) k++;
if((k<=j)&&(k<na))
{
x=-a[i][j]/a[k][j];
//Nhan dong thu k voi x roi cong vao dong thu i.
for(m=0;m<na;m++)
a[i][m]+=a[k][m]*x;
}
}
}
}
//Tinh dinh thuc.------------------------------------
det=1;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
if(i==j) det*=a[i][j]; // B? :*dau
if(dau%2!=0) det*=-1; //N?u s? l?n d?i ch? 2 dòng là l? thì d?i d?u giá tr? d?nh th?c
printf("\n Det=%5.2lf",det);
//Tinh ma tran nghich dao.-----------------------
if(det!=0)
{
for(i=0;i<n;i++)
for(j=n;j<na;j++)
{
a[i][j]=a[i][j]/a[i][i];
}
for(i=0;i<n;i++)
for(j=n;j<na;j++)
{
b[i][j-n]=a[i][j];
}
//In ra ma tran nghich dao.-----------------
printf("\n MA TRAN NGHICH DAO CUA A:\n");
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
printf("%5.1lf",b[i][j]);
printf("\n");
}
}
else printf("\n KHONG CO MA TRAN NGHICH DAO.");
printf("\n GOOBYE.CHUC MOI NGUOI VUI VE!");
return;
getch();
}
void MT::nhap()
{ cout<<"\n CÊp ma trËn=: ";
cin>>n;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
{ cout<<"\n PhÇn tö hµng"<<i<<" cét"<<j<<"= ";
cin>>a[i][j];
}
}
void MT::in()
{ for(int i=1;i<=n;i++)
{ cout<<"\n";
for(int j=1;j<=n;j++)
cout<<setw(6)<<a[i][j]<<" ";
}
}
void main()
{ MT a,b,h,k,tich;
a.nhap();
clrscr();
cout<<"\nMa trËn A: ";
a.in();
b.nhap();
clrscr();
cout<<"\nMa trËn B: ";
a.in();
b.in();
h=a+b;
k=a-b;
tich=a*b;
cout<<"\nMa trËn tæng: ";
h.in();
cout<<"\nMa trËn hiÖu";
k.in();
cout<<"\nMa trËn tÝch";
tich.in();
a.dt_nd(a);
getch();
}
lỗi cannot convert MT to int la gì nhi? ko hiểu
Sửa giúp em với ('-")
Đã được chỉnh sửa lần cuối bởi hoan_it_cgh : 25-04-2010 lúc 09:25 PM.
Live as If tommorrow never comes
Vấn đề là ở chỗ này: Hàm thành viên void dt_nd(MT &a) được định nghĩa bên ngoài lớp MT, nhưng thiếu MT::. Thứ hai, tham biến MT &a trùng tên với biến trong lớp. Nếu sử dụng nó thì viết a.a[i][j], còn swr dụng b thì viết b.a[i][j].
Ngôn ngữ là nhất thời, giải thuật là vĩnh cửu.
em đã sửa rồi đã hết lỗi nhưng nó ko hiện kq ra màn hình
có phải việc truyền đối số sai sót chỗ nào ko ạ
onminh sữa giúp em với
Live as If tommorrow never comes
hoàn xem lại phần nhập ma trận đi
bài của hoàn vòng "for" đều bắt đầu từ 1
nhưng ở phần tính định thức và ma trận nghich đảo vòng for lại bắt đầu từ 0
sửa lại đi rồi xem kết quả nhé
"lỗi cannot convert MT to int la gì nhi ? ko hiểu" cái nè là ko thể chuyển MT sang kiểu int vì nó đang ở kiểu double
Đã được chỉnh sửa lần cuối bởi tnglinh : 26-04-2010 lúc 09:51 AM.