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

Đề tài: giúp em hàm realloc !!!

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

    Angry giúp em hàm realloc !!!

    em dùm VC++ ,
    cho em hỏi bài xóa số nguyên tố trong mảng động , khi em xóa 1 số nguyên tố trong mảng thì phải cấp phát lại bộ nhớ nhưng em ko bit ghi sao

    mong pa kon giúp đỡ

    C++ Code:
    1. //-------Hàm Kiểm tra snt----------------
    2.  
    3. int ktsnt(int n)
    4. {
    5.     if(n<2)return 0;
    6.     for(int i=2;i<=n/2;i++)
    7.     {
    8.         if(n%i==0)return 0;
    9.     }
    10.     return 1;
    11. }
    12.  
    13. //---------------ham xoa vi tri -------------
    14.  
    15. void xoavitri(int *&a,int &n,int k)
    16. {
    17.    
    18.     for(int i=k;i<n-1;i++)
    19.         a[i]=a[i+1];
    20.     n--;
    21.     a=(int *)realloc(a,n*sizeof(int));  // không bit để đâu cho đúng , mà ghi vậy đúng hem ..
    22. }
    23.  
    24. //---------------- Xoa nguyen to ---------------------
    25.  
    26. void xoanguyento(int *&a,int n)
    27. {
    28.    
    29.     for(int i=0;i<n;i++)
    30.     {
    31.         if(ktsnt(a[i])==1)
    32.                 {
    33.                       xoavitri(a,n,i);
    34.               i--;
    35.                 }
    36.     }
    37. }
    Đã được chỉnh sửa lần cuối bởi car0ot : 10-05-2008 lúc 06:01 PM.

  2. #2
    Ngày gia nhập
    12 2006
    Nơi ở
    US
    Bài viết
    1,917

    Dùng C++ thì dùng new + delete, dùng C thì xài realloc.
    Ví dụ :
    C++ Code:
    1. #include <iostream>
    2.  
    3. const int SIZE = 10;
    4.  
    5. int* del_return( int* ary, int size )
    6. {
    7.     int* g = new int[ size ];
    8.     /*
    9.          - Cái này tui chỉ gán lại
    10.          - Cậu muốn del số nguyên tố hay đó thì tuỳ
    11.     */
    12.     for( int x = 0; x < size; ++x )
    13.         g[ x ] = ary[ x ];
    14.        
    15.     delete[] ary;
    16.    
    17.     return g;
    18. }
    19.  
    20. int main()
    21. {
    22.     int* ary = new int[ SIZE ];
    23.    
    24.     for( int g = 0; g < SIZE; ++g )
    25.     {
    26.         ary[ x ] = g + 1;
    27.     }
    28.    
    29.     ary = del_return( ary, SIZE );
    30.    
    31.     delete[] ary;
    32.    
    33.     return 0;
    34. }

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

    àh , tớ hiểu ý cậu rồi , có nghĩa là gán mảng cũ bằng mảng khác với size mới rồi return cái mảng mới , làm vậy cũng dc nhưng mà ko biết còn cách nào hay hơn ko .
    Nếu như làm như cách trên thì Visaul tạo ra hàm realloc làm jì nhỉ ?

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

    em Demo thêm 1 vd cũng liên quan đến hàm realloc cho rõ hơn .

    Vd : như sau (em dung VS C++ , máy anh chỉ việc copy chạy ,Test)
    Hàm 1 : Viết một chương trình tìm X trong mảng động 1 chiều bằng phương pháp cầm canh .
    Ham 2 : kiểm tra xem mảng có tăng dần hay ko ?

    Giải thuật cầm canh là phải thêm 1 phần tử cuối cùng tức a[n]=x , nên ta cấp phát thêm cho nó = reallocn+1 phần tử phải ko ạ .

    Sau khi làm xong thì ta phải xóa phần tử đó đi cho nó trở lại mảng ban đầu đúng ko ? (Nếu ko xóa nó sẽ ảnh hưởng đến bài sau , như vd này ).

    Nếu như em để trong hàm timx dưới cùng
    Code:
    a=(int *)malloc(n*sizeof(int));
    thì chương trình chạy đúng ,
    ngược lại để realloc thì chương trình chạy sai .

    Nhưng theo như thấy mih nói là nếu muốn cấp phát lại thì phải dùng realloc , còn malloccấp phát lại từ đầu ( nghĩa là mảng sẽ bị xóa hết ) .

    Hic hic , nhưng chương trình chạy thì ngược lại ko hiểu sao ? Pác nào hiểu kĩ vấn đề này chỉ em với .

    và đây là code :

    Code:
    // TestThucHanh.cpp : Defines the entry point for the console application.
    //
    
    #include "stdafx.h"
    #include "stdlib.h"
    
    void nhapmang(int *&a,int &n);
    void xuatmang(int *a,int n);
    void timx(int *&a,int n,int &x);
    int kiemtra(int *a,int n);
    
    int main(int argc, char* argv[])
    {
        int *a;
        int n,x;
        nhapmang(a,n);
        printf("\nMang sau khi nhap :\n");
        xuatmang(a,n);
    
        timx(a,n,x);
    
        if(kiemtra(a,n)==0)printf("\n\nMang khong tang dan .");
        else printf("\n\nMang tang dan . ");
    
        return 0;
    }
    
    //-------------------Nhap Mang------------------
    
    void nhapmang(int *&a,int &n)
    {
        printf("Nhap n : ");
        scanf("%d",&n);
        a=(int*)malloc(n*sizeof(int));
        if(a==NULL)
        {
            printf("\n Khong cap phat duoc .");
            exit(0);
        }
        for(int i=0;i<n;i++)
        {
            printf("Nhap a[%d] = ",i);
            scanf("%d",&a[i]);
        }
    
    }
    
    //--------------------Xuat Mang------------------
    
    void xuatmang(int *a,int n)
    {
        for(int i=0;i<n;i++)
            printf("\t%d",*(a+i));
    }
    
    
    //--------------------Cam Canh-------------------
    
    void timx(int *&a,int n,int &x)
    {
        n++;
        a=(int*)realloc(a,n*sizeof(int));
        printf("\nNhap X : ");
        scanf("%d",&x);
        a[n]=x;
        for(int i=0;a[i]!=x;i++);
        if(i==n)printf("\nKhong tim thay %d .",x);
        else printf("\nVi tri %d trong mang la %d .",x,i);
    
        n--;
        //a=(int *)realloc(a,n*sizeof(int));
        a=(int *)malloc(n*sizeof(int));
    }
    
    //--------------------Kiem tra Mang co tang khong------------------
    
    int kiemtra(int *a,int n)
    {
        for(int i=0;i<n;i++)
            if(a[i]>a[i+1])return 0;
        return 1;
    }

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

  1. Sự khác nhau của malloc, calloc, realloc
    Gửi bởi taller trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 22
    Bài viết cuối: 10-03-2017, 11:43 PM
  2. Lập trình C Sau khi sử dụng realloc thi giá trị cũ của mảng bị thay đổi
    Gửi bởi trantrunghieu90 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: 30-12-2013, 05:03 PM
  3. Hỏi về Calloc mà Realloc!
    Gửi bởi conga2012 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 0
    Bài viết cuối: 31-12-2012, 02:59 PM
  4. Cấp phát bộ nhớ động - realloc tại sao gây ra lỗi?
    Gửi bởi Solokop trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 6
    Bài viết cuối: 05-04-2011, 08:08 PM
  5. realloc hoạt động như thế nào?
    Gửi bởi zxy613 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 1
    Bài viết cuối: 20-10-2009, 07:32 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