Trang 1 trên tổng số 3 123 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 23 kết quả

Đề tài: cấp phát động cho mảng 1 chiều ( help me)

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

    Mặc định cấp phát động cho mảng 1 chiều ( help me)

    Các pro chỉ dẫn dùm em :
    - Số là em viết chương trình...nhập và xuất,sapxep,...vv mảng 1 chiều như sau :
    --Ở đây em cấp phát động trong hàm main
    CÓ THỂ CHỈ DÙM EM CÁCH CẤP PHÁT ĐỘNG TRONG HÀM " NHẬP" DC KO?
    có thể thì giải thích kĩ dùm em ... mai em thi rùi hu hu...

    C++ Code:
    1. #include<stdio.h>
    2. #include<malloc.h>
    3. #include<process.h>
    4. #include<math.h>
    5. #define Max 100
    6. void Nhap(long *a,int spt);// spt nhap trong ham main nen spt la 1 tham tri
    7. void Xuat(const long *a,int spt);
    8. void Doi(long &m,long &n);// dung tham bien kieu bi danh
    9. void Sapxep(long *a,int spt);
    10. double Tinhtong(long *a,int spt);
    11. // dung tra ve kieu double de ko bi tran so
    12. bool LASNT(long n);// cau e dung 2 ham
    13. void INSNT(const long *a,int spt);
    14. double TongSNT(const long *a,int spt);
    15. void main()
    16. {
    17.     long *msn;
    18.     int sopt;
    19.     do
    20.     {
    21.         printf("Hay nhap so phan tu mang tu 1 den %ld: ",Max);
    22.         scanf("%d",&sopt);
    23.     }
    24.     while(sopt<1||sopt>Max);
    25.  
    26. // cap phat dong cho bien msn
    27.  
    28.     msn=(long *)malloc(sopt*sizeof(long));
    29.  
    30. // Nhap mang msn
    31.  
    32.     printf("\n Nhap mang so nguyen:\n");
    33.     Nhap(msn,sopt);
    34.     printf("\n Mang da nhap");
    35.     Xuat(msn,sopt);
    36.  
    37.     //sap xep mang
    38.  
    39.     Sapxep(msn,sopt);
    40.     printf("\n mang da sap xep : ");
    41.     Xuat(msn,sopt);
    42.  
    43.     //tinh tong cac phan tu trong mang
    44.    
    45.     Tinhtong(msn,sopt);
    46.  
    47.     //in so nguyen to ra
    48.  
    49.     printf("cac so nguyen to trong mang:\n");
    50.     INSNT(msn,sopt);
    51.  
    52.     // in tong cua cac so nguyen to
    53.     printf("tong cac so nguyen to la %.0lf\n ",TongSNT(msn,sopt));
    54.  
    55.    
    56. }
    57. void Nhap(long *a,int spt)
    58. {
    59.     for(int i=0;i<spt;i++)
    60.     {
    61.         printf("Hay nhap vao mang thu %d: ",i+1);
    62.         scanf("%ld",&a[i]);
    63.     }
    64. }
    65. void Xuat(const long *a,int spt)
    66. {
    67.     for(int i=0;i<spt;i++)
    68.     printf("%ld ",a[i]);
    69. }
    70. void Doi(long &m,long &n)// bien kieu tham chieu
    71. {
    72.     long tamp=m;
    73.     m=n;
    74.     n=tamp;
    75. }
    76. void Sapxep(long *a,int spt)
    77. {
    78.     for(int i=0;i<spt-1;i++)
    79.         for(int j=i+1;j<spt;j++)
    80.             if(a[i]>a[j])
    81.                 Doi(a[i],a[j]);// can dc giai thich
    82. }
    83. double Tinhtong(long *a,int spt)
    84. {
    85.     double s=0;
    86.     for(int i=0;i<spt;i++)
    87.         s+=a[i];
    88.     printf("\n TOng la %.0lf\n",s);
    89.  
    90.     return s;
    91. }
    92. bool LASNT(long n)
    93. {
    94.     long i=2;
    95.     while(n%i!=0&&i<=sqrt(labs(n)))// phai dung ham labs ( ham tri tuyet doi)
    96.                                     //vi moi phan tu trong mang ta co the nhap vao 1 so am
    97.     i++;
    98.         if(i>sqrt(labs(n)))
    99.             return true;
    100.         else
    101.             return false;
    102.    
    103. }
    104. void INSNT(const long *a,int spt)
    105. {
    106.     for(int i=0;i<spt;i++)
    107.    
    108.         if(LASNT(a[i])&&a[i]!=0)
    109.             printf("\n so nguyen to la %ld\n ",a[i]);
    110.            
    111.    
    112. }
    113. double TongSNT(const long *a,int spt)
    114. {
    115.     double s=0;
    116.     for(int i=0;i<spt;i++)
    117.         if(LASNT(a[i]))
    118.             s+=a[i];
    119.         return s;
    120. }


    Nhớ đưa code vào tag và không được post 2 bài giống nhau
    Đã được chỉnh sửa lần cuối bởi meoconlongvang : 08-02-2009 lúc 10:48 PM. Lý do: Nhắc nhở

  2. #2
    Ngày gia nhập
    10 2007
    Nơi ở
    Hà nội
    Bài viết
    4

    Tớ sửa khai báo hàm nhập:

    C++ Code:
    1. void Nhap(long [COLOR="Red"]*&a,[/COLOR]int spt);// spt nhap trong ham main nen spt la 1 tham tri
    2. Bỏ dòng sau trong hàm main:
    3. [COLOR="Red"]msn=(long *)malloc(sopt*sizeof(long));[/COLOR]
    4. Sửa hàm nhập (ở phần thực hiện hàm)
    5. void Nhap(long [COLOR="Red"]*&a[/COLOR],int spt)
    6. {
    7. [COLOR="Red"]a=(long *)malloc(spt*sizeof(long));[/COLOR]
    8. for(int i=0;i<spt;i++)
    9. {
    10. printf("Hay nhap vao mang thu %d: ",i+1);
    11. scanf("%ld",&a[i]);
    12. }

    Thế là lại chạy được như ban đầu bạn làm
    Giải thích:
    Bạn khai báo hàm nhập như sau:
    void Nhap(long *a,int spt);
    và gọi nó thế này:
    Nhap(msn,sopt);
    Thì nếu cấp phát động trong phần hàm nhập, nó cũng sẽ tạo ra một mảng động và nhập phần tử vào, nhưng khi kết thúc hàm nhập, con trỏ a được giải phóng và cả mảng động cũng đi theo nó luôn
    Thế nên sửa lại chút như trên là lại chạy được

    Chả biết tớ sửa lại có đúng ý bạn định hỏi hay không?
    Có gì mail cho tớ nhé: cfamfet@gmail.com
    Đã được chỉnh sửa lần cuối bởi meoconlongvang : 08-02-2009 lúc 10:49 PM. Lý do: Đưa code vào tag

  3. #3
    Ngày gia nhập
    07 2008
    Nơi ở
    /media/Anime
    Bài viết
    2,288

    Nhớ bọc code vào tag nha 2 sếp
    Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.

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

    Nhân tiện mình xin hỏi các pro :
    - giải thích dùm tại sao khi chuyền tham số cho biến con trỏ ta đưa dấu & vào phía trc tham số đó ( còn khi dùng tham chiếu lại ko thêm dấu &)

    -Vd: long *n thì n là địa chỉ rùi sao mà phải thêm dấu địa chỉ zo phía trc nhỉ

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

    Nhân tiện mình xin hỏi các pro :
    - giải thích dùm tại sao khi chuyền tham số cho biến con trỏ ta đưa dấu & vào phía trc tham số đó ( còn khi dùng tham chiếu lại ko thêm dấu &)

    -Vd: long *n thì n là địa chỉ rùi sao mà phải thêm dấu địa chỉ zo phía trc nhỉ
    Truyền tham biến sử dụng dấu &, vốn thực chất dấu & là phép lấy địa chỉ.
    Khi thao tác trực tiếp với địa chỉ thực của biến thì những thay đổi khi thực hiện chương trình đối với biến được giữ nguyên.

    Ở đây C và C++ có 2 cách truyền tham biến khác nhau:
    - C dùng con trỏ trỏ tới địa chỉ thật của biến, mà bản chất biến con trỏ là chứa địa chỉ nên khi gọi chương chình con ở chương chình chính ta phải thêm & trước biến khác biến con trỏ.
    - C++ dùng tham chiếu &x tức địa chỉ của biến x, vậy ở hàm main ta chỉ cần gọi chương trình con với x là đủ.

    -Vd: long *n thì n là địa chỉ rùi sao mà phải thêm dấu địa chỉ zo phía trc nhỉ
    Cái đó bạn hiểu như này nhé long* n; vậy n là biến con trỏ kiểu long* và long* là kiểu địa chỉ của một vùng nhớ khác mang kiểu long.

    Có vẻ khó hiểu đấy, bạn đọc kĩ nhé!

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

    Mặc định cấp phát động cho mảng 1 chiều ( help me)

    code của bạn sửa để chạy đúng thì phải như thế này:(mình đã fix theo ý kiến của bạn,sorry,đã sửa)
    PHP Code:
    #include<stdio.h>
    #include<malloc.h>
    #include<process.h>
    #include<math.h>
    //#define Max 10
    void Nhap(long *a,int spt);// spt nhap trong ham main nen spt la 1 tham tri
    void Xuat(const long *a,int spt);
    void Doi(long &m,long &n);// dung tham bien kieu bi danh
    void Sapxep(long *a,int spt);
    double Tinhtong(long *a,int spt);
    // dung tra ve kieu double de ko bi tran so
    bool LASNT(long n);// cau e dung 2 ham
    void INSNT(const long *a,int spt);
    double TongSNT(const long *a,int spt);
    void main()
    {
        
    long *msn;
        
    int sopt;
        
    /*do
        {
            printf("Hay nhap so phan tu mang tu 1 den %ld: ",Max);
            scanf("%d",&sopt);
        }
        while(sopt<1||sopt>Max);*/

    // Nhap mang msn

        
    printf("\n Nhap mang so nguyen:\n");
        
    printf("\nNhap so phan tu:");
        
    scanf("%d",&sopt);
        
    msn=(long *)malloc(sopt*sizeof(long));
        
    Nhap(msn,sopt);
        
    printf("\n Mang da nhap");
        
    Xuat(msn,sopt);

        
    //sap xep mang

        
    Sapxep(msn,sopt);
        
    printf("\n mang da sap xep : ");
        
    Xuat(msn,sopt);

        
    //tinh tong cac phan tu trong mang
       
        
    Tinhtong(msn,sopt);

        
    //in so nguyen to ra

        
    printf("cac so nguyen to trong mang:\n");
        
    INSNT(msn,sopt);

        
    // in tong cua cac so nguyen to
        
    printf("tong cac so nguyen to la %.0lf\n ",TongSNT(msn,sopt));
        
    delete msn;
    }
    void Nhap(long *a,int spt)
    {
        
    //a=(long *)malloc(spt*sizeof(long));

        
    for(int i=0;i<spt;i++)
        {
            
    printf("Hay nhap vao mang thu %d: ",i+1);
            
    scanf("%ld",&a[i]);
        }
    }
    void Xuat(const long *a,int spt)
    {
        for(
    int i=0;i<spt;i++)
        
    printf("%ld ",a[i]);
    }
    void Doi(long &m,long &n)// bien kieu tham chieu
    {
        
    long tamp=m;
        
    m=n;
        
    n=tamp;
    }
    void Sapxep(long *a,int spt)
    {
        for(
    int i=0;i<spt-1;i++)
            for(
    int j=i+1;j<spt;j++)
                if(
    a[i]>a[j])
                    
    Doi(a[i],a[j]);// can dc giai thich
    }
    double Tinhtong(long *a,int spt)
    {
        
    double s=0;
        for(
    int i=0;i<spt;i++)
            
    s+=a[i];
        
    printf("\n TOng la %.0lf\n",s);

        return 
    s;
    }
    bool LASNT(long n)
    {
        
    long i=2;
        while(
    n%i!=&& i<=sqrt((double)labs(n)))
        {
    // phai dung ham labs ( ham tri tuyet doi)
                                        //vi moi phan tu trong mang ta co the nhap vao 1 so am
            
    i++;
            if(
    i>sqrt((double)labs(n)))
                return 
    true;
            else
                return 
    false;
        }
       
    }
    void INSNT(const long *a,int spt)
    {
        for(
    int i=0;i<spt;i++)
       
            if(
    LASNT(a[i])&&a[i]!=0)
                
    printf("\n so nguyen to la %ld\n ",a[i]);
               
       
    }
    double TongSNT(const long *a,int spt)
    {
        
    double s=0;
        for(
    int i=0;i<spt;i++)
            if(
    LASNT(a[i]))
                
    s+=a[i];
            return 
    s;

    Đã được chỉnh sửa lần cuối bởi nntn : 09-02-2009 lúc 08:38 PM.

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

    mình nhớ - mảng chỉ có 2 cách khai báo thui mà:
    - kiểu con trỏ *a
    -kiểu tham chiếu &a
    --- Kiểu bạn đưa ra mình ko tài nào hiểu dc
    Bạn giải thích dùm mình đi cám ơn nhiều

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

    Trích dẫn Nguyên bản được gửi bởi chickencake1 Xem bài viết
    mình nhớ - mảng chỉ có 2 cách khai báo thui mà:
    - kiểu con trỏ *a
    -kiểu tham chiếu &a
    --- Kiểu bạn đưa ra mình ko tài nào hiểu dc
    Bạn giải thích dùm mình đi cám ơn nhiều
    đã fix,mình nhầm

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

    mình nhớ - mảng chỉ có 2 cách khai báo thui mà:
    - kiểu con trỏ *a
    -kiểu tham chiếu &a
    --- Kiểu bạn đưa ra mình ko tài nào hiểu dc
    Mảng chỉ có một cách khai báo
    - Mảng 1 chiều a[MAX]
    - Mảng nhiều chiều a[MAX][MAX][MAX]...[MAX]

    Con trỏ thì có 2 loại, biến con trỏ cái bạn ghi ở trên có kí hiệu *, con trỏ hằng mà tên gọi khác của nó là mảng có kí hiệu []

    Bạn cần học qua lý thuyết cơ bản mới có thể giải thích bạn hiểu được.

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

    í lộn:mảng có 2 cách khai báo đó là :
    - kiểu con trỏ *a
    và kiểu tượng trưng []
    thanks các bạn nhiều nha

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

  1. Trả lời: 2
    Bài viết cuối: 21-04-2013, 09:46 AM
  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: 1
    Bài viết cuối: 28-04-2012, 09:43 PM
  4. Cách truyền mang 1 chiều cho hàm bài con trỏ và mảng một chiều ai có thể giải thích giúp mình
    Gửi bởi biencute trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 8
    Bài viết cuối: 21-03-2012, 09:00 AM
  5. Lời giải bài tập: Chuỗi Ký tự, mảng số nguyên 1 chiều, mảng 2 chiều, tạo Menu
    Gửi bởi xuanngoc trong diễn đàn Thủ thuật, Tutorials và Mã nguồn C/C++/C++0x
    Trả lời: 0
    Bài viết cuối: 15-10-2011, 01:17 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