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

Đề tài: Chia đôi ma trận

  1. #1
    Ngày gia nhập
    04 2008
    Nơi ở
    Bốn bề là nhà
    Bài viết
    703

    Mặc định Chia đôi ma trận

    Mình có bài như thế này,post cho mọi người làm cuối tuần cho vui nha
    Cho ma trận A m*n
    vd:
    0 1 1 1 0 1
    1 0 0 1 0 0
    1 0 1 1 0 1
    1 1 0 0 0 0
    1 0 0 1 0 0
    với ràng buộc mỗi hàng và mỗi cột của A có số ,số 1 là chẵn
    yêu cầu tìm ma trận B và C sao cho B+C=A và số số 1 ở mỗi hàng ( hay mỗi cột ) của B phải bằng số số 1 ở mỗi hàng (hay mỗi cột )của C tương ứng.
    với vd trên thì đáp án là

    B=
    0 0 1 0 0 1
    1 0 0 0 0 0
    1 0 0 1 0 0
    0 1 0 0 0 0
    0 0 0 1 0 0

    C=
    0 1 0 1 0 0
    0 0 0 1 0 0
    0 0 1 0 0 1
    1 0 0 0 0 0
    1 0 0 0 0 0
    Đã được chỉnh sửa lần cuối bởi G.Perelman : 17-05-2008 lúc 10:16 PM.

  2. #2
    Ngày gia nhập
    02 2008
    Nơi ở
    Việt Nam
    Bài viết
    577

    Bài này mình làm như sau:
    Ban đầu matrix B bằng matrix A, còn matrix C là matrix 0.
    Chỉ cần 2 vòng for
    - Nếu gặp phần tử B[i]=1 thì B[i]=0
    - Cùng vị trí i đó thì gán C[i]=1;
    - xuất ra màn hình 2 matrix B,C
    Như vậy số kết quả là số phần tử bằng 1 của matrix A.
    Không biết thuật giải vậy đúng không, mình sẽ code thử.

  3. #3
    Ngày gia nhập
    04 2008
    Nơi ở
    Bốn bề là nhà
    Bài viết
    703

    Mình nghe qua có vẻ như không ổn đâu bạn ạ.
    Bạn thử code lên cho mọi người test nha

  4. #4
    Ngày gia nhập
    08 2008
    Bài viết
    7

    C Code:
    1. for (i=0;i<=m;i++)
    2. {
    3.   ccount[i]=0;
    4.   for (j=0;j<=n;j++)
    5.     {
    6.       hcount[j]=0;  
    7.       if(a[i][j]==1)
    8.       {
    9.         hcount[j]=count[j]+1;
    10.         ccount[i]=count[i]+1;    
    11.       }
    12.     }
    13. }
    14. for (i=0;i<=m;i++)
    15. {
    16.   ccount1[i]=0;
    17.   for (j=0;j<=n;j++)
    18.     {
    19.        hcount1[j]=0;
    20.        if(a[i][j]==0)
    21.          {
    22.             b[i][j]=c[i][j]=0;
    23.           }
    24.        else
    25.          {
    26.             b[i][j]=1;ccount1[i]=count1[i]+1;hcount1[j]=hcount[j]+1;
    27.         if (ccount1[i] > ccount[i]/2)
    28.            {
    29.               b[i][j]=0;c[i][j]=1;
    30.             }
    31.         if (hcount1[j] > hcount[j])
    32.            {
    33.               b[i][j]=0;c[i][j]=1;
    34.             }
    35.         }
    36.       }


    Lưu ý: Bỏ code vào tag code.
    Đã được chỉnh sửa lần cuối bởi zkday2686 : 25-09-2008 lúc 03:34 PM.

  5. #5
    Ngày gia nhập
    04 2008
    Bài viết
    5

    bạn vui lòng chỉ thuật toán, chứ đoạn code đó khó hiểu quá.
    Các biến khai báo không biết ý nghĩa là gì cả. vd như: ccount, hcount, ccount1, hcount1.

  6. #6
    Ngày gia nhập
    02 2008
    Nơi ở
    Việt Nam
    Bài viết
    577

    Mặc định Chia đôi ma trận

    Chưa thấy ai có cái kiểu post bài hay như cuong nguyen, vứt toẹt một đoạn code không đầu không đuôi cũng chẳng phải là chương trình con lên, chẳng nói chẳng rằng, không hiểu bạn reply bài trên bài bạn hay post code lên cho vui nữa.

    Nếu mà bạn nào đó đủ trình độ đọc hiểu code của bạn thì chắc chẳng cần hỏi bài này.

    Bó tay!

    Tuy nhiên tôi vẫn nhận xét code của bạn:
    - Đoạn này:
    Code:
            hcount[j]=count[j]+1;
            ccount[i]=count[i]+1;
    - Phải là:
    Code:
            hcount[j]=hcount[j]+1;
            ccount[i]=ccount[i]+1;
    - Hay chỉ cần ngắn gọn:
    Code:
            hcount[j]++;
            ccount[i]++;
    *Còn đoàn sau quá là rười dà đọc hiểu mà muốn chết.

    Code:
    for (i=0;i<=m;i++)  //Phần này để đếm số các số 1 ở mỗi hàng và cột, kết quả được gán vào 2 mảng ccount và hcount
    {
      ccount[i]=0;
      for (j=0;j<=n;j++)
        {
          hcount[j]=0;  
          if(a[i][j]==1)
          {
            hcount[j]++;// Tăng giá trị tương ứng (tăng đếm) với mỗi hàng cột lên thi thấy a[i][j]=1;
            ccount[i]++;//    
          }
        }
    }
    
    for (i=0;i<=m;i++)    //vòng lặp này gán giá trị cho b,c
    {
      ccount1[i]=0;      //dùng ccount1 và hcount1 để đếm số giá trị một tương ứng với mỗi hàng và cột được gán vào B
      for (j=0;j<=n;j++)
        {
           hcount1[j]=0;
           if(a[i][j]==0)
             {
                b[i][j]=c[i][j]=0;
              }
           else
             {
                b[i][j]=1;ccount1[i]++;hcount1[j]++;
            if (ccount1[i] > ccount[i]/2)                 //khi gán vào b được một nửa rồi thì bắt đầu gán vào c, đây là theo cột
               {
                  b[i][j]=0;c[i][j]=1;
                }
            if (hcount1[j] > hcount[j])      // còn đây là theo hàng
               {
                  b[i][j]=0;c[i][j]=1;
                }
            }
          }
    Đã được chỉnh sửa lần cuối bởi QuangHoang : 25-10-2008 lúc 08:10 PM.

  7. #7
    Ngày gia nhập
    02 2008
    Nơi ở
    Việt Nam
    Bài viết
    577

    Đây bài mình làm nó không hoàn chỉnh chỉ là ý tưởng, code C++, để test được thì bạn viết nốt 2 cái kia.

    C++ Code:
    1. #include <iostream>
    2. using namespace std;
    3.  
    4. int main()
    5. {
    6.     int m,n;
    7.     bool flat=true;
    8.     int a[10][10],b[10][10],c[10][10];
    9.     cout<<"Nhap m = ";cin>>m;
    10.     cout<<"Nhap n = ";cin>>n;
    11.     cout<<"   ::NHAP A::"<<endl;
    12.     for (int i=0; i<m; ++i)
    13.         for (int j=0; j<n; ++j)
    14.         {
    15.             cout<<"a["<<i<<","<<j<<"] = ";cin>>a[i][j];
    16.         }
    17.        
    18.     //Chua phan dieu kien de nhap a dung
    19.    
    20.     for (int i=0; i<m; ++i)
    21.         for (int j=0; j<n; ++j)
    22.         {
    23.             if (a[i][j]==0) b[i][j]=c[i][j]=0;
    24.             else if (flat==true) {b[i][j]=1;!flat;}
    25.             else if (flat==false) {c[i][j]=1;!flat;}
    26.         }
    27.     //Chua viet phan xuat ra man hinh
    28. }

  8. #8
    Ngày gia nhập
    09 2008
    Bài viết
    5

    :-/
    Thuật toán này nghe chừng có vẻ không ổn lắm. Điều kiện dòng thì đc, cột thì ko.
    VD:
    A :
    1 0 0 0 0 1
    1 0 0 0 0 1
    1 0 0 0 0 1
    1 0 0 0 0 1

    Thì B:
    1 0 0 0 0 0
    1 0 0 0 0 0
    1 0 0 0 0 0
    1 0 0 0 0 0
    Cột ko thỏa mãn dk rồi.

    bài này chắc phải dùng đệ quy.

  9. #9
    Ngày gia nhập
    07 2009
    Bài viết
    0

    Mặc định cac ban giup minh bai tap matlab nay voi!

    Viết script file hoặc function file tính gần đúng nghiệm pt f(x) = 0 theo phương pháp chia đôi.
    Yêu cầu nhập vào:
    - hàm số f(x) dưới dạng chuỗi.
    - khỏang phân ly nghiệm: cận dưới a , cận trên b
    - sai số ep.
    Yêu cầu xuất ra:
    - nghiệm gần đúng x trong khỏang (a, b) với sai số ep.
    Bảng kết quả

    stt ...........F(x) ...................(a, b).............ep...............x
    1........X^3 + 4x^2 - 10 ........(1, 2)............0.001
    2........X^3 – 3x^2 – x +3.......(0 , 2)...........0.001

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

  1. [Hỏi] Cách nhân 2 ma trận với các phần tử của ma trận đợc để trong mảng 1 chiều.
    Gửi bởi code_c trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 4
    Bài viết cuối: 23-09-2012, 10:24 PM
  2. Xoay ma trận một góc 90 độ ngược chiều kim đồng hồ vối ma trận thường
    Gửi bởi prince7seas trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 5
    Bài viết cuối: 11-07-2012, 10:03 PM
  3. Algorithm Chia ma trận thành các ma trận con bằng nhau như thế nào
    Gửi bởi xinbat trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 1
    Bài viết cuối: 30-12-2011, 11:14 PM
  4. Code cộng, trừ, nhân, chia ma trận bằng C++. Chọn cộng ma trận thì bị out?
    Gửi bởi VanDK90 trong diễn đàn Thảo luận, góp ý code C/C++ của bạn
    Trả lời: 6
    Bài viết cuối: 18-10-2010, 05:53 PM
  5. Bài tập về ma trận | Cộng trừ nhân chia ma trận theo con trỏ?
    Gửi bởi nhocxinh trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 10
    Bài viết cuối: 12-05-2009, 01:59 AM

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