Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 14 kết quả

Đề tài: Lỗi vòng lặp for của code sắp xếp mảng 2 chiều theo hàng

  1. #1
    Ngày gia nhập
    07 2011
    Nơi ở
    nhà
    Bài viết
    37

    Red face Lỗi vòng lặp for của code sắp xếp mảng 2 chiều theo hàng

    xin hỏi code của em về sắp xếp mảng 2 chiều theo thứ tự tăng dần ở từng hàng sai ở đâu ạ
    code đây:

    C Code:
    1. #include <stdio.h>
    2. #include <conio.h>
    3.  
    4. main()
    5. {
    6.     int mang[50][50];
    7.     int sohang,socot,i,j,tg,a;
    8.     printf("\n nhap vao so hang: ");
    9.     scanf("%d",&sohang);
    10.     printf("\n nhap vao so cot: ");
    11.     scanf("%d",&socot);
    12.     printf("\n nhap du lieu cho mang: \n");
    13.     for(i=0;i<sohang;i++)
    14.         {
    15.         for(j=0;j<socot;j++)
    16.          {
    17.                    printf(" mang[%d][%d]= ",i,j);
    18.                    scanf("%d",&mang[i][j]);
    19.                 }
    20.             }
    21.             printf("\n in mang \n");
    22.             for(i=0;i<sohang;i++)
    23.         {
    24.         for(j=0;j<socot;j++)
    25.        
    26.             printf("%4d",mang[i][j]);
    27.             printf("\n");
    28.        
    29.     }
    30.      for(a=0;a<socot;a++)
    31.         {
    32.     for(i=0;i<sohang-1;i++)
    33.         {
    34.         for(j=i+1;j<sohang;j++)
    35.         {
    36.          
    37.             if(mang[a][j]>mang[a+1][i])
    38.             tg=mang[a][j];
    39.             mang[a][j]=mang[a+1][i];
    40.             mang[a+1][i]=tg;
    41.         }
    42.     }}
    43.     printf("\n mang da sap xep la : \n");
    44.     for(i=0;i<sohang;i++)
    45.         {
    46.         for(j=0;j<socot;j++)
    47.          {
    48.                 printf("%4d",mang[i][j]);
    49.                
    50.             }
    51.         }
    52.          getch();
    53. }


    mới học nên code hơi rắc rối, mong các pro thông cảm
    Đã được chỉnh sửa lần cuối bởi kid_191 : 24-08-2011 lúc 09:29 PM.
    Thông minh là một món quà lớn
    Sau khi nhận quà vấn đề tiếp theo là chúng ta phải sử dụng chúng như thế nào !

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

    dòng scanf("%d",&mang[i][j]); lỗi rồi bạn, nhập mảng 2 chiều không nhập vậy được đâu. Cách đơn giản nhất là bạn dùng thêm bién tạm rồi ghi giá trị nhận từ bàn phím rồi gán nó cho phần tử của mảng: mang[i][j] = tam;

  3. #3
    Ngày gia nhập
    07 2011
    Nơi ở
    nhà
    Bài viết
    37

    Trích dẫn Nguyên bản được gửi bởi maitan_10000 Xem bài viết
    dòng scanf("%d",&mang[i][j]); lỗi rồi bạn, nhập mảng 2 chiều không nhập vậy được đâu. Cách đơn giản nhất là bạn dùng thêm bién tạm rồi ghi giá trị nhận từ bàn phím rồi gán nó cho phần tử của mảng: mang[i][j] = tam;
    mình vẫn nhập được mà bạn ^^, chủ yếu chỗ sắp xếp á. cảm ơn bạn đã góp ý nha
    Thông minh là một món quà lớn
    Sau khi nhận quà vấn đề tiếp theo là chúng ta phải sử dụng chúng như thế nào !

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

    Sắp xếp từng hàng thì trong mỗi hàng bạn phải lặp theo cột chứ, mình thấy toàn "sohang" kìa Lệnh if thiếu curly bracket nữa

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

    Bạn tách ra 1 hàm sắp xếp riêng cho dễ nhìn:

    C Code:
    1. void sap_xep_hang(int *a, int so_cot)
    2. {
    3.     int i, j, t;
    4.     for (i = 0; i < so_cot; ++i) {
    5.         for (j = i + 1; j < so_cot; ++j) {
    6.             if (a[i] > a[j]) {t = a[i]; a[i] = a[j]; a[j] = t;}
    7.         }
    8.     }
    9. }

    Rồi gọi vòng for xếp từng hàng một:
    C Code:
    1. for (i = 0; i < sohang; ++i) sap_xep_hang(mang[i], socot);

  6. #6
    Ngày gia nhập
    01 2010
    Nơi ở
    Hà Nội
    Bài viết
    128

    Mặc định Lỗi vòng lặp for của code sắp xếp mảng 2 chiều theo hàng

    Code:
    for(a=0;a<sohang;a++)// tham chiếu từng hàng 1 nên sử dụng biến khác tránh hiểu lầm với biến mảng
    // Bắt đầu sắp xếp từng hàng      
      {
        for(i=0;i<sohang-1;i++)// cái này phải là số cột         
            {
            for(j=i+1;j<sohang;j++)// số cột        
            {
              
                if(mang[a][j]>mang[a+1][i])// số hàng là a giữ nguyên và so sánh mang[a][j] và mang[a][i]
                {
                tg=mang[a][j];
                mang[a][j]=mang[a+1][i];
                mang[a+1][i]=tg;
            }
        }}
    Đây là sửa theo thuật toán của bạn

  7. #7
    Ngày gia nhập
    07 2011
    Nơi ở
    nhà
    Bài viết
    37

    Trích dẫn Nguyên bản được gửi bởi kids301090 Xem bài viết
    Code:
    for(a=0;a<sohang;a++)// tham chiếu từng hàng 1 nên sử dụng biến khác tránh hiểu lầm với biến mảng
    // Bắt đầu sắp xếp từng hàng      
      {
        for(i=0;i<sohang-1;i++)// cái này phải là số cột         
            {
            for(j=i+1;j<sohang;j++)// số cột        
            {
              
                if(mang[a][j]>mang[a+1][i])// số hàng là a giữ nguyên và so sánh mang[a][j] và mang[a][i]
                {
                tg=mang[a][j];
                mang[a][j]=mang[a+1][i];
                mang[a+1][i]=tg;
            }
        }}
    Đây là sửa theo thuật toán của bạn
    mình thử y bạn sửa nhưng vẫn ra sai, hic
    Thông minh là một món quà lớn
    Sau khi nhận quà vấn đề tiếp theo là chúng ta phải sử dụng chúng như thế nào !

  8. #8
    Ngày gia nhập
    07 2011
    Nơi ở
    nhà
    Bài viết
    37

    Trích dẫn Nguyên bản được gửi bởi fbchicken Xem bài viết
    Bạn tách ra 1 hàm sắp xếp riêng cho dễ nhìn:

    C Code:
    1. void sap_xep_hang(int *a, int so_cot)
    2. {
    3.     int i, j, t;
    4.     for (i = 0; i < so_cot; ++i) {
    5.         for (j = i + 1; j < so_cot; ++j) {
    6.             if (a[i] > a[j]) {t = a[i]; a[i] = a[j]; a[j] = t;}
    7.         }
    8.     }
    9. }

    Rồi gọi vòng for xếp từng hàng một:
    C Code:
    1. for (i = 0; i < sohang; ++i) sap_xep_hang(mang[i], socot);
    hì cảm ơn bạn, nhưng mình chưa học hàm nên mới viết chay kỉu này áh ^^
    Thông minh là một món quà lớn
    Sau khi nhận quà vấn đề tiếp theo là chúng ta phải sử dụng chúng như thế nào !

  9. #9
    Ngày gia nhập
    04 2011
    Bài viết
    13

    Trích dẫn Nguyên bản được gửi bởi kid_191 Xem bài viết
    mình thử y bạn sửa nhưng vẫn ra sai, hic
    Bạn ấy đã sửa đâu, vẫn y nguyên như cũ mà, chỉ có chỉ dẫn sửa đổi thôi Bạn sửa thế nào?

  10. #10
    Ngày gia nhập
    10 2010
    Nơi ở
    Đại học Bách Khoa Hà Nội
    Bài viết
    45

    Phải nói là bài của bạn rất nhiều lỗi, và rất khó đọc , tốt nhất nên viết lại từ đầu và học thêm code style đi nhé

    Đoạn code để in mảng thành hàng thành cột:
    C Code:
    1. for(i=0;i<sohang;i++)
    2.     {
    3.         for(j=0;j<socot;j++) printf("%4d",mang[i][j]);
    4.         printf("\n");
    5.     }

    Đoạn code sắp xếp mảng sửa lại thế này nè (sắp xếp nổi bọt ):
    C Code:
    1. for(a=0;a<sohang;a++)
    2.         {
    3.         for(i=socot-1;i>=0;i--)
    4.             for(j=0;j<i;j++)
    5.                 if(mang[a][j]>mang[a][j+1])
    6.                 {        
    7.                     tg=mang[a][j];
    8.                     mang[a][j]=mang[a][j+1];
    9.                     mang[a][j+1]=tg;
    10.                 }
    11.         }


    Toàn bộ bài:

    C Code:
    1. #include <stdio.h>
    2. #include <conio.h>
    3.  
    4. int main()
    5. {
    6.     int mang[50][50];
    7.     int sohang,socot,i,j,tg,a;
    8.     printf("\n nhap vao so hang: ");
    9.     scanf("%d",&sohang);
    10.     printf("\n nhap vao so cot: ");
    11.     scanf("%d",&socot);
    12.     printf("\n nhap du lieu cho mang: \n");
    13.    
    14. /////////////////////////////////////////////////
    15.     for(i=0;i<sohang;i++)
    16.         {
    17.         for(j=0;j<socot;j++)
    18.             {
    19.                 printf(" mang[%d][%d]= ",i,j);
    20.                 scanf("%d",&mang[i][j]);
    21.             }
    22.         }
    23. /////////////////////////////////////////////////
    24.     printf("\n in mang \n");
    25.     for(i=0;i<sohang;i++)
    26.     {
    27.         for(j=0;j<socot;j++) printf("%4d",mang[i][j]);
    28.         printf("\n");
    29.     }
    30.    
    31. //////////////////////////////////////////////////
    32.      for(a=0;a<sohang;a++)
    33.         {
    34.         for(i=socot-1;i>=0;i--)
    35.             for(j=0;j<i;j++)
    36.                 if(mang[a][j]>mang[a][j+1])
    37.                 {        
    38.                     tg=mang[a][j];
    39.                     mang[a][j]=mang[a][j+1];
    40.                     mang[a][j+1]=tg;
    41.                 }
    42.         }
    43. /////////////////////////////////////////////////  
    44.     printf("\n mang da sap xep la : \n");
    45.     printf("\n in mang \n");
    46.     for(i=0;i<sohang;i++)
    47.     {
    48.         for(j=0;j<socot;j++) printf("%4d",mang[i][j]);
    49.         printf("\n");
    50.     }
    51.     getch();
    52.     return 0;
    53. }
    Chẳng biết mình muốn cái gì nữa :v

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

  1. Trả lời: 4
    Bài viết cuối: 10-09-2012, 06:34 PM
  2. Cấu trúc dữ liệu lỗi code sắp xếp phân đoạn cho dãy sinh viên theo chiều giảm dần của điểm tổng kết
    Gửi bởi snoit trong diễn đàn Thắc mắc CTDL & Giải thuật
    Trả lời: 1
    Bài viết cuối: 21-11-2011, 11:28 AM
  3. Cách chia 1 mảng 1 chiều thành n mảng nhỏ theo vòng lặp for
    Gửi bởi nkhanh90 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 11
    Bài viết cuối: 07-11-2011, 03:38 PM
  4. Code sắp xếp mảng 1 chiều theo phương pháp chèn? tại sao lỗi?
    Gửi bởi clementboy03 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 9
    Bài viết cuối: 11-04-2009, 08:39 PM
  5. Hỏi code mô tả việc duyệt cây theo chiều rộng và theo chiều sâu
    Gửi bởi vitco trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 2
    Bài viết cuối: 27-03-2008, 02:47 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