Vấn đề thao tác với Ma trận đã đòi hỏi các bạn phải quan tâm nhiều; hôm nay Peter đưa cho các bạn một code mà tính Định thức một ma trận vuông có cấp bất kỳ!

Code:

#include<stdio.h>
#include<conio.h>
void nhapmat(float a[][100],int n);
void xuatmat(float a[][100],int n);
float det(float a[][100],int n);
void main()
{
  float a[100][100];int n;
  printf("\nCHAO MUNG CAC BAN DEN VOI CHUONG TRINH TINH DINH THUC");
  printf("\nNhap cap cua ma tran ");
  scanf("%d",&n);
  nhapmat(a,n);
  printf("\n");
  xuatmat(a,n);
  printf("\n");
  printf("Dinh thuc cua ma tran La:%4.2f ",det(a,n));
  printf("\nGood bye!");
  getch();
}
// ham nhap ma tran
void nhapmat(float a[][100],int n)
{
    for(int i=0;i<n;i++)
    for(int j=0;j<n;j++)
      {
      printf("a[%d][%d]= ",i+1,j+1);
      scanf("%f",&a[i][j]);
      }
}
//Ham xuat ma tran
void xuatmat(float a[][100],int n)
{
    for(int i=0;i<n;i++)
    {
    for(int j=0;j<n;j++) printf("%4.2f ",a[i][j]);
    printf("\n");
    }
}
// ham tinh dinh thuc
float det(float a[][100],int n)
{
    int i,j,k,dem=0,kt;
    float b[100],h,det=1,c[100];
    for(i=0;i<n-1;i++)
    {
      if(a[i][i]==0)
      {
      kt=0;
      for(j=0;j<n;j++)
          if(a[i][j]!=0)
          {
            for(k=0;k<n;k++)
            {// Doi cot j voi cot i
              c[k]=a[k][i];
                a[k][i]=a[k][j];
                a[k][j]=c[k];
              }
            dem++;// dem so lan doi cot
            kt++;// Kiem tra xem co so 0 o dong i cot j
            break;
          }
      }
    if(kt==0) return 0;
    b[i]=a[i][i];
    for(j=0;j<n;j++) a[i][j]=a[i][j]/b[i];//tao so 1 o dong i,cot 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];//lay dong thu j-h*dong i
    }
    }
b[n-1]=a[n-1][n-1];
for(i=0;i<n;i++) det=det*b[i];// Nhan cac so da lay ra ngoai dinh thuc
if(dem%2==0) return det;
else return -det;
}