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

Đề tài: Thắc mắc về hàm con

  1. #1
    Ngày gia nhập
    03 2008
    Nơi ở
    Nhà tù
    Bài viết
    37

    Mặc định Thắc mắc về hàm con

    Ở một số bài toán về hàm,em thấy hàm con có khi return biến nào đó,có khi return 1 va return 0.Vậy các anh có thể phân biệt cho em các kiểu return đó không

  2. #2
    Ngày gia nhập
    10 2007
    Nơi ở
    Gameloft studio
    Bài viết
    175

    Rất nhiều trường hợp.
    Bạn thử post một bài code đi, mình chỉ rõ cho
    Không biết ghi gì luôn ...

  3. #3
    Ngày gia nhập
    12 2007
    Bài viết
    224

    Chức năng của hàm return là trả về cho hàm 1 giá trị nào đó đồng thời thoát luôn ra khỏi hàm ấy.

    Ví dụ

    C Code:
    1. int hamcon(int x)
    2. {
    3.  return 2*x;
    4. }

    Hàm này có kiểu trả về là int và bạn cũng thấy rằng trong thân hàm nó trả về 1 kiểu số nguyên ( do x là nguyên nên 2x cũng nguyên )

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

    Ở một số bài toán về hàm,em thấy hàm con có khi return biến nào đó,có khi return 1 va return 0.Vậy các anh có thể phân biệt cho em các kiểu return
    Trả về không hay 1 thường hàm có kiểu là boolean (bool), nó dùng để kiểm tra sự đúng hay sai nào đó. Ví dụ :
    C Code:
    1. #include <stdio.h>
    2.  
    3. bool is_greater_than_3(int x){
    4.   if(x > 3){
    5.     return 1;
    6.   }
    7.   return 0;
    8. }
    9.  
    10. int main(){
    11.   int number;
    12.   printf("\n Enter a number : ");
    13.   scanf("%d", &number);
    14.   if(is_greater_than_3(number) == true)
    15.     printf("\n Yes it is !");
    16.   else
    17.     printf("\n No it is not !");
    18.  
    19.   return 0;
    20. }

  5. #5
    Ngày gia nhập
    03 2008
    Nơi ở
    Nhà tù
    Bài viết
    37

    Trích dẫn Nguyên bản được gửi bởi Forlorn_hope Xem bài viết
    Rất nhiều trường hợp.
    Bạn thử post một bài code đi, mình chỉ rõ cho

    Code:
    #include<stdio.h>
    #include<conio.h>
    char *strchr(char *s,char c);
    void main(void)
    { char s[80],c;
      char i;
         printf("Nhap s=");gets(s);
         printf("Nhap c=");scanf("%s",&c);
         strchr(s,c);
         if(strchr(s,c)!=0) printf("Trong chuoi s co ky tu %c: .Vi tri xh la %d:",c,i);
        else printf("Ko xh!");
    }
    char *strchr(char *s,char c)
    {
         for(char i=1;s[i]!='\0';i++)
         { if(s[i]==c)
             { break;
                 return 1;
             }
       }
         if(s[i]=='\0') return 0;
    }
    Bài này dùng return 1 và return 0.


    Code:
    #include<stdio.h>
    #include<conio.h>
    #include<string.h>
    
    int *strchr(char *s,char c);
    void main(void)
    {
    
        textmode(C80);
        clrscr();
         char s[80],c;
         printf("Nhap s=");gets(s);
         printf("Nhap c=");scanf("%s",&c);
         strchr( s,c);
    }
    int *strchr(char *s,char c)
    {
         for(int i=1;s[i]!='\0';i++)
         { if(s[i]==c)
             { printf("Vi tri xuat hien ky tu %c lan dau tien la %d",c,i+1);
           break;
             }
         }
       return 0;
    }
    Bài này return 0.

    Code:
    #include<stdio.h>
    #include<conio.h>
    void swap(int *a,int *b);
    void main()
    {
    int x=3,y=4;
    clrscr();
    printf("truoc khi goi swap");
    printf("%4d %4d\n",x,y);
    swap(&x,&y);
    printf("Sau khi goi swap\n");
    printf("%4d %4d\n",x,y);
    getch();
    Ư
    void swap(int *a,int *b)
    {
    int temp= *a;
    *a=*b;
    *b=temp;
    }(
    Bài toán này không dùng return.

    Code:
    int maximum(int x,int y,int z)
    {
    int max=x;
    if(y>max)
    max=y;
    if(z>max)
    max=z;
    return max;
    }
    Bài này return max

  6. #6
    Ngày gia nhập
    10 2007
    Nơi ở
    Gameloft studio
    Bài viết
    175

    Mặc định Thắc mắc về hàm con

    Return thì tùy vào lúc bạn coding
    Kiểu void -> không có return.
    Kiểu int,float... -> một số bất kỳ, hoặc biến trùng kiểu của hàm.
    ...
    Tùy vào lúc bạn coding, bạn cần hàm đó trả về giá trị gì thì return giá trị đó hoặc không cần thì void. -> ok chứ
    Không biết ghi gì luôn ...

  7. #7
    Ngày gia nhập
    03 2008
    Nơi ở
    Nhà tù
    Bài viết
    37

    Trích dẫn Nguyên bản được gửi bởi Forlorn_hope Xem bài viết
    Return thì tùy vào lúc bạn coding
    Kiểu void -> không có return.
    Kiểu int,float... -> một số bất kỳ, hoặc biến trùng kiểu của hàm.
    ...
    Tùy vào lúc bạn coding, bạn cần hàm đó trả về giá trị gì thì return giá trị đó hoặc không cần thì void. -> ok chứ
    Code:
    #include<stdio.h>
    #include<conio.h>
    
    int strchr(char *s,char c, int& position);
    //void main(void) 
    int main() 
    {
      char s[80], c;
      //char i;
      int position; clrscr();
      printf("Nhap s=");
      gets(s);
      printf("Nhap c=");
     
      scanf(" %c", &c);   
    strchr(s,c, position); 
    
      if(strchr(s,c, position) != 0)
        printf("Trong chuoi s co ky tu %c: .Vi tri xh la %d:", c , position+1);
      else
        printf("Ko xh!"); getch();
    }
    int strchr(char *s, char c, int& position)
    {
      //for(char i = 1; s[i]!='\0';i++)
      for(int i = 0; s[i] != '\0'; ++i)
      {
        if(s[i] == c)
        {
          //break;
          position = i; 
          
        }
      }
     
    }
    Nhưng mà ở bài toán này em đổi kiểu int thành void và không dùng return thì nó báo lỗi.Vậy kiểu void dùng khi nào hả các anh

  8. #8
    Ngày gia nhập
    06 2007
    Nơi ở
    UIT
    Bài viết
    44

    Trích dẫn Nguyên bản được gửi bởi kegiaumat055 Xem bài viết
    Code:
    #include<stdio.h>
    #include<conio.h>
    
    int strchr(char *s,char c, int& position);
    //void main(void) 
    int main() 
    {
      char s[80], c;
      //char i;
      int position; clrscr();
      printf("Nhap s=");
      gets(s);
      printf("Nhap c=");
     
      scanf(" %c", &c);   
    strchr(s,c, position); 
    
      if(strchr(s,c, position) != 0)
        printf("Trong chuoi s co ky tu %c: .Vi tri xh la %d:", c , position+1);
      else
        printf("Ko xh!"); getch();
    }
    int strchr(char *s, char c, int& position)
    {
      //for(char i = 1; s[i]!='\0';i++)
      for(int i = 0; s[i] != '\0'; ++i)
      {
        if(s[i] == c)
        {
          //break;
          position = i; 
          
        }
      }
     
    }
    Nhưng mà ở bài toán này em đổi kiểu int thành void và không dùng return thì nó báo lỗi.Vậy kiểu void dùng khi nào hả các anh

    Ở bài toán trên khi khai báo hàm con có kiểu trả về là int vì bạn sẽ phải sử dụng kết quả trả về của nó trong hàm main. Bạn đọc code thấy
    Code:
    if(strchr(s,c, position) != 0)
        printf("Trong chuoi s co ky tu %c: .Vi tri xh la %d:", c , position+1);
      else
        printf("Ko xh!"); getch();
    ta thấy nếu mà hàm trả về kết quả khác 0 thì bạn sẽ trả về kí tự xuất hiện và vị trí của nó trong chuỗi như thế ta cần có yếu tố để xác định hàm trên có tìm được hay không như thế ta phải dùng return để xác định.

    Bạn hỏi ta dùng void khi nào thì trả lời đại loại nếu mà ở trong chương trình gọi nó phải xác định nó có chạy hay không và kết quả của nó là bao nhiêu thì ta dùng các kiẻu return khác còn nếu mà hàm chỉ dùng in ra kết quả hay truyền tham chiếu thì ta dùng void

  9. #9
    Ngày gia nhập
    03 2008
    Nơi ở
    Nhà tù
    Bài viết
    37

    Em hiểu rồi.Cảm ơn cac anh

  10. #10
    Ngày gia nhập
    04 2008
    Nơi ở
    Bốn bề là nhà
    Bài viết
    703

    Bạn chỉ cần nhớ rằng :
    -Nếu là thủ tục(giống procedure trong Pascal ) thì không có lệnh return
    -Còn nếu là hàm (giống Function trong Pascal) thì có lệnh return để trả lại kết quả.

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