Thứ Bảy, 27 tháng 9, 2014

tính định thức ma trận cấp n trong lập trình C


/// tính định thức ma trận vuông bất kì
#include<stdio.h>
#include<conio.h>
/// hàm nhập ma trận
void nhap(float a[][100], int n)
{
printf("_________________________________________________________\n");
for (int i = 0; i < n; i++)
{
printf("nhap hang %d:\n", i + 1);
for (int j = 0; j < n; j++)
scanf_s("%f", &a[i][j]);
}
printf("_______________________________________________________\n");
}
///hàm xuất ma trận
void xuat(float a[][100], int n)
{
printf("_______________________________________________________\n");
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
printf("%8.2f   ", a[i][j]);
}
printf("\n");
}
printf("_________________________________________________________\n");
}
///hàm tính ma trận
float tinh(float a[][100], int n)
{
///khai báo biến và mảng
int i, j, k, dem = 0,kt=0;
float b[100], c[100], h, det = 1;
for (i = 0; i < n - 1; i++)
{
///nếu số ở đường chéo chính =0 thì biến đổi để mất số 0 đó đi
if (a[i][i] == 0)
{
///tìm 1 số khác không trên hàng i
for (j = 0; j < n; j++)
if (a[i][j] != 0)
{
///tiến hành đổi chổ 2 cột i và j
for (k = 0; k < n; k++)
{
c[k] = a[k][i];
a[k][i] = a[k][j];
a[k][j] = c[k];
}
///sau khi đổi xong thì đếm số lần đổi và thoát khỏi vòng for,if
dem++;
kt++;
break;
}
if (kt == 0) return 0;

}
///dùng mảng b[i] để lưu lại những số ta đã chia
b[i] = a[i][i];
///tạo số 1 ở dòng i cột i
for (j = 0; j < n; j++) a[i][j] = a[i][j] / b[i];
///tiến hành biến đổi để có các số 0 tạo thành ma trận tam giác
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];
}
}
///vì số thứ [n][n] ta không thể biến nó thành số 0 do nó là hàng cuối cùng
b[n - 1] = a[n - 1][n - 1];
///giá trị của định thức là tích các số mà ta đã chia, tức là b[i]
for (i = 0; i < n; i++) det *= b[i];
/// nếu số lần đổi cột là số lẻ thì ta cần thêm dấu trừ vào định thức đã tính ở trên
if (dem % 2 == 0) return det; else return -det;
}
///chương trình chính
void main()
{
float a[100][100];
int n;
printf("nhap cap cua ma tran:\n");
scanf_s("%d", &n);
nhap(a, n);
xuat(a, n);
printf("dinh thuc cua ma tran la: %.2f", tinh(a, n));
_getch();

}




copy xin vui lòng để tên tác giả bài viết và link blog
xin chân thành cảm ơn!

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

Đăng nhận xét