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

Đề tài: Bài tập C | sắp xếp mảng 2 chiều theo chiều tăng dần

  1. #1
    Ngày gia nhập
    04 2009
    Bài viết
    10

    Mặc định Bài tập C | sắp xếp mảng 2 chiều theo chiều tăng dần

    giúp mình với,xem hộ mình xem sai ở đâu
    PHP Code:
    #include"conio.h"
    #include"stdio.h"
    void nhapmang(int a[10][10],int &soptu);
    void hienmang(int a[10][10],int soptu);
    void chuyen1chieu(int a[10][10],int b[],int soptu);
    void chuyen2chieu(int a[10][10],int b[],int soptu);
    void sapxep(int a[],int soptu);
    void doicho(int &a,int &b);
    void main()
    {
        
    int a[10][10], soptu=0,b[100];
        
    clrscr();
        
    printf("Nhap mang so nguyen:\n");
        
    nhapmang(a,soptu);
        
    printf("Mang vua nhap la:\n");
        
    hienmang(a,soptu);
        
    printf("mang 1 chieu:\n");chuyen1chieu(a,b,soptu);
        
    hienmang(a,soptu);
          
    /* sapxep(a,soptu);
        chuyen2chieu(a,b,soptu);
        printf("\nMang vua sap xep la:\n");
        hienmang(a,soptu);*/
        
    getch();
    }
    void sapxep(int a[],int soptu)
    {
           
    int i,j;
           for(
    i=0;i<soptu-1;i++)
          for(
    j=i+1;j<soptu;j++)
             if(
    a[i]>a[j])
            
    doicho(a[i],a[j]);
    }
    void chuyen1chieu(int a[10][10],int b[],int soptu)
    {
        
    int i,j,k=0;
        for(
    i=0;i<soptu;i++)
          for(
    j=0;j<soptu;j++)
            { 
    b[k]=a[i][j];
              
    k++;
            }
    }
    void chuyen2chieu(int a[10][10],int b[],int soptu)
    {
        
    int i,j,k=0;
        for(
    i=0;i<soptu;i++)
          for(
    j=0;j<soptu;j++)
             { 
    a[i][j]=b[k];
               
    k++;
             }
    }
    void nhapmang (int a[10][10],int &soptu)
    {
           
    int i,j;
           
    printf("nhap soptu");scanf("%d",&soptu);
           for(
    i=0;i<soptu;i++)
         for(
    j=0;j<soptu;j++)
           {
    printf("a[%d][%d]=",i,j);
            
    scanf("%d",&a[i][j]);
           }
    }
    void hienmang(int a[10][10],int soptu)
    {
        
    int i=0,j;
        for(
    i=0;i<soptu;i++)
        {
            for(
    j=0;j<soptu;j++)
                
    printf("%3d",a[i][j]);
            
    printf("\n");
        }
    }
    void doicho(int &a,int &b)
    {
        
    int tg;
        
    tg=a;
        
    a=b;
        
    b=tg;
     } 
    Đã được chỉnh sửa lần cuối bởi langman : 11-04-2009 lúc 08:04 AM.

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

    Bạn không nói rõ lỗi ở chỗ nào, mình chỉ có thể giúp thế này thôi:
    PHP Code:
    #include"conio.h"
    #include"stdio.h"
    int k=0;
    void nhapmang(int a[10][10],int &soptu);
    void hienmang(int a[10][10],int soptu);
    void    hienmang1chieu(int [],int );
    void chuyen1chieu(int a[10][10],int b[],int soptu);
    void chuyen2chieu(int a[10][10],int b[],int soptu);
    void sapxep(int a[],int soptu);
    void doicho(int &a,int &b);
    int main()
    {
    int a[10][10], soptu=0,b[100];
    printf("Nhap mang so nguyen:\n");
    nhapmang(a,soptu);
    printf("Mang vua nhap la:\n");
    hienmang(a,soptu);
    printf("mang 1 chieu:\n");chuyen1chieu(a,b,soptu);
    hienmang1chieu(b,k);
    //hienmang(a,soptu);
    /* sapxep(a,soptu);
    chuyen2chieu(a,b,soptu);
    printf("\nMang vua sap xep la:\n");
    hienmang(a,soptu);*/
    getch();
    }
    void sapxep(int a[],int soptu)
    {
    int i,j;
    for(
    i=0;i<soptu-1;i++)
    for(
    j=i+1;j<soptu;j++)
    if(
    a[i]>a[j])
    doicho(a[i],a[j]);
    }
    void chuyen1chieu(int a[10][10],int b[],int soptu)
    {
    int i,j;
    for(
    i=0;i<soptu;i++)
    for(
    j=0;j<soptu;j++)
    b[k]=a[i][j];
    k++;
    }
    }
    void chuyen2chieu(int a[10][10],int b[],int soptu)
    {
    int i,j,k=0;
    for(
    i=0;i<soptu;i++)
    for(
    j=0;j<soptu;j++)
    a[i][j]=b[k];
    k++;
    }
    }
    void nhapmang (int a[10][10],int &soptu)
    {
    int i,j;
    printf("nhap soptu");scanf("%d",&soptu);
    for(
    i=0;i<soptu;i++)
    for(
    j=0;j<soptu;j++)
    {
    printf("a[%d][%d]=",i,j);
    scanf("%d",&a[i][j]);
    }
    }
    void hienmang(int a[10][10],int soptu)
    {
    int i=0,j;
    for(
    i=0;i<soptu;i++)
    {
    for(
    j=0;j<soptu;j++)
    printf("%3d",a[i][j]);
    printf("\n");
    }
    }
    void    hienmang1chieu(int b[], int k)
    {
        for(
    int i=0;i<k;i++)
            
    printf("%d ",b[i]);

    }
    void doicho(int &a,int &b)
    {
    int tg;
    tg=a;
    a=b;
    b=tg;

    Tôi tin rằng: giải thuật thì có thể tìm trong hàng trăm GB ebook, hoặc Google nhưng code chạy thì chưa chắc! Hãy post code để chứng tỏ giải thuật của bạn là đúng!
    Giải thuật là bản thiết kế của ngôi nhà, code là phần xây dựng. Nếu chỉ xây nhà trên giấy thì ta sống chả khác nào người nguyên thủy.

  3. #3
    Ngày gia nhập
    11 2008
    Nơi ở
    Hà Nội
    Bài viết
    70

    C Code:
    1. #include<stdio.h>
    2. #include<conio.h>
    3.  
    4. void nhapmatran(int a[100][100],int n,int m)
    5. {
    6.     int i,j;
    7.     for(i=0;i<n;i++)
    8.         for (j=0;j<m;j++)
    9.         {
    10.             printf("\n phan tu o hang %d cot %d la:",i,j);
    11.             scanf("%d",&a[i][j]);
    12.         }
    13. }
    14. void sapxeptang(int A[100][100], int d, int c)
    15. {
    16.     for (int i=0; i<=d*c-1;i++)
    17.         for (int j=0; j<=d*c-1;j++)
    18.             if (A[i/c][i%c] < A[j/c][j%c])
    19.             {
    20.                 int tmp = A[i/c][i%c] ;
    21.                 A[i/c][i%c] = A[j/c][j%c] ;
    22.                 A[j/c][j%c] = tmp ;
    23.             }
    24. }
    25. void inmatran(int a[100][100],int n,int m)
    26. {
    27.     int i,j;
    28.     for (i=0;i<n;i++){
    29.       for (j=0;j<m;j++)
    30.           printf("%5d",a[i][j]);
    31.       printf("\n");
    32.          }
    33. }
    34. void main(){
    35.     //clrscr();
    36.     int a[100][100],n,m;
    37.     printf("\n nhap n,m=");
    38.         scanf("%d%d",&n,&m);
    39.     nhapmatran(a,n,m);
    40.     printf("\n ma tran a vua nhap la:\n");
    41.         inmatran(a,n,m);
    42.     printf("\n ma tran sap khi sap xep:\n");
    43.     sapxeptang(a,n,m);
    44.     inmatran(a,n,m);
    45.     getch();
    46. }
    Dân thường sống đẹp đè bẹp dân chơi.
    Hi [you]

  4. #4
    Ngày gia nhập
    01 2009
    Bài viết
    165

    Trích dẫn Nguyên bản được gửi bởi 1990 Xem bài viết
    giúp mình với,xem hộ mình xem sai ở đâu
    PHP Code:
    #include"conio.h"
    #include"stdio.h"
    void nhapmang(int a[10][10],int &soptu);
    void hienmang(int a[10][10],int soptu);
    void chuyen1chieu(int a[10][10],int b[],int soptu);
    void chuyen2chieu(int a[10][10],int b[],int soptu);
    void sapxep(int a[],int soptu);
    void doicho(int &a,int &b);
    void main()
    {
        
    int a[10][10], soptu=0,b[100];
        
    clrscr();
        
    printf("Nhap mang so nguyen:\n");
        
    nhapmang(a,soptu);
        
    printf("Mang vua nhap la:\n");
        
    hienmang(a,soptu);
        
    printf("mang 1 chieu:\n");chuyen1chieu(a,b,soptu);
        
    hienmang(a,soptu);
          
    /* sapxep(a,soptu);
        chuyen2chieu(a,b,soptu);
        printf("\nMang vua sap xep la:\n");
        hienmang(a,soptu);*/
        
    getch();
    }
    void sapxep(int a[],int soptu)
    {
           
    int i,j;
           for(
    i=0;i<soptu-1;i++)
          for(
    j=i+1;j<soptu;j++)
             if(
    a[i]>a[j])
            
    doicho(a[i],a[j]);
    }
    void chuyen1chieu(int a[10][10],int b[],int soptu)
    {
        
    int i,j,k=0;
        for(
    i=0;i<soptu;i++)
          for(
    j=0;j<soptu;j++)
            { 
    b[k]=a[i][j];
              
    k++;
            }
    }
    void chuyen2chieu(int a[10][10],int b[],int soptu)
    {
        
    int i,j,k=0;
        for(
    i=0;i<soptu;i++)
          for(
    j=0;j<soptu;j++)
             { 
    a[i][j]=b[k];
               
    k++;
             }
    }
    void nhapmang (int a[10][10],int &soptu)
    {
           
    int i,j;
           
    printf("nhap soptu");scanf("%d",&soptu);
           for(
    i=0;i<soptu;i++)
         for(
    j=0;j<soptu;j++)
           {
    printf("a[%d][%d]=",i,j);
            
    scanf("%d",&a[i][j]);
           }
    }
    void hienmang(int a[10][10],int soptu)
    {
        
    int i=0,j;
        for(
    i=0;i<soptu;i++)
        {
            for(
    j=0;j<soptu;j++)
                
    printf("%3d",a[i][j]);
            
    printf("\n");
        }
    }
    void doicho(int &a,int &b)
    {
        
    int tg;
        
    tg=a;
        
    a=b;
        
    b=tg;
     } 
    bạn ko sai về cú pháp nhưng vì hàm hiện mảng của bạn chỉ dùng để xuất mảng 2 chiều nên cho dù sau khi bạn đổ mảng 1 chiều thì khi xuất ra vẫn chỉ là mảng 2 chiều ban đầu ,bạn có thể sửa bằng cách viết thêm 1 hàm dùng để xuất mảng 1 chiều.

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

    Mặc định trả lời ban đây.

    - Thứ I : mục đích chuyển mảng 2c thành 1c để làm gì? Để sắp xếp, nhưng khi sắp xếp bạn lại truyền mảng a (mảng 2c) cho hàm sắp xếp
    _ Thứ II: trong chương trình chính bạn phải gọi các hàm theo thứ tự: nhập mảng, chuyển sang mảng 1c, gọi hàm sx để sắp xếp trên mảng 1 chiều, gọi hàm chuyển tử mảng 1c sang mảng 2c, sau đó gọi hàm để in mảng 2c
    _ Cần nhắc lại: Mỗi một hàng của mảng 2c được máy hiểu là một phần tử của mảng 2c
    ví dụ: bạn có mảng các số nguyên B có 5 hàng, 3 cột vậy máy sẽ hiểu mảng B có 5 phần tử mà mỗi phần tử của mảng này chứa 3 số nguyên
    _ Bạn muốn hiện mảng 1c thì phải viết thêm hàm inmang1c và truyền cho nó mảng b
    _ ở bài trên bạn dùng hàm in mảng 2 chiều để in mảng 1c là sai.
    _ bạn sai ở hàm sắp xếp, vì bạn sắp xếp ở mảng b, mảng b có số phần tử là: soptu*soptu, nên bạn phải cho i chạy từ 0 đến soptu*soptu-1, còn j chạy từ soptu*soptu thì mới sắp xếp cả mảng được.
    _ mới đầu mình học c cũng có những cái sai ngớ ngẫn như bạn vậy, nhưng làm quen rồi thì có kinh nhé.
    BÀI CỦA BẠN MÌNH ĐÃ SỬA DÙM RỒI XEM CÓ OK KHÔNG.

    Code:
    #include"conio.h"
    #include"stdio.h"
    void in1c(int b[],int soptu);
    void nhapmang(int a[10][10],int &soptu);
    void hienmang(int a[10][10],int soptu);
    void chuyen1chieu(int a[10][10],int b[],int soptu);
    void chuyen2chieu(int a[10][10],int b[],int soptu);
    void sapxep(int b[],int soptu);
    void doicho(int &a,int &b);
    void main()
    {
        int a[10][10], soptu=0,b[100];
    //    clrscr();
        printf("Nhap mang so nguyen:\n");
        nhapmang(a,soptu);
        
    	printf("Mang vua nhap la:\n");
        hienmang(a,soptu);
        
    	chuyen1chieu(a,b,soptu);
        
    	printf(" hien mang 1 chieu");
        sapxep(b,soptu);
       in1c(b,soptu);
    	
    	chuyen2chieu(a,b,soptu);
        printf("\nMang vua sap xep la:\n");
        hienmang(a,soptu);
        getch();
    }
    
    void in1c(int b[],int soptu)
    {
        
        for(int i=0;i<soptu*soptu;i++)
      
            printf("%3d",b[i]);
    }
    
    void sapxep(int b[],int soptu)
    {
           int i, tam,j;
           for(i=0;i<soptu*soptu-1;i++)
              for(j=i+1;j<soptu*soptu;j++)
                 if(b[i]>b[j])
                    
    			 doicho(b[i],b[j]);
    			 }
    
    void chuyen1chieu(int a[10][10],int b[],int soptu)
    {
        int i,j,k=0;
        for(i=0;i<soptu;i++)
          for(j=0;j<soptu;j++)
            { b[k]=a[i][j];
              k++;
            }
    }
    
    void chuyen2chieu(int a[10][10],int b[],int soptu)
    {
        int i,j,k=0;
    	 for(i=0;i<soptu;i++)
          for(j=0;j<soptu;j++)
             { a[i][j]=b[k];
               k++;
             }
    }
    void nhapmang (int a[10][10],int &soptu)
    {
           int i,j;
           printf("nhap soptu");scanf("%d",&soptu);
           for(i=0;i<soptu;i++)
         for(j=0;j<soptu;j++)
           {printf("a[%d][%d]=",i,j);
            scanf("%d",&a[i][j]);
           }
    }
    
    void hienmang(int a[10][10],int soptu)
    {
        int i=0,j;
        for(i=0;i<soptu;i++)
        {
            for(j=0;j<soptu;j++)
                printf("%3d",a[i][j]);
            printf("\n");
        }
    }
    void doicho(int &x,int &y)
    {
        int tg;
        tg=x;
        x=y;
        y=tg;
     }
    _ nếu bạn dùng con trỏ thì hay lắm đấy
    MÌNH NÓI CÓ GÌ NHỜ BẠN PHẢN BIỆN DÙM ĐỂ CÙNG TIẾN BỘ NHÉ! CHÀO HE HE..


    #include <stdio.h>
    #include<conio.h>
    #include<math.h>


    void nhap(int *a, int &m, int &n)
    {
    for (int k=0;k<m*n;k++)
    {
    do
    {
    printf(" \nNhap phan tu %d: ",k);
    scanf("%d",(a+k));
    }
    while(*(a+k)<0);
    }
    }
    void xuat(int *a,int m, int n)
    { int i,dem=0;
    for(i=0;i<m*n;i++)
    {
    printf("%3d,",*(a+i));
    dem++; //
    if(dem==n)//in ra du so cot thi dua tro xuong dong de in dong ke tiep
    {
    printf("\n");
    dem=0;
    }
    }
    }
    void hoanvi(int &x,int &y)
    { int tam;
    if(x>y)
    tam=x;
    x=y;
    y=tam;
    }
    void SXMT(int *a,int m, int n)
    { int i,j;
    for(i=0;i<(m*n)-1;i++)
    for (j=i+1;j<m*n;j++)//m*n la tong so phan tu cua ma tran
    {
    if(*(a+i)>*(a+j))
    hoanvi(*(a+i),*(a+j));
    }
    }
    void main()
    { int m,n,a[10][10],*p;
    printf(" \nNhap so hang:= ");
    scanf("%d",&m);
    printf(" \nNhap so cot:= ");
    scanf("%d",&n);
    p=(int *)a;
    nhap(p,m,n);
    printf("CAC PHAN TU MANG KHI SAP XEP LA:\n");
    SXMT(p,m,n);
    xuat(p,m,n);

    getch();
    }
    Đã được chỉnh sửa lần cuối bởi bethaophuong2004 : 14-04-2009 lúc 11:56 AM.

  6. #6
    Ngày gia nhập
    03 2009
    Bài viết
    6

    Mặc định Bài tập C | sắp xếp mảng 2 chiều theo chiều tăng dần

    ban chay thu code cua minh roi gi?neu the ban co the noi khi chay thi code no lam sao roi minh viet lai code cho ban

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

  1. Bài tập C++ Sắp xếp mảng theo chiều tăng dần
    Gửi bởi buingocmai trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 3
    Bài viết cuối: 09-08-2013, 11:21 PM
  2. Lỗi: bố cục trang web tự tăng theo chiều ngang khi chiều cao thay đổi
    Gửi bởi tuanngocpt trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 2
    Bài viết cuối: 16-03-2013, 11:25 PM
  3. Trả lời: 4
    Bài viết cuối: 10-09-2012, 06:34 PM
  4. [con trỏ] sắp xếp dãy số nguyên theo chiều tăng dần
    Gửi bởi chickenkon trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 3
    Bài viết cuối: 07-12-2010, 12:33 PM
  5. [C] Sắp xếp dãy số theo chiều tăng
    Gửi bởi tanthang 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: 02-01-2007, 01:45 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