30/09/2018, 16:49
[Code Review] Tính định thức của ma trận vuông cấp n
Xin chào anh chị, em là new mem ^^ mong các anh chị chỉ giáo cho ạ. hì
Em đang làm bt C đề là: tính định thức của ma trận vuông cấp n bằng cách chuyển thành ma trận tam giác, định thức là tích các phần tử trên đường chéo chính. Phía dưới là code của em, phiền mấy anh chị xem hộ giúp em với ^_^. Cám ơn mọi người nhiều ạ.
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
int main()
{
float a[50][50], d=1, t;
int n, i, j, k;
printf("nhap cap cua ma tran vuong A
"); scanf("%d",&n);
//nhap ma tran A
for(i=0; i<n; i++){
for(j=0; j<n; j++){
printf("a[%d][%d]= ", i, j);
scanf("%f", &a[i][j]);
}
printf("
");
}
//chuyen ma tran A thanh ma tran tam giac
/* thuat toan: - Neu a[k][i]=0 tang k xet phan tu khac
- Neu a[k][i]!=0 + Nhan toan bo hang k voi -a[i][i]/a[k][i]
+ Lay hang i cong vao hang k
+ doi cho hang k va i cho nhau
+ nhan toan bo hang k voi -1
+ tang k len, xet phan tu tiep theo
*/
for(i=0; i<n-1; i++){
for(k=i+1; k<n; k++){
if(a[k][i]==0) continue;
if(a[k][i]!=0) {
for(j=0; j<n; j++){
a[k][j]=-a[k][j]*(a[i][i]/a[k][i]);
a[i][j]=a[i][j]+a[k][j];
t=a[k][j];
a[k][j]=-a[i][j];
a[i][j]=t;
}
}
}
}
printf("ma tran tam giac la:
");
for(i=0; i<n; i++){
for(j=0; j<n; j++){
printf("%.2f ",a[i][j]);
}
printf("
");
}
//tinh dinh thuc
for(i=0; i<n; i++){
d=d*a[i][i];
}
printf("dinh thuc cua ma tran A= %.2f", d);
getch();
return 0;
}
Bài liên quan
Xem chạy đúng sai hay code đẹp xấu
thuật toán của bạn bị sai:
=>
a[i][i]==0
phải tìma[k][i]!=0
rồiswap cho dòng i
nếu không sẽ chia cho 0Dạ, giả sử em nhập vào ma trận:
0 2 1
1 -1 1
2 3 1
thì không ra được ma trận tam giác
Tham khảo trả lời của @Gio đi
Theo em, ngay cái chỗ a[k][i]!=0 , em thực hiện nhân với -a[i][i]/a[k][i] rồi cộng vào hàng i thì đã đảm bảo nó không chia cho 0 rồi
Đây là code Pascal mà em đã làm từ lâu nhưng cũng không động đến nên chưa chuyển sang C được. Các bác tham khảo nhé.