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

Đề tài: Thắc mắc về truyền giá trị cho tham chiếu

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

    Wink Thắc mắc về truyền giá trị cho tham chiếu

    Code:
    /* #######################NTA########################
       Bai tap:  Sap xep 1 cau truc' va cap phat bo nho dong cho cau truc
       ##################################################
    */
    #include <stdio.h>
    #include <conio.h>
    #include <math.h>
    #include <iostream.h>
    #include <alloc.h>
    #include <stdlib.h>
    #include <iomanip.h>
    
    int nhap(double *a,int n)
    {
      for(int i=1;i<=n;i++)
      {
        cout<<"\n Phan tu thu"<<i<<": ";
        cin>>a[i];
      }
      return 0;
    }
    
    int hv(double &x,double &y)   //khuc nay sao ko double *x double *y duoc
       {
         double  k = x;
    	     x = y;
    	     y = k;
         return 0;
        }
    
        int sx(double *a,int n)
        {
          for(int i=1;i<n;i++)
    	 for(int j = i+1;j<=n;j++)
    	 if(a[i]>a[j])
    	 hv(a[i],a[j]);
             return 1;
        }
    
        main()
        {
          double x[100];
          int i,n;
          cout<<"\n n = ";
          cin>>n;
          nhap(x,n);
          sx(x,n);
        for(i=1;i<=n;i++)
        cout<<" "<<x[i];
        getch();
        return 0;
        }

  2. #2
    Ngày gia nhập
    10 2007
    Nơi ở
    TP. HCM
    Bài viết
    52

    Muốn khai báo double *x, double *y thì phải truyền vào địa chỉ của x và y, Thân hàm thì thế này:
    C Code:
    1. void hoanvi(double *x, double *y)
    2. {
    3.     double z;
    4.  
    5.     z = *x;
    6.     *x = *y;
    7.     *y = z;
    8. }
    /* The thing that I think is the thing that I do. */

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

    //khuc nay sao ko double *x double *y duoc
    Mình đã chạy thử và thấy code của bạn vẫn chạy bình thường đâu có lỗi gì, để double ở đó là đúng. Mình chỉ góp ý với bạn là các hàm của bạn nên để kiểu void vì bản thân nó đâu cần trả về giá trị nào cụ thể, có thể do bạn để vậy nên một số trình dịch báo lỗi hoặc chạy sai.

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

    Mình nghĩ mảng trong C++ luôn được đánh số từ 0, tức là mảng a[n] chứa các phần tử a[0],...., a[n-1].
    Trong bài toán này chỉ cần dán 2 thư viện iostream và conio là đủ. Không cần quá nhiều thư viện như vậy.

  5. #5
    Ngày gia nhập
    10 2007
    Bài viết
    43


    vì boy sợ hay quên các vấn đề như các include cho nên cứ ghi đầy đủ hết cho chắc ^^
    còn ghi trước hàm là void hay ko thì cũng ko biết lúc nào nên trả vè giá trị.
    Thôi hì cứ cho chắc là int hết, lúc nào cũng trả về giá trị, ko xài thì thôi cũng được ^^

    @Chautien: ờ, quên mất cái hoán vị, thanks bạn nha ^^

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

    Mặc định Thắc mắc về truyền giá trị cho tham chiếu


    vì boy sợ hay quên các vấn đề như các include cho nên cứ ghi đầy đủ hết cho chắc ^^
    còn ghi trước hàm là void hay ko thì cũng ko biết lúc nào nên trả vè giá trị.
    Thôi hì cứ cho chắc là int hết, lúc nào cũng trả về giá trị, ko xài thì thôi cũng được ^^
    Không ngờ bạn còn chắc ăn hơn mình. =))
    Nói vậy thôi, như thế không tốt đâu, gọi nhiều thư viện quá chỉ tổ làm nặng chương trình khi compile, bạn gọi thật ít thôi khi chương trình báo thiếu thì thêm vào, lúc đầu là vậy dần dần bạn quen và nhớ thì sẽ biết hàm nào cần thư viện gì thôi.
    Còn phần chương trình con, khi bạn cần hàm đó trả về một giá trị thì dùng kiểu giá trị tương ứng, còn nếu không trả về giá trị gì thì dùng kiểu void (kiểu void thì không có return),

  7. #7
    Ngày gia nhập
    08 2008
    Nơi ở
    TP Hồ Chí Minh
    Bài viết
    28

    C++ Code:
    1. #include <conio.h>
    2. #include <iostream.h>
    3.  
    4. void nhap(double *a, int n)
    5.   {
    6.     for(int i=1; i<=n; i++)
    7.        {
    8.            cout <<"\n Phan tu thu" <<i <<": ";
    9.            cin >>a[i];
    10.        }
    11.   }
    12.  
    13. /*int hv(double &x,double &y)   //khuc nay sao ko double *x double *y duoc
    14.    {
    15.      double  k = x;
    16.          x = y;
    17.          y = k;
    18.      return 0;
    19.     }
    20. */
    21. void hv(double &x, double &y)   //sua lai the nay
    22.    {
    23.     double  k = x;
    24.          x = y;
    25.          y = k;
    26.     }    
    27. void sx(double *a, int n)
    28.     {
    29.       for(int i=1; i<n; i++)
    30.      for(int j = i+1; j<=n; j++)
    31.          if(a[i]>a[j])
    32.              hv(a[i], a[j]);
    33.     }
    34. //thêm hàm xuất
    35. void xuat(double *a, int n)
    36. {
    37.   for(i=1; i<=n; i++)
    38.     cout <<" "<<x[i];
    39. }
    40. void main()
    41.  {
    42.       clrscr();
    43.       double x[100];
    44.       int i, n;
    45.       cout <<"\n n = ";
    46.       cin >>n;
    47.       nhap(x, n);
    48.       sx(x, n);
    49.       xuat(x, n);
    50.       getch();
    51.   }
    52. Mình dùng Bc31 chạy thấy được rồi, bạn test lại xem được chưa nhé.
    Note: mình nghĩ bạn nên xem lại cách xây dựng hàm


    -----
    Chú ý đặt code vào tag
    Đã được chỉnh sửa lần cuối bởi fire_dragon14988 : 14-08-2008 lúc 09:26 AM.

  8. #8
    Ngày gia nhập
    02 2008
    Nơi ở
    Future
    Bài viết
    25

    hình như theo mình hiểu , bạn ko dùng *x , *y được mà phải dùng tham chiếu &x,&y vì x,y là biến đơn(tham biến-thay đổi) , và khi truyền tham chiếu cho biến đơn thì dùng &x,&y .Còn đối với mảng ,truyền tham chiếu thì sẽ dùng *x,*y
    Bể học mênh mông , quay đầu ....là bờ !

  9. #9
    Ngày gia nhập
    08 2008
    Bài viết
    13

    Trích dẫn Nguyên bản được gửi bởi boy_popping Xem bài viết

    vì boy sợ hay quên các vấn đề như các include cho nên cứ ghi đầy đủ hết cho chắc ^^
    còn ghi trước hàm là void hay ko thì cũng ko biết lúc nào nên trả vè giá trị.
    Thôi hì cứ cho chắc là int hết, lúc nào cũng trả về giá trị, ko xài thì thôi cũng được ^^

    @Chautien: ờ, quên mất cái hoán vị, thanks bạn nha ^^
    Tùy theo chức năng của hàm là gì mà đặt kiểu cho phù hợp chứ bạn.Đưng include hết như thế.Bạn càng làm thế thì càng không biết hàm này trong lib nào.Cứ làm vài lần rồi quen ngay mà.
    Bạn tham khảo ở đây này:
    http://www.cplusplus.com/reference/

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

  1. Hàm trong C++ vấn đề truyền tham chiếu, cấp phát bộ nhớ động trong C++
    Gửi bởi nglong0350 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 2
    Bài viết cuối: 04-10-2013, 06:42 PM
  2. Phân biệt truyền biến bằng tham trị, tham chiếu, địa chỉ. Xin cảm ơn.
    Gửi bởi thaoha trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 2
    Bài viết cuối: 18-02-2012, 02:03 PM
  3. Truyền tham chiếu trong C++ như thế nào?
    Gửi bởi lamtrunghieu204 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 6
    Bài viết cuối: 19-11-2010, 05:39 PM
  4. Về vấn đề truyền con trỏ vào hàm (hay là truyền tham chiếu)
    Gửi bởi hieupm.it90 trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 1
    Bài viết cuối: 09-09-2010, 04:08 PM
  5. Kỹ thuật C Cách truyền tham chiếu là mảng cho hàm
    Gửi bởi conrongchautien trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 2
    Bài viết cuối: 28-04-2010, 11:09 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