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ố 19 kết quả

Đề tài: Lập trình C | Sắp xếp 2 mảng thành 1 và 1 câu hỏi linh tinh

  1. #1
    Ngày gia nhập
    10 2006
    Nơi ở
    In Your Bugs
    Bài viết
    823

    Mặc định Lập trình C | Sắp xếp 2 mảng thành 1 và 1 câu hỏi linh tinh

    Bài toán là có 2 mảng 1 chiều một mảng tăng dần và một mảng giảm dần , bi giờ lưu hết vào mảng thứ ba tăng dần nhưng không được sắp xếp trên mảng này .

    Một câu hỏi nữa về các đối số của hàm :
    kid ví dụ như có 2 hàm hoán vị thế này :

    Ví dụ 1:

    void hoanvi(int &a,int &b)
    {
    int temp;
    temp=a;
    a=b;
    b=temp;
    {

    Ví dụ 2:

    void hoanvi(int *a,int *b)
    {
    int temp;
    temp=*a;
    *a=*b;
    *b=temp;
    }

    ở 2 thì ta phải dùng *a
    temp=*a
    ....

    mà ở 1 ta chỉ dùng
    temp=a
    ....

    kid nghĩ rằng *a ,&a đều là để trỏ đến địa chỉ của tham biến đưa vào
    ví dụ ở main ta gọi hàm là :
    1:
    hoanvi(x,y);
    2:
    hoanvi(&x,&y);

    thì ở đây cả a và *a đều trỏ đến địa chỉ của a mà vậy tại sao trong thân hàm hoán vị ta không dùng
    temp=&a
    &a=&b
    &b=temp

    Khó nghĩ quá

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

    tại sao trong thân hàm hoán vị ta không dùng
    temp=&a
    &a=&b
    &b=temp
    Bởi vì đây là tham chiếu, thực chất chỉ là cái tên mới của biến chúng ta đang xử lý mà thôi, khác với con trỏ.

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

    Bài toán là có 2 mảng 1 chiều một mảng tăng dần và một mảng giảm dần , bi giờ lưu hết vào mảng thứ ba tăng dần nhưng không được sắp xếp trên mảng này .
    Bài này chỉ cần cho 1 vòng for đi từ 0 đến m+n, ý tưởng là cho mảng a chạy từ 0 đến n, mảng b chạy từ m-1 về 0, so sánh và chọn giá trị tương ứng để cho vào mảng c. Đây là code chương trình, có gì khó hiểu thì hỏi thêm nhé:
    Code:
    void insert(int a[],int b[],int c[],int m,int n){
         int i = 0,j = n-1;
         for (int k = 0;k < m+n;++k)
             if ((a[i] < b[j])&&(i < m)&&(j >= 0)) 
                c[k] = a[i++];
             else 
                 if ((a[i] >= b[j])&&(i < m)&&(j >= 0)) 
                    c[k] = b[j--];
                 else
                     if (i >= m)
                        c[k] = b[j--];
                     else c[k] = a[i++];
                         
    }
    Đã được chỉnh sửa lần cuối bởi huynguyen : 25-01-2007 lúc 09:07 AM.

  4. #4
    No Avatar
    Nhuan_Trang_Only_Love Khách

    Chào bạn huynguyen!
    Thực sự khi đọc thấy dòng tên của bạn tui rất vui
    Và hôm trước có hơi vội vàng nên tui cũng cảm thấy áy náy quá hà
    sorry bạn nhiều.
    __________________________________________________ _______________
    Điều quan trọng nhất là sự chao đổi đưa chúng ta tiếp cận và tiếp thu nhanh
    được kiến thức?
    __________________________________________________ _______________
    Đây là code của bạn>>>>>
    void insert(int a[],int b[],int c[],int m,int n){
    int i = 0,j = n-1;
    for (int k = 0;k < m+n;++k)
    if ((a[i] < b[j])&&(i < m)&&(j < n)) //chỗ này bao giờ j chẳng <n phải là j>0 chứ
    c[k] = a[i++];
    else
    if ((a[i] >= b[j])&&(i < m)&&(j < n)) //chỗ này cũng dzậy nè
    c[k] = b[j--];
    else
    if (i >= m)
    c[k] = b[j--];
    else c[k] = a[i++];

    }
    _______________________________
    Ngoài ra chúng ta có thể so sánh hai giới hạn của mảng A và B để sắp xếp cũng được.Đây là code của tôi ,xin được góp ý

    void insert_C(int A[],int B[],int C[],int gha,int ghb)
    {
    int ia=0,jb=ghb-1,c;
    for(c=0;c<gha+ghb;c++)
    {
    if(ia<gha&&jb>=0)
    {
    if(A[ia]<B[jb]) C[c]=A[ia++];
    else C[c]=B[jb--];
    }
    else if(ia>=gha) C[c]=B[jb--]
    else C[c]=A[ia++];
    }
    }

  5. #5
    Ngày gia nhập
    11 2006
    Bài viết
    633

    À đúng rồi, viết vội quá nên nhầm, thx nhiều nhé.
    Nhìn sơ qua thì thấy code bạn có vẻ lạ lạ nhưng thực tế thì nó cải tiến 1 chút so với code mà mình đã đưa ra, câu lệnh if của mình có 4 cấp còn câu lệnh if của bạn có 2 cấp, trong mỗi cấp thì lại có 2 cấp nhỏ hơn, vị chi cũng là 4 cấp, nhìn có vẻ thoáng hơn 1 chút nhưng nguyên lý thì cả 2 đều giống nhau, minh họa rõ ràng hơn thì bạn có thể xem dưới đây:
    Code:
    void insert(int a[],int b[],int c[],int m,int n){
         int i = 0,j = n-1;
         for (int k = 0;k < m+n;++k)
             if ((i < m)&&(j >= 0))
                if ((a[i] < b[j]) c[k] = a[i++];
                else c[k] = b[j--];
             else
                 if (i >= m) c[k] = b[j--];
                 else c[k] = a[i++];                  
    }
    So sánh với code ban đầu:
    Code:
    void insert(int a[],int b[],int c[],int m,int n){
         int i = 0,j = n-1;
         for (int k = 0;k < m+n;++k)
             if ((a[i] < b[j])&&(i < m)&&(j >= 0)) 
                c[k] = a[i++];
             else 
                 if ((a[i] >= b[j])&&(i < m)&&(j >= 0)) 
                    c[k] = b[j--];
                 else
                     if (i >= m)
                        c[k] = b[j--];
                     else c[k] = a[i++];
                         
    }

  6. #6
    Ngày gia nhập
    10 2006
    Nơi ở
    In Your Bugs
    Bài viết
    823

    Mặc định Lập trình C | Sắp xếp 2 mảng thành 1 và 1 câu hỏi linh tinh

    uh kid cũng nghĩ là phải so sánh từng phần tử như vậy nhưng thấy 1 số thắc mắc , tại đây thì chưa giải thích được để về nghiên cứu xem sao , cảm ơn mấy pa trước đã , còn code nào hay thì tiếp ha

  7. #7
    No Avatar
    Nhuan_Trang_Only_Love Khách

    Ồ có gì đâu chứ,quan trọng nhất là chúng ta đưa ra được thuật giải đúng nhất thui mà.
    Hôm nay không làm hợp đồng kết nối Internet nên hơi buồn à
    Giá mà làm song sớm thì tui có nhiều thời gian Online rùi , hơi tiếc
    Mong chia sẻ

  8. #8
    Ngày gia nhập
    10 2006
    Nơi ở
    In Your Bugs
    Bài viết
    823

    Thuật toán thì kid có rùi , nhưng khi triển khai ra code thì chạy lại không đúng , khi đọc bài của 2 pro trên thì mới ngấm ngấm chút à.
    Chỉ có điều không hiểu sao code trên chạy vẫn sai ???

  9. #9
    Ngày gia nhập
    11 2006
    Bài viết
    633

    Check rồi, code của tui chạy ngon lành mà, còn code của you bị sai ở đâu thì you cứ post lên đây cho mọi người cùng xem xét.

  10. #10
    Ngày gia nhập
    10 2006
    Nơi ở
    In Your Bugs
    Bài viết
    823

    ặc code mình cũng giống như của bạn mà (chẳng biết nữa nhưng chưa check)
    chắc là mình thiếu sót gì đó , để hôm nao tới giờ thực hành check lại thử coi còn bi giờ là một bài .... cũng về mảng nhưng là mảng 2 chiều (ma trận đó)
    Hơi bị khó gặm , nên nhờ anh em góp ý coi

    Giả sử có một mà trận như sau:
    1 2 3 4 5
    2 3 4 5 6
    3 4 5 6 7
    4 5 6 7 8
    5 6 7 8 9
    Đấy với ma trận trên mình phải in ra : 1 22 333 4444 55555 6666 777 88 9
    theo đường chéo đó , kid chỉ nghĩ ra để có thể in được nữa phía đường chéo trên thôi ...

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

  1. Chỉ thay đổi mấy cái từ khóa cái là sai đúng linh tinh
    Gửi bởi ngonchanloi89 trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 1
    Bài viết cuối: 21-11-2013, 11:29 AM
  2. Dọn nhà bán máy nokia asha 112 , nokia x2 01 và mấy thứ linh tinh
    Gửi bởi yesmanhaha trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 1
    Bài viết cuối: 17-08-2013, 04:13 PM
  3. Cơ sở sản xuất ly thủy tinh, ly sứ, ly thủy tinh dùng cho quán cafe, nhà hàng, khách sạn
    Gửi bởi tranngocson186 trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 28-05-2013, 09:10 AM
  4. Chung cư VP3 Linh Đàm giảm thêm 3 triệu đồng/m2 chcc vp3 linh đàm
    Gửi bởi nguyenhabds trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 18-09-2012, 02:44 PM
  5. Tính tổng trong hàm for lồng for cho ra kết quả linh tinh?
    Gửi bởi contra1221 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 4
    Bài viết cuối: 12-04-2011, 08:15 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