Gia sư Cần Thơ, Dạy Kèm Cần Thơ

VỮNG TIN - TIẾP BƯỚC - THÀNH CÔNG

    Bài 9. Tính định thức một ma trận Vuông!

    Share

    peterdrew
    Nhập môn
    Nhập môn

    Tổng số bài gửi: 19
    Points: 25
    Join date: 09/07/2010
    Age: 30
    Đến từ: Viện Vũ khí_Bộ Quốc phòng

    Bài 9. Tính định thức một ma trận Vuông!

    Bài gửi  peterdrew on Fri Jul 09, 2010 9:02 pm

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

      Hôm nay: Sun Apr 20, 2014 8:18 pm