Bài giảng Giới thiệu lập trình - Chương 5: Hàm cơ bản - Lê Nguyên Khôi

pdf 38 trang hoanguyen 4470
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Giới thiệu lập trình - Chương 5: Hàm cơ bản - Lê Nguyên Khôi", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pdfbai_giang_gioi_thieu_lap_trinh_chuong_5_ham_co_ban_le_nguyen.pdf

Nội dung text: Bài giảng Giới thiệu lập trình - Chương 5: Hàm cơ bản - Lê Nguyên Khôi

  1. Gi i Thi u Lp Trình Hàm – Cơ Bn TS. Lê Nguyên Khôi Tr ng Đi hc Công ngh , ĐHQGHN
  2. Ni Dung  Khái ni m chung  nh ngh a hàm  S dng hàm  Truy n tham s  Ph m vi bi n Gi i Thi u L p Trình 1
  3. Khái Ni m Chung  Gi i quy t mt bài toán ph c tp  Chia nh bài toán ban u thành bài toán nh hơn, ơ n l, d gi i quy t  X lý tng bài toán nh ln lư t  Kt hp li gi i bài toán ban u  Ngôn ng lp trình bc cao  Cung cp công c phân tách và x lý bài toán nh (kh i lp ghép - mô-un hóa ch ươ ng trình)  Li ích  Tái s dng mã, d qu n lý  Tránh các on mã gi ng nhau lp i lp li  Tìm li, g li d dàng, nhanh chóng Gi i Thi u L p Trình 2
  4. Khái Ni m Chung  Chia nh bài toán, ví du:  Cho dài 3 on th ng, 3 on th ng này to thành tam giác gì?  3 on th ng có to thành tam giác?  3 on th ng này có to thành tam giác u?  3 on th ng này có to thành tam giác cân?  3 on th ng này có to thành tam vuông?   3 on th ng này có to thành tam giác vuông cân? Gi i Thi u L p Trình 3
  5. Khái Ni m Chung  Tái s dng mã, ví du:  Tính ưc chung ln nh t ca 2 s nguyên dươ ng  Ki m tra 2 s nguyên t cùng nhau  Ti gi n phân s  Ki m tra 2 s có chia ht cho nhau Gi i Thi u L p Trình 4
  6. Hàm (Ph ơ ng Th c)  Hàm (ph ươ ng th c) là mt kh i các câu lênh (ph i) ư c t tên, th c hi n thao tác ã ư c xác nh tr ư c  Hàm là mt cách hu hi u cu trúc ch ươ ng trình và x lý:  on mã ư c dùng li nhi u ln  Hàm ã s dng  Hàm tính cn bc 2 ( sqrt(x) )  Hàm tính s m (pow(x,y))  Hàm to s ng u nhiên (rand() ) Gi i Thi u L p Trình 5
  7. Hàm – Đc Đi m  Th c hi n mt s thao tác và cung cp kt qu  Ví d: cn bc 2 ( sqrt(x) )  D li u u vào: mt s  Thao tác: tính cn bc hai  D li u tr v: cn bc hai ca s  Dng chung  Có th cn d li u u vào  Th c hi n mt s thao tác  Có th tr v d li u sau x lý  thu n ti n, các thao tác ư c t tên, tên hàm Gi i Thi u L p Trình 6
  8. Hàm – Tính  D li u u vào  2 s (int , double , ) t tên x, y  D li u tr v  1 s (int , double , ) t tên ketQua  Thao tác  Th c hi n phép nhân lp i lp li  Ví d: 2 =16=2∗2∗2∗2  Tên hàm  power Gi i Thi u L p Trình 7
  9. Đnh Nghĩa Hàm Trong C++  Cú pháp : Ki ểuDLTr ảVề TênHàm (DanhSáchDL Đầ uVào ) { // danh sách các mệnh lệnh // thân hàm }  Ki u ca d li u tr v (Ki ểuDLTr ảVề)  int , double , char ,  Nu hàm không tr v gì, ki u d li u tr v void  Tên hàm (TênHàm ): ph i có  Danh sách d li u u vào (DanhSáchDL Đầ uVào )  Danh sách tham s (tham s cng có ki u) Gi i Thi u L p Trình 8
  10. Đnh Nghĩa Hàm Trong C++ int main() { return 0; }  S dng câu lnh return tr v kt qu ca hàm  Th c hi n câu lnh return tr v kt qu ca hàm, kt thúc các thao tác ca hàm  Thông th ư ng return là câu lnh cu i cùng trong thân hàm ( nh ngh a ca hàm)  Ki u d li u tr v khi s dng câu lnh return ph i gi ng vi ki u d li u tr v ca hàm (Ki ểuDLTr ảVề) Gi i Thi u L p Trình 9
  11. Hàm – Tính int power(int x, int y) { int ketQua = 1; if (y == 0) return 1; while (y > 0) { ketQua = ketQua * x; y = y – 1; } return ketQua; }  Ví d: power(2,4) tr v kt qu 16 Gi i Thi u L p Trình 10
  12. V Trí Đt Đnh Nghĩa Hàm  Hàm ph i ư c nh ngh a tr ư c khi s dng  Thông th ư ng nh ngh a hàm t tr ư c ( trên và ngoài) int main() có th s dng trong int main() int power( ) { } int main() { = power( ); return 0; } Gi i Thi u L p Trình 11
  13. S Dng Hàm int power(int x, int y) { } int main() { int a, b; cin >> a >> b; int kq = power(a, b); cout > power(a, b); Gi i Thi u L p Trình 12
  14. S Dng Hàm int A() { B(); } int B() { A(); } int main() { return 0; }  t nh ngh a hàm nào tr ư c A hay B  Lưu ý: nh ngh a hàm A có s dng (gi) hàm B, ng ư c li, nh ngh a hàm B có s dng (gi) A hàm Gi i Thi u L p Trình 13
  15. Khai Báo – Đnh Nghĩa Hàm // khai báo hàm tr ướ c int main() int A(); int B(); int main() { return 0; } // đị nh ngh ĩa hàm sau int main() int A() { B(); } int B() { A(); }  C++ cho phép khai báo hàm tr ư c khi s dng  Sau khi khai báo hàm, nh ngh a hàm có th t bt k âu, tr ư c/sau int main()  Nên s dng cách này Gi i Thi u L p Trình 14
  16. Ch Ký Hàm // khai báo hàm tr ướ c int main() int A() ; int B() ; int main() { return 0; } // đị nh ngh ĩa hàm sau int main() int A() { B(); } int B() { A(); }  B i ph n { } ca nh ngh a hàm  B i ; ca khai báo hàm  Ph n còn li (ki u tr v, tên, danh sách tham s) ca hàm gi ng ht nhau c nh ngh a và khai báo Gi i Thi u L p Trình 15
  17. Hàm – Tính Nhân (Tr V int ) ỉ ử ụ ộ int multiply(int x, int y) { int ketQua = 0; for (int i = x; i > 0; i ) ketQua = ketQua + y; return ketQua; } int main() { int a, b; cin >> a >> b; cout << "tich 2 so la: " << multiply(a,b); return 0; } Gi i Thi u L p Trình 16
  18. Hàm – Tính Nhân (Tr V void ) ỉ ử ụ ộ void multiply(int x, int y) { int ketQua = 0; for (int i = x; i > 0; i ) ketQua = ketQua + y; cout > a >> b; multiply(a,b); return 0; } Gi i Thi u L p Trình 17
  19. Hàm – Không Có Tham S void square() { for (int i = 3; i > 0; i ) { for (int j = 3; j > 0; j ) cout > soLuong; for (int i = soLuong; i > 0; i ) square(); return 0; } Gi i Thi u L p Trình 18
  20. Hàm – Có Tham S void square(char c) { for (int i = 3; i > 0; i ) { for (int j = 3; j > 0; j ) cout > soLuong; char c; cin >> c; for (int i = soLuong; i > 0; i ) square(c); return 0; } Gi i Thi u L p Trình 19
  21. Hàm – Nhi u Tham S void square(char c, int n) { for (int i = n; i > 0; i ) { for (int j = 3; j > 0; j ) cout > cot; char c; cin >> c; for (int i = hang; i > 0; i ) square(c,cot); return 0; } Gi i Thi u L p Trình 20
  22. Xác Đnh Lo i Tam Giác  Cho dài 3 on th ng, 3 on th ng này to thành tam giác gì?  3 on th ng có to thành tam giác?  3 on th ng này có to thành tam giác u?  3 on th ng này có to thành tam giác cân?  3 on th ng này có to thành tam vuông?   3 on th ng này có to thành tam giác vuông cân? Gi i Thi u L p Trình 21
  23. Xác Đnh Lo i Tam Giác ạ a bool laTamGiac(double a, double b, double c) { return (a < b + c && b < c + a && c < a + b); } int main() { return 0; } Gi i Thi u L p Trình 22
  24. Xác Đnh Lo i Tam Giác ạ a ề bool laTamGiacD(double a, double b, double c) { return (a == b && b == c); } int main() { return 0; } Gi i Thi u L p Trình 23
  25. Xác Đnh Lo i Tam Giác ạ a bool laTamGiacC(double a, double b, double c) { return (a == b || b == c || c == a); } int main() { return 0; } Gi i Thi u L p Trình 24
  26. Xác Đnh Lo i Tam Giác ạ a bool laTamGiacV(double a, double b, double c) { double sqrCanhA = a * a; double sqrCanhB = b * b; double sqrCanhC = c * c; return (sqrCanhA == sqrCanhB + sqrCanhC || sqrCanhB == sqrCanhC + sqrCanhA || sqrCanhC == sqrCanhA + sqrCanhB); } int main() { return 0; } Gi i Thi u L p Trình 25
  27. Xác Đnh Lo i Tam Giác ạ a bool laTamGiacVC(double a, double b, double c) { return (laTamGiacV(a, b, c) && laTamGiacC(a, b, c)); } int main() { return 0; } Gi i Thi u L p Trình 26
  28. Xác Đnh Lo i Tam Giác  Cho dài 3 on th ng, 3 on th ng này to thành tam giác gì?  3 on th ng có to thành tam giác?  3 on th ng này có to thành tam giác u?  3 on th ng này có to thành tam giác cân?  3 on th ng này có to thành tam vuông?  3 on th ng này có to thành tam giác vuông cân?  Suy lu n lô-gic:  Có cn ki m tra là tam giác tr ư c khi xác nh lo i ca tam giác không? Gi i Thi u L p Trình 27
  29. Nh p 2 S Nguyên Dơ ng int main() { int a, b; do { cin >> a; } while (a > b; } while (b <= 0); return 0; } Gi i Thi u L p Trình 28
  30. Nh p 2 S Nguyên Dơ ng void nhapSoND(int soND) { do { cin >> soND; } while (soND <= 0); } int main() { int a, b; nhapSoND(a); nhapSoND(b); return 0; }  Ch ươ ng trình ch y không úng, giá tr nh p vào không ư c gán cho bi n, các bi n ch ưa ư c nh p d li u  Do cách truy n tham s ch ưa úng Gi i Thi u L p Trình 29
  31. Truy n Tham S Cho Hàm  Truy n giá tr :  Bn sao giá tr ca bi n ư c truy n vào hàm  Hàm x lý d li u trên bn sao này  Không làm thay i giá tr ca bi n truy n vào hàm  Dùng trong tr ư ng hp tính toán  Truy n tham chi u  Hàm x lý d li u ca chính bi n truy n vào hàm  Có th thay i giá tr ca bi n  Dùng trong tr ư ng hp cn chuy n d li u sau khi ã x lý ra ngoài hàm, cho các hàm khác s dng Gi i Thi u L p Trình 30
  32. Truy n Tham S Cho Hàm ề ị void nhapSoND(int soND) { do { cin >> soND; } while (soND <= 0); } int main() { int a; nhapSoND(a); return 0; }  Bn sao giá tr ca bi n a ư c to ra và truy n  Vào trong hàm nhapSoND , giá tr này ư c gán cho bi n soND  Thay i giá tr bi n soND trong hàm nhapSoND ,  Kt thúc hàm nhapSoND , giá tr ca bi n soND thay i  Nh ưng giá tr bi n a không thay i Gi i Thi u L p Trình 31
  33. Truy n Tham S Cho Hàm ề a ế void nhapSoND(int & soND) { do { cin >> soND; } while (soND <= 0); } int main() { int a; nhapSoND(a); return 0; }  Chính bi n a ư c truy n vào trong hàm nhapSoND  Nh ưng ư c lưu dư i mt tên khác (soND ) trong hàm nhapSoND  Thay i giá tr bi n soND trong hàm nhapSoND  S làm thay i giá tr bi n a trong hàm main  Do th c ch t là mt bi n, vi tên khác nhau, trong hàm main là a, trong hàm nhapSoND là soND Gi i Thi u L p Trình 32
  34. Hàm – Tính Nhân (Tr V void ) ử ụ ề a ế tich void multiply(int x, int y, int & ketQua) { ketQua = 0; for (int i = x; i > 0; i ) ketQua = ketQua + y; } int main() { int a, b, tich; cin >> a >> b; multiply(a, b, tich); cout << "tich 2 so la: " << tich; return 0; } Gi i Thi u L p Trình 33
  35. Mt S Nguyên Tc  Tt c các hàm trong C++ u ngang cp  Hàm không ư c khai báo lng vi nhau  Th t khai báo không quan tr ng  Hàm có th nh n và x lý nhi u tham s ho c không có tham s nào  Hàm có th tr v mt (ho c không ) giá tr  Ph i truy n y s lư ng tham s và úng ki u khi gi hàm, nu không s li dch  Bi n khai báo trong hàm nào ch có ph m vi trong hàm ó, không s dng ư c nh ng bi n này trong các hàm khác Gi i Thi u L p Trình 34
  36. Quy Tc Ph m Vi  Ph m vi ư c xác nh bt u t { n }  ư c áp dng hàm ( nh ngh a hàm), các cu trúc iu khi n (thân cu trúc) và các kh i lnh {}  Bi n ư c khai báo trong ph m vi nào ch có th ư c s dng trong ph m vi ó  Kt thúc mt ph m vi ( }), tt c các bi n va ư c khai báo trong ph m vi ó s b xóa  Có th khai báo các bi n cùng tên trong các ph m vi khác nhau  Các bi n này là bi n cc b  Duy trì iu khi n trong ni b ph m vi Gi i Thi u L p Trình 35
  37. Quy Tc Ph m Vi  Ph m vi toàn cc  Bi n ư c khai báo bên ngoài main , và ngoài tt c các hàm  Bi n này s ư c hi u và có th dùng mi nơi trong ch ươ ng trình  Hn ch dùng, d gây li không áng có khi thay i giá tr bi n không cn th n  Th ư ng khai báo hng s có ph m vi toàn cc mi hàm u hi u Gi i Thi u L p Trình 36
  38. Tham Kh o  c sách:  Ch ươ ng 4, Lp Trình Cơ Bn C++ Gi i Thi u L p Trình 37