Từ 1 tới 8 trên tổng số 8 kết quả

Đề tài: Tìm định thức của ma trận bằng c

  1. #1
    Ngày gia nhập
    11 2011
    Bài viết
    2

    Mặc định Tìm định thức của ma trận bằng c

    BÁC NÀO pít tìm định thức của ma trận bằng c, hoặc ma trận ngịch đáo,giải hệ phương trình tuyến tính băng khử gauss thì giúp minh vói

  2. #2
    Ngày gia nhập
    07 2010
    Nơi ở
    chỗ kín
    Bài viết
    446

    code lấy từ trang:
    http://www.c.happycodings.com/Beginn...ts/code62.html

    code rất hay, dùng vòng for tính được định thức cấp n.

    Visual C++ Code:
    1. #include<stdio.h>
    2. #include<conio.h>
    3. #define LIMIT 10
    4. void main()
    5. {
    6.   int chckdgnl();
    7.   float deter();
    8.   float a[LIMIT][LIMIT],value;
    9.   int i,j,order;
    10.   clrscr();
    11.   printf("Nhap cap cua dinh thuc :");
    12.   scanf("%d",&order);
    13.   for(i=0;i<order;i++)
    14.   {
    15.     for(j=0;j<order;j++)
    16.     {
    17.       printf("Nhap phan tu [%d,%d] :",i+1,j+1);
    18.       scanf("%f",&a[i][j]);
    19.     }
    20.   }
    21.  
    22.   if(chckdgnl(a,order)==0)
    23.      value=0;
    24.   else
    25.      value=deter(a,order);
    26.   printf("Dinh thuc :%f",value);
    27.   getch();
    28. }
    29.  
    30. float deter(float a[][LIMIT],int forder)
    31. {
    32.   int i,j,k;
    33.   float mult;
    34.   float deter=1;
    35.   for(i=0;i<forder;i++)
    36.   {
    37.     for(j=0;j<forder;j++)
    38.     {
    39.       mult=a[j][i]/a[i][i];
    40.       for(k=0;k<forder;k++)
    41.       {
    42.         if(i==j) break;
    43.         a[j][k]=a[j][k]-a[i][k]*mult;
    44.       }
    45.     }
    46.   }
    47.   for(i=0;i<forder;i++)
    48.   {
    49.     deter=deter*a[i][i];
    50.   }
    51.   return(deter);
    52. }
    53.  
    54.  
    55. int chckdgnl(float array[][LIMIT],int forder)
    56. {
    57.   int i,j,k;
    58.   float nonzero;
    59.   for(i=0;i<forder;i++)
    60.   {
    61.      if(array[i][i]==0)
    62.      {
    63.         for(j=0;j<forder;j++)
    64.         {
    65.           if(array[i][j]!=0)
    66.           {
    67.              k=j;
    68.              break;
    69.           }
    70.           if(j==(forder)) //forder-1
    71.              return(0);
    72.         }
    73.         for(j=0;j<forder;j++)
    74.         {
    75.           array[j][i]=array[j][i]-array[j][k];
    76.         }
    77.      }
    78.   }
    79.   return(1);
    80. }

    chế độ hiển thị màu chữ của code ở diễn đàn này sai rồi.

  3. #3
    Ngày gia nhập
    11 2011
    Bài viết
    2

    Mặc định bài này hay thật

    cảm ơn bạn nhiều nhá

  4. #4
    Ngày gia nhập
    02 2011
    Bài viết
    5

    Bạn ơi, kĩ thuật lập trình của mình còn yếu, nên bạn cho mình hỏi return(1) nghĩa
    là gì vậy

  5. #5
    Ngày gia nhập
    10 2011
    Bài viết
    6

    ai có thể nói rõ ý tưởng mình với dk k?

  6. #6
    Ngày gia nhập
    11 2010
    Nơi ở
    hell
    Bài viết
    165

    Mặc định Tìm định thức của ma trận bằng c

    Trích dẫn Nguyên bản được gửi bởi kaito_kid_1012 Xem bài viết
    ai có thể nói rõ ý tưởng mình với dk k?
    thì bạn làm toán seo thì dựa vào đó mà viết chứ seo
    HT117-5277

  7. #7
    Ngày gia nhập
    07 2010
    Nơi ở
    chỗ kín
    Bài viết
    446

    lệnh return để thoát ra khỏi hàm.

    nói thực đoạn code trên mình cũng không đọc kỹ (lười mà), nhưng bình thường là mình dùng đệ quy để tính.

    định thức cấp 2 thì nhân chéo.
    định thức cấp 3 thì chọn 1 cột rồi nhân từng số hạng với 3 cái định thức cấp 2, tính tổng, hiệu xen kẽ là ra.
    định thức cấp 4 thì chọn 1 cột rồi nhân từng số hạng với 4 cái định thức cấp 3, tính tổng, hiệu xen kẽ là ra.
    ...

    nhìn thấy tính đệ quy chưa.

  8. #8
    Ngày gia nhập
    04 2010
    Bài viết
    1,534

    Lệnh return (1) và return (0) dùng để cho biết tình trạng chủa check cái gì đó. Đọc tên hàm thấy chck thì đaón nó check cái gì đó chứ code gì mà không có chú thích (comments) gì hết thì đọc vài giờ mới hiểu.

    Bài giải trên dùng phải cẩn thận. Vì nó không có phần an toàn (safety net) của con toán số thực.
    Trong phép toán mult=a[j][i]/a[i][i]
    Tuy nó đã có check để tránh crash khi a[i][i] == 0
    Nhưng tôi không thấy chỗ check khi a[i][i] rất nhỏ và a[j][i] rất lớn --> thương số rất lớn và dẫn tới tràn số.
    Một số môi trường sẽ crash nếu chạy bị tràn số, đấy là may mắn. Ở các môi trường không crash lúc tràn số thì bạn nhận được kết quả sai mà không biết

Các đề tài tương tự

  1. Trao đổi liên kết, trao doi logo, Text Link với các webforumblog (free)
    Gửi bởi nguyenlam14990 trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 31
    Bài viết cuối: 13-03-2012, 11:53 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn