1 / 39

CHƯƠNG 6 HÀM (FUNCTION)

CHƯƠNG 6 HÀM (FUNCTION). 1. KHÁI NiỆM. Hàm là một khối lệnh thực hiện một công việc hoàn chỉnh (module), được đặt tên và được gọi thực thi nhiều lần tại nhiều vị trí trong chương trình. Hàm còn gọi là chương trình con ( subroutine ). 1. KHÁI NiỆM. Có hai lọai hàm:

Download Presentation

CHƯƠNG 6 HÀM (FUNCTION)

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. CHƯƠNG 6HÀM (FUNCTION)

  2. 1. KHÁI NiỆM • Hàm là một khối lệnh thực hiện một công việc hoàn chỉnh (module), được đặt tên và được gọi thực thi nhiều lần tại nhiều vị trí trong chương trình. • Hàm còn gọi là chương trình con (subroutine)

  3. 1. KHÁI NiỆM • Có hai lọai hàm: • Hàm thư viện: là những hàm đã được xây dựng sẵn. Muốn sử dụng các hàm thư viện phải khai báo thư viện chứa nó trong phần khai báo #include. • Hàm do người dùng định nghĩa.

  4. 1. KHÁI NiỆM • Hàm có thể được gọi từ chương trình chính (hàm main) hoặc từ 1 hàm khác. • Hàm có giá trị trả về hoặc không. Nếu hàm không có giá trị trả về gọi là thủ tục (procedure)

  5. 2. DẠNG TỔNG QUÁT CỦA HÀM • Dạng tổng quát của hàm do người dùng định nghĩa: returnType functionName(parameterList) { body of the function }

  6. 2. DẠNG TỔNG QUÁT CỦA HÀM • returnType: Kiểu dữ liệu của giá trị trả về bởi hàm. Nếu hàm không trả về giá trị thì returnType là void • functionName: Tên hàm. • parameterList: Danh sách các tham số hình thức phân cách nhau bởi dấu phẩy..

  7. VÍ DỤ int max(int a, int b) { if(a<b) return b; else return a; }

  8. 3. GỌI HÀM • Một hàm khi đã định nghĩa nhưng chúng vẫn chưa được thực thi, hàm chỉ được thực thi khi trong chương trình có một lời gọi đến hàm đó. • Cú pháp gọi hàm: <Tên hàm>([Danh sách các tham số])

  9. VÍ DỤ • Gọi hàm trong chương trình chính: void main() { int a, b; cout<<” a=“; cin>>a; cout<<”b=“; cin>>b; cout<<”so lon nhat la:”<<max(a, b); }

  10. 4. NGUYÊN TẮC HOẠT ĐỘNG CỦA HÀM • Hàm có thể được gọi từ nhiều chỗ khác nhau trong chương trình. • Khi hàm được gọi, khối lệnh tương ứng của hàm được thực thi. • Sau khi thực hiện xong, quyền điều khiển được trả về cho chương trình gọi.

  11. void main() { int a, b, USC; cout<<“Nhap a,b: ”; cin>>a>>b; USC = uscln(a,b); cout<<“Uoc chung lon nhat la: ”, USC); } int uscln(int a, int b) { a=abs(a); b=abs(b); while(a!=b) { if(a>b) a-=b; else b-=a; } return a;} 4. NGUYÊN TẮC HOẠT ĐỘNG CỦA HÀM

  12. 5. THAM SỐ HÌNH THỨC &THAM SỐ THỰC • Khi hàm cần nhận đối số (arguments) để thực thi thì khi khai báo hàm cần khai báo danh sách các tham số để nhận giá trị từ chương trình gọi. Các tham số này được gọi là tham số hình thức.

  13. 5. THAM SỐ HÌNH THỨC &THAM SỐ THỰC • Ví dụ: int min(int a, int b) { if(a<b) return a; else return b; } Tham số hình thức

  14. 5. THAM SỐ HÌNH THỨC &THAM SỐ THỰC • Khi gọi hàm, ta cung cấp các giá trị thật, các giá trị này sẽ được sao chép vào các tham số hình thức và các giá trị thật được gọi là tham số thực. Ví dụ: Để tìm giá trị nhỏ nhất của 2 số 5 và 6 ta gọi hàm min(5, 6) Tham số thực min(int a, int b)

  15. 5. THAM SỐ HÌNH THỨC &THAM SỐ THỰC • Có hai cách truyền đối số vào tham số hình thức: • Truyền tham trị • Truyền tham biến.

  16. 5. THAM SỐ HÌNH THỨC &THAM SỐ THỰC • Truyền tham trị (call by value) • Sao chép giá trị của đối số vào tham số hình thức của hàm. • Những thay đổi của tham số không ảnh hưởng đến giá trị của đối số.

  17. 5. THAM SỐ HÌNH THỨC &THAM SỐ THỰC Ví dụ: void double(int a) { a = a*2; cout << “gia tri cua a trong ham double:“<< a; }

  18. 5. THAM SỐ HÌNH THỨC &THAM SỐ THỰC void main() { int a=40; double(a); cout << “\n Gia tri cua a trong ham main: ”; cout << “a = “ << a << endl; }

  19. 5. THAM SỐ HÌNH THỨC &THAM SỐ THỰC void main() { int a=40; double(a); cout<<“\n Gia tri cua a trong ham main: ”; cout << “a = “ << a << endl; } void double( int a ) { a = a *2; cout << “Gia tri cua a trong ham double:“<< a; } 40 a=40*2; Gia tri cua a trong ham double: 80 Gia tri cua a trong ham main: 40 Gia tri cua a trong ham double: 80

  20. 5. THAM SỐ HÌNH THỨC &THAM SỐ THỰC • Truyền tham chiếu (call by reference) • Sao chép địa chỉ của đối số vào tham số hình thức. Do đó, những thay đổi đối với tham số sẽ có tác dụng trên đối số. Ví dụ: Khi gọi hàm double(&a); Địa chỉ của a truyền vào cho tham số hình thức của hàm: double(int*b)

  21. 5. THAM SỐ HÌNH THỨC &THAM SỐ THỰC void double(int *b) { *b *= 2; cout << “Trong hàm double a = “ << *b; }

  22. 5. THAM SỐ HÌNH THỨC &THAM SỐ THỰC void main() { int a=40; double(&a); cout << “\Trong ham main : a = “ << a ; } void double( int *b) { *b *= 2; cout << “Tronghàm double a = “ << *b; } a 40 80 100 100 Tronghàm double a = 80 Tronghàm double a = 80 Tronghàm main a = 80 b

  23. 5. THAM SỐ HÌNH THỨC &THAM SỐ THỰC void main() { int a = 20, b = 40; int *pa =&a, *pb=&b; swap(pa,pb); cout << “sau khi goi swap: “; cout << “a = “ << a << endl; cout << “b = “ << b << endl; }

  24. 5. THAM SỐ HÌNH THỨC &THAM SỐ THỰC void swap(int *a, int *b) { int temp; temp = *a; *a = *b; *b = temp; }

  25. 6. PROTOTYPE (NGUYÊN MẪU)CỦA HÀM • Dùng để loại trừ việc bắt buộc phải định nghĩa hàm trước khi gọi. • Prototype khai báo giống như header của hàm Ví dụ: Header : void dispayMessage() Prototype : void dispayMessage()

  26. 6. PROTOTYPE (NGUYÊN MẪU)CỦA HÀM • Chươngtrìnhbắtbuộcphảicó prototype củahàmhoặcphảibắtbuộcviếtđịnhnghĩacủahàmtrướckhigọi. • Saukhiđãsửdụng prototype củahàm, tacóthểviếtđịnhnghĩa chi tiếthàm ở bấtkỳvịtrínàotrongchươngtrình.

  27. VÍ DỤ #include <iostream.h>// Khai báo thư viện iostream.h int max(int x, int y);// khai báo nguyên mẫu hàm max void main()//hàm main (sẽ gọi các hàm thực hiện) { int a, b;// khai báo biến cout<<” Nhap vao 2 so a, b "; cin>>a>>b; cout<<”so lon nhat la:”<< max(a,b); } int max(int x, int y)// Định nghĩa hàm max(a,b) { return (x>y) ? x:y; }

  28. 6. Truyền mảng vào hàm • Khi một mảng được dùng như một đối số để truyền cho hàm, địa chỉ của mảng được truyền vào tham số hình thức. • Như vậy, truyền mảng vào hàm mặc định là truyền tham chiếu. • Những thay đổi đến giá trị của các phần tử mảng trong thân hàm sẽ ảnh hưởng đến mảng gốc.

  29. VÍ DỤ: void change(int a[], int n) { for(int i=0 ; i<n ; i++) if(a[i] < 0) a[i]=0; else a[i] = 1; }

  30. 7.Đối số của hàm main • Đối số truyền vào cho tham số của hàm main còn gọi là đối số dòng lệnh (command line arguments). • Hàm main có 2 tham số là argv và argc dùng để nhận các đối số dòng lệnh. int main(int argc, char *argv[]) { return 0;}

  31. 7.Đối số của hàm main • Tham số argc là một biến nguyên giữ số đối số có trong dòng lệnh. • Tham số argv là một mảng con trỏ char. Mỗi phần tử của mảng này trỏ đến một đối số dòng lệnh. Tất cả đối số dòng lệnh là chuổi (string).

  32. Ví dụ: int main(int argc, char *argv[]) { if(argc!=2) { cout << “Hello, “ << argv[1]; exit(1); } return 0; }

  33. 8. Lệnh return • 8.1. Cách dùng thứ nhất (kết thúc hàm) Có hai cách để kết thúc sự thực thi của hàm và trả điều khiển về chương trình gọi nó. • Khi lệnh cuối cùng có trong hàm được thực thi. • Khi hàm thực hiện câu lệnh return

  34. Ví dụ: In các phần tử của mảng đến khi gặp phần tử có giá trị âm int main() { int a[] = {3,2,1,0,-1,-2,-3}; for(int i=0 ; i<7 ; i++) { if(a[i] < 0) return 0; cout << a[i] << “\t”; } }

  35. 8. Lệnh return • 8.2. Cách dùng thứ hai (trả về một giá trị) • Lệnh return cho phép một hàm trả về một giá trị cho thành phần gọi nó. • Cú pháp: return biểu thức;

  36. 8. Lệnh return • Trong đó biểu thức chỉ rõ giá trị được trả về bởi hàm. Kiểu của giá trị này phải hợp với kiểu trả về của hàm. • Trường hợp kiểu trả về của hàm là void,biểu thức sau lệnh return rỗng: return;

  37. 9. ĐỆ QUI • Một hàm được gọi là đệ qui nếu một lệnh trong thân hàm gọi đến chính hàm đó. • Ví dụ: Định nghĩa giai thừa của một số nguyên dương n như sau: n!=1* 2 * 3 *…* (n-1) *n = (n-1)! *n (với 0!=1)

  38. 9. ĐỆ QUI int giaiThua(int n) { int gt; if(n==1) return(1); gt = giaiThua(n-1)*n; // goi de qui return gt; }

  39. 9. ĐỆ QUI unsigned int giaithua_khongdequy(int n) { unsigned int kq, i; kq=1; for (i=2;i<=n;i++) kq=kq*i; return kq; }

More Related