Announcement

Collapse
No announcement yet.

[Help][C] Biến trả về trong hàm tự tạo.

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • [Help][C] Biến trả về trong hàm tự tạo.

    Em đang làm 1 bài tập và bị vướng 1 chỗ, đó là: thuật toán của em cần có 1 hàm mà sau khi thực hiện sẽ phải return ít nhất 1 biến và nhiều nhất là 6 biến, nhưng trong C chỉ cho phép hàm return 1 biến duy nhất, có anh chị nào có cách giải quyết thì hướng dẫn em với ạ. Nếu được thì có thể post code kèm lời chú thích luôn thì càng tốt

    Thanks nhiều...
    ˚˚CQH˚˚
    ◦•HTTT07•◦

  • #2
    Originally posted by 12520344 View Post
    Em đang làm 1 bài tập và bị vướng 1 chỗ, đó là: thuật toán của em cần có 1 hàm mà sau khi thực hiện sẽ phải return ít nhất 1 biến và nhiều nhất là 6 biến, nhưng trong C chỉ cho phép hàm return 1 biến duy nhất, có anh chị nào có cách giải quyết thì hướng dẫn em với ạ. Nếu được thì có thể post code kèm lời chú thích luôn thì càng tốt

    Thanks nhiều...
    Giả sử như có một hàm return nhiều giá trị thì khi gọi hàm làm sao bạn có thể sử dụng hết các giá trị mà hàm đó return.
    Bạn có thể truyền các biến cần thay đổi vào hàm bằng tham chiếu và trực tiếp thay đổi giá trị của biến đó.
    Bạn cũng có thể lưu các giá trị cần return vào một cái mảng và hàm sẽ return địa chỉ của mảng đó, nhưng trước giờ mình chưa bao giờ gặp trường hợp này.

    Bạn hãy đưa bài toán của mình lên đây để mọi người giải quyết giúp

    Comment


    • #3
      cách 1 : định nghĩa 1 struct của riêng em
      typedef struct _ArrayType
      {
      int array[6];
      int size;
      } ArrayType;

      cách 2 : Viết hàm như thế này
      int* MyFunction(int &size, ...)

      Cách 1 nó khoa học và gọn hơn, tất nhiên, tất cả đều do e lựa chọn
      nguyendauit@gmail.com

      Comment


      • #4
        Bạn đã học về con trỏ chưa ? Hiểu con trỏ bạn sẽ dễ dàng thực hiện việc thay đổi kết quả nhiều biến chỉ trong 1 hàm (Nói thế này thì cũng k hẳn đúng lắm, nhưng đại loại là có thể thực hiện được mục đích bạn đã nêu).
        Đại khái là khi truyền tham trị vào 1 hàm, ta sẽ truyền địa chỉ của biến đó thay vì truyền giá trị biến đó, nên các thao tác với biến sẽ được thay đổi trực tiếp vào vùng nhớ.
        Ví dụ bạn có 2 biến i,j. Giờ bạn muốn gọi 1 hàm swap, mà sau khi thoát khỏi hàm swap thì giá trị của 2 biến i,j sẽ được đổi cho nhau :

        Code:
        #include <stdio.h>
        
        
        void swap(int *i, int *j)
        {
        	int t;
        	t = *i;
        	*i = *j;
        	*j = t;
        }
        void main()
        {
        	int i,j;
        	i = 5; j = 10;
        	swap(&i,&j);
        	printf("%d %d",i,j);
        }
        Ở hàm swap, thay vì swap(int i,j) thì ta đặt swap(int *i, int *j) để tham trị là địa chỉ của ô nhớ chứa 2 biến này. Khi gọi lệnh swap ta cũng gọi swap(&i,&j) để truyền tham trị là địa chỉ của ô nhớ chứa 2 biến i,j.
        Nếu hàm của bạn cần "return" 6 biến, thì chỉ cần đưa tham trị là địa chỉ của 6 biến bạn đã khai báo, kết quả sẽ được trả về 6 biến đó sau khi hàm thực thi xong.

        Chúc bạn học tốt.
        Last edited by 12520527; 02-11-2012, 18:30.
        “ Đơm hoa không kết trái thì có sao?

        Là cá thì nhất định phải bơi ư?

        Ai bảo cuộc đời là phải sống,
        Ai bảo đau khổ rồi cũng sẽ qua,
        Ai bảo bài hát là phải có dạo đầu,

        Phá vỡ ranh giới để tìm kiếm điều gì đó...”

        Comment


        • #5
          @Tín : a nghĩ sẽ hay hơn nếu như nó thế này
          void Swap(int &a, int &b)
          {
          ...
          }
          int main()
          {
          int a, b;
          ...
          Swap(a, b);
          ...
          }
          nguyendauit@gmail.com

          Comment


          • #6
            Originally posted by 10520100 View Post
            @Tín : a nghĩ sẽ hay hơn nếu như nó thế này
            void Swap(int &a, int &b)
            {
            ...
            }
            int main()
            {
            int a, b;
            ...
            Swap(a, b);
            ...
            }
            Tks anh :haha:
            “ Đơm hoa không kết trái thì có sao?

            Là cá thì nhất định phải bơi ư?

            Ai bảo cuộc đời là phải sống,
            Ai bảo đau khổ rồi cũng sẽ qua,
            Ai bảo bài hát là phải có dạo đầu,

            Phá vỡ ranh giới để tìm kiếm điều gì đó...”

            Comment


            • #7
              Originally posted by 10520100 View Post
              @Tín : a nghĩ sẽ hay hơn nếu như nó thế này
              void Swap(int &a, int &b)
              {
              ...
              }
              int main()
              {
              int a, b;
              ...
              Swap(a, b);
              ...
              }
              trong C không có tham chiếu đâu, nên khuyên các bạn dùng con trỏ cho thành thạo thì tốt hơn :nose:

              Comment


              • #8
                Chủ thớt nó chưa nói rõ yêu cầu mà từ post #3 trở đi trả lời cái gì khí thế quá vậy =))
                Thường mấy cái này nhiều khả năng tại tư tưởng thiết kế hàm nó không được tốt nó mới đẻ ra lắm chuyện như vậy nên chờ yêu cầu rõ ràng mới tư vấn được chứ.

                Comment


                • #9
                  Originally posted by 11520377 View Post
                  trong C không có tham chiếu đâu, nên khuyên các bạn dùng con trỏ cho thành thạo thì tốt hơn :nose:
                  Em thấy con trỏ dùng cho cấu trúc dữ liệu thì được rồi, còn những vấn đề tương tự như vầy dùng như cách của anh Nguyên cho dễ :haha:
                  “ Đơm hoa không kết trái thì có sao?

                  Là cá thì nhất định phải bơi ư?

                  Ai bảo cuộc đời là phải sống,
                  Ai bảo đau khổ rồi cũng sẽ qua,
                  Ai bảo bài hát là phải có dạo đầu,

                  Phá vỡ ranh giới để tìm kiếm điều gì đó...”

                  Comment


                  • #10
                    Originally posted by 12520344 View Post
                    Em đang làm 1 bài tập và bị vướng 1 chỗ, đó là: thuật toán của em cần có 1 hàm mà sau khi thực hiện sẽ phải return ít nhất 1 biến và nhiều nhất là 6 biến, nhưng trong C chỉ cho phép hàm return 1 biến duy nhất, có anh chị nào có cách giải quyết thì hướng dẫn em với ạ. Nếu được thì có thể post code kèm lời chú thích luôn thì càng tốt

                    Thanks nhiều...
                    Có 3 cách mà anh hay xài

                    Cách 1: return về 1 object (1 mảng, 1 con trỏ đến mảng, 1 class/struct)

                    int * foo()
                    {
                    int * a = new int [6];//C++, còn với C thì a = (int*) malloc(6*sizeof(int));
                    a[0]=...;
                    return a;
                    }

                    Cách 2: return về lỗi, còn giá trị cần return thì đặt vào biến con trỏ được truyền vào thông qua parameters, hoặc là dùng tham trị
                    int foo(int &a,int &b,int *c,...)

                    Cách 3: dùng biến toàn cục

                    Originally posted by 11520377 View Post
                    trong C không có tham chiếu đâu, nên khuyên các bạn dùng con trỏ cho thành thạo thì tốt hơn :nose:
                    Thớt hỏi [C], nhưng lại học năm 1 => không rõ là học C đại cương hay C standard ? Nếu là C đại cương thì SGK trường mình còn mập mờ huống chi là chủ thớt . Cách phân biệt c và c++ của mình đơn giản là thớt viết code save tên file là gì ? file.c => lập trình c, file.cpp => lập trình c++. Đa số các bạn năm 1 đều lập trình c nhưng lưu đuôi c++
                    Last edited by 09520019; 02-11-2012, 21:20.
                    Khoảng cách giữa bạn và ước mơ của bạn là bao xa ?

                    Comment

                    LHQC

                    Collapse
                    Working...
                    X