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

Đề tài: Tìm Max, Min trong mảng 1 chiều sử dụng con trỏ

  1. #1
    Ngày gia nhập
    09 2011
    Nơi ở
    Registry
    Bài viết
    43

    Mặc định Tìm Max, Min trong mảng 1 chiều sử dụng con trỏ

    Mình viết hàm tìm giá trị lớn nhất và nhỏ nhất của dãy số, trả về con trỏ tới phần tử tìm thấy.
    Cái hàm tìm giá trị Max thì chạy tốt nhưng hàm Min thì chạy sai chỗ này:
    vd: Nhập 1 2 3 4 5 => Min là 2
    Nhập 2 1 3 4 5 =>Min là 1
    Làm ơn chỉ dùm em sai ở đâu dc hok ạ! Thanks a chị nhìu!

    C++ Code:
    1. #include <iostream.h>
    2. #include <stdlib.h>
    3. #define MAX 100
    4. int a[MAX],n;
    5.  
    6. void Nhap(int *a,int &n)
    7. {
    8.    
    9.     for(int i=0;i<n;i++)
    10.     {
    11.         cout <<"\nNhap phan tu thu a["<<i+1<<"]:";
    12.         cin >>*(a+i);
    13.     }
    14. }
    15. void Xuat(int *a,int n)
    16. {
    17.    
    18.     for(int i=0;i<n;i++)
    19.         cout <<*(a+i)<<' ';
    20.  
    21. }
    22.  
    23. int Maxx(int *a,int n)
    24. {
    25.     int *max=a;
    26.    
    27.     for(int i=1;i<n;i++)
    28.         if(max[i] > *max)
    29.             *max=max[i];
    30.     return *max;
    31. }
    32.  
    33. int Minn(int *a,int n)
    34. {
    35.    
    36.     int *min=a;
    37.     for(int i=1;i<n;i++)
    38.         if(min[i] < *min)
    39.             *min=min[i];
    40.     return *min;
    41. }
    42.  
    43. int main()
    44. {
    45.     cout <<"\nNhap n = ";
    46.     cin >>n;
    47.     Nhap(a,n);
    48.     cout <<"\nMang da tao la: ";
    49.     Xuat(a,n);
    50.     cout <<"\nSo lon nhat la: "<<Maxx(a,n)<<endl;
    51.     cout <<"\nSo be nhat la: "<<Minn(a,n)<<endl;
    52.         system("pause");
    53.     return 0;
    54. }
    C++ Code:
    1. int BanHoc=1, BanBiet=10;
    2.     if(BanHoc==0)
    3.         cout <<"Ban nen di hoc!";
    4.     else
    5.         if(BanBiet==10)
    6.             cout <<"Ban qua pro!";

  2. #2
    Ngày gia nhập
    02 2012
    Nơi ở
    Xanhpetecbua-Nga
    Bài viết
    34

    lỗi đơn giản thôi bạn ạ, do hàm Maxx() của bạn đã làm thay đổi giá trị của a[0],
    C++ Code:
    1. int Maxx(int *a,int n)
    2. {
    3.     int *max=a;//câu lệnh này bạn gán con trỏ vào mảng a->*max=a[0]
    4.    
    5.     for(int i=1;i<n;i++)
    6.         if(max[i] > *max)
    7.             *max=max[i];//câu lệnh này làm thay đổi giá trị a[0]->a[0]=*max
    8.     return *max;
    9. // vậy nên bạn không nên dùng con trỏ trong trường hợp này, dùng biến thường thôi bạn
    10. }

  3. #3
    Ngày gia nhập
    02 2012
    Nơi ở
    Xanhpetecbua-Nga
    Bài viết
    34

    hàm Minn cũng vậy nhé

  4. #4
    Ngày gia nhập
    04 2010
    Bài viết
    1,534

    Bạn này không hiểu "sử dụng con trỏ trong mảng" có nghĩa là gì.

    Hai hàm Minn, Maxx trên không hề sử dụng con trỏ để duyệt mảng. Bạn chỉ sử dụng con trỏ để trỏ vào vùng chứa đáp số thôi.

  5. #5
    Ngày gia nhập
    09 2011
    Nơi ở
    Registry
    Bài viết
    43

    thanks các huynh nhìu nha, mình đã hiểu dc bản chất vấn đề
    C++ Code:
    1. int BanHoc=1, BanBiet=10;
    2.     if(BanHoc==0)
    3.         cout <<"Ban nen di hoc!";
    4.     else
    5.         if(BanBiet==10)
    6.             cout <<"Ban qua pro!";

  6. #6
    Ngày gia nhập
    09 2011
    Nơi ở
    Registry
    Bài viết
    43

    Mặc định Tìm Max, Min trong mảng 1 chiều sử dụng con trỏ

    Đây là bài hoàn chỉnh của mình
    C++ Code:
    1. #include <iostream.h>
    2. #define MAX 100
    3.  
    4.  
    5. void Nhap(int *a,int &n)
    6. {
    7.    
    8.     for(int i=0;i<n;i++)
    9.     {
    10.         cout <<"\nNhap phan tu thu a["<<i+1<<"]:";
    11.         cin >>*(a+i);
    12.     }
    13. }
    14. void Xuat(int *a,int n)
    15. {
    16.    
    17.     for(int i=0;i<n;i++)
    18.         cout <<*(a+i)<<' ';
    19.  
    20. }
    21.  
    22. int *Maxx(int *a,int n)
    23. {
    24.     int *max=a,*p,*q=a+n;
    25.     if(n<=0)
    26.         return NULL;
    27.    
    28.     for(p=a+1;p<q;p++)
    29.         if(*p > *max)
    30.             max=p;
    31.     return max;
    32. }
    33.  
    34. int *Minn(int *a,int n)
    35. {
    36.     if(n<=0)
    37.         return NULL;
    38.     int *min=a,*p,*q=a+n;
    39.    
    40.     for(p=a+1;p<q;p++)
    41.         if(*p < *min)
    42.             min=p;
    43.     return min;
    44. }
    45.  
    46. int main()
    47. {
    48.     int a[MAX],n;
    49.     cout <<"\nNhap n = ";
    50.     cin >>n;
    51.     Nhap(a,n);
    52.     cout <<"\nMang da tao la: ";
    53.     Xuat(a,n);
    54.     int *max=Maxx(a,n);
    55.     int *min=Minn(a,n);
    56.     if(max!=NULL)
    57.         cout <<"\nSo lon nhat la: "<<*max<<endl;
    58.    
    59.     else cout <<"\nMang rong!";
    60.    
    61.     if(min!=NULL)
    62.         cout <<"\nSo be nhat la: "<<*min<<endl;
    63.     else cout <<"\nMang rong!";
    64.     return 0;
    65. }
    C++ Code:
    1. int BanHoc=1, BanBiet=10;
    2.     if(BanHoc==0)
    3.         cout <<"Ban nen di hoc!";
    4.     else
    5.         if(BanBiet==10)
    6.             cout <<"Ban qua pro!";

  7. #7
    Ngày gia nhập
    04 2010
    Nơi ở
    Recycle Bin
    Bài viết
    358

    Nếu là dùng con trỏ thì thiếu cái nữa là cấp phát vùng nhớ cho con trỏ rồi đem ra sử dụng. Bạn thử khai báo con trỏ a rồi cấp phát bộ nhớ cho a rồi sử dụng a --- > đó mới gọi là sử dụng con trỏ
    YH : lobuocphuudu_218
    Phone : 0126 463 5095

    http://forums.congdongcviet.com/signaturepics/sigpic55872_2.gif

  8. #8
    Ngày gia nhập
    09 2011
    Nơi ở
    Registry
    Bài viết
    43

    mình bít ùi, nhưng tại đề bài ko yêu cầu nên ko làm thui, thanks all
    C++ Code:
    1. int BanHoc=1, BanBiet=10;
    2.     if(BanHoc==0)
    3.         cout <<"Ban nen di hoc!";
    4.     else
    5.         if(BanBiet==10)
    6.             cout <<"Ban qua pro!";

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

  1. Mảng 2 chiều vào trong hàm bị chuyển thành mảng 2 chiều , tại sao ???
    Gửi bởi kwideur 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: 06-07-2013, 08:35 PM
  2. Trả lời: 2
    Bài viết cuối: 21-04-2013, 09:46 AM
  3. 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
  4. Trả lời: 1
    Bài viết cuối: 28-04-2012, 09:43 PM
  5. Trả lời: 0
    Bài viết cuối: 04-11-2011, 03:38 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