Bài giảng Hàm và kỹ thuật tổ chức chương trình - Các vấn đề mở rộng nghề nghiệp cung cấp cho người học các kiến thức: Các vấn đề tìm hiểu mở rộng kiến thức nghề nghiệp, thuật ngữ và bài đọc thêm tiếng Anh. Mời các bạn cùng tham khảo.
Nhập mơn lập trình Trình bày: Nguyễn Sơn Hồng Quốc Email: nshquoc@fit.hcmus.edu.vn CuuDuongThanCong.com https://fb.com/tailieudientucntt Nội dung Các vấn đề tìm hiểu mở rộng kiến thức nghề nghiệp Thuật ngữ đọc thêm tiếng Anh CuuDuongThanCong.com https://fb.com/tailieudientucntt CuuDuongThanCong.com https://fb.com/tailieudientucntt Hàm trùng tên • Nhu cầu – Thực công việc với nhiều cách khác Nếu hàm khác tên khó nhớ • Ví dụ: – Các hàm tính trị tuyệt đối C (math.h) • int abs(int n); • long labs(long n); • double fabs(double n); – Các hàm tính bậc 2: sqrt(), sqrtf() CuuDuongThanCong.com https://fb.com/tailieudientucntt Hàm trùng tên • Khái niệm – Là hàm tên có tham số đầu vào kiểu trả khác nhằm cho phép người dùng chọn cách thuận lợi để thực công việc – Nguyên mẫu hàm bỏ tên tham số phải khác – Việc sử dụng hàm trùng tên gọi nạp chồng hay tải (overload) hàm CuuDuongThanCong.com https://fb.com/tailieudientucntt Ví dụ hàm trùng tên // prints integers from to n void PrintIntegers(int n); // prints integers from x to y void PrintIntegers(int x, int y); // prints integers from x to y // with an arithmetic progression a void PrintIntegers(int x, int y, int a); CuuDuongThanCong.com https://fb.com/tailieudientucntt Chú ý hàm trùng tên • Các hàm sau nguyên mẫu hàm: int Sum(int, int); // calculates a + b int Sum(int a, int b); // calculates b + a int Sum(int b, int a); // calculates x + y int Sum(int x, int y); CuuDuongThanCong.com https://fb.com/tailieudientucntt Sự nhập nhằng, mơ hồ float f(float x) { return x/2; } double f(double x) { return x/2; } void main() { float x = 29.12; double y = 17.06; printf("%.2f\n", f(x)); printf("%.2lf\n", f(y)); printf("%.2f\n", f(10)); printf("%.2f\n", f((float)10)); 10.} // // // // float double ??? float CuuDuongThanCong.com https://fb.com/tailieudientucntt Sự nhập nhằng, mơ hồ void f(unsigned char c) { printf("%d", c); } void f(char c) { printf("%c", c); } void main() { f(‘A’); f(65); f((char)65); f((unsigned char)65); } // // // // char ??? char unsigned char CuuDuongThanCong.com https://fb.com/tailieudientucntt Sự nhập nhằng, mơ hồ int f(int a, int b) { return a + b; } int f(int a, int &b) { return a + b; } void main() { int x = 1, y = 2; printf("%d", f(x, 2)); printf("%d", f(x, y)); } // b = // ??? 10 CuuDuongThanCong.com https://fb.com/tailieudientucntt Sự nhập nhằng, mơ hồ int f(int a) { return a*a; } int f(int a, int b = 1) { return a*b; } void main() { printf("%d\n", f(2912, 1706)); printf("%d\n", f(2912)); } // ??? 11 CuuDuongThanCong.com https://fb.com/tailieudientucntt Hàm có đối số mặc định • Khái niệm – Là hàm có hay nhiều tham số hình thức gán sẵn giá trị mặc định Các tham số nhận giá trị mặc định khơng có đối số tương ứng truyền vào – Các tham số mặc định phải dồn tận bên phải • Ví dụ void PrintFraction(int num, int denom = 1); 12 CuuDuongThanCong.com https://fb.com/tailieudientucntt Hàm có đối số mặc định • Lưu ý: – Muốn truyền đối số khác thay cho đối số mặc định, phải truyền đối số thay cho đối số mặc định trước • Ví dụ: void SolveEq2(int a, int b = 0, int c = 0); • Giải phương trình: 2𝑥 + 0𝑥 + = – Sai: SolveEq2(2, 3); // a=2, b=3, c=0 – Đúng: SolveEq2(2, 0, 3); // a=2, b=0, c=3 13 CuuDuongThanCong.com https://fb.com/tailieudientucntt Hàm có đối số mặc định • Lưu ý: – Nếu 𝑥 = 𝑎 thường xuyên xảy nên chuyển 𝑥 thành tham số có đối số mặc định 𝑎 Ví dụ, 𝐺𝑒𝑛𝑑𝑒𝑟 = (Nam), 𝐴𝑔𝑒 = 18 – Nếu 𝑥 = 𝑎 𝑦 = 𝑏 thường xuyên xảy 𝑦 = 𝑏 thường xuyên nên đặt tham số mặc định 𝑦 sau 𝑥 Ví dụ, lớp học 𝐴𝑔𝑒 = 18 xảy nhiều 𝐺𝑒𝑛𝑑𝑒𝑟 = nên đặt 𝐴𝑔𝑒 sau 14 𝐺𝑒𝑛𝑑𝑒𝑟 CuuDuongThanCong.com https://fb.com/tailieudientucntt Hàm có tham số hàm • Khái niệm – Hàm truyền vào hàm khác dạng đối số đầu vào – Việc khai báo tham số hàm tương tự khai báo nguyên mẫu hàm (không cần tên tham số hình thức) – Chỉ phép truyền hàm có nguyên mẫu hàm (sau bỏ tên tham số hình thức) giống với nguyên mẫu hàm tham số hình thức hàm khai báo 15 CuuDuongThanCong.com https://fb.com/tailieudientucntt Ví dụ hàm có tham số hàm int FindBestNumber(int a, int b, int Better(int, int)) { int numBest = a; if (Better(b, a)) { numBest = b; } return numBest; } int MaxNumber(int x, int y) { return x > y; } int MinNumber(int x, int y) { return x < y; } 16 CuuDuongThanCong.com https://fb.com/tailieudientucntt Ví dụ hàm có tham số hàm int FindBestNumber(int a[], int n, int Better(int, int)) { int i, idBest = 0; for (i = 1; i < n; i++) { if (Better(a[i], a[idBest])) idBest = id; } return a[idBest]; } int MaxNumber(int x, int y) { return x > y; } 10.int MinNumber(int x, int y) { return x < y; } 17 CuuDuongThanCong.com https://fb.com/tailieudientucntt Hàm đệ qui • Khái niệm – Đệ qui tình mà hàm gọi theo cách trực tiếp hay gián tiếp • Ví dụ – Tính giai thừa: 𝑛! = 𝑛 ∗ (𝑛 − 1) ∗ ⋯ ∗ ∗ – Do (𝑛 − 1) ∗ ⋯ ∗ ∗ = (𝑛 − 1)! ⇒ 𝑛! = 𝑛 ∗ (𝑛 − 1) – Tương tự (𝑛 − 1)! = (𝑛−)! ∗ (𝑛 − 1) – Tiếp tục tính 1! ta có kết 1, ngược lại tính 𝑛! 18 CuuDuongThanCong.com https://fb.com/tailieudientucntt Ví dụ hàm đệ qui • Khai báo hàm: unsigned int factorial(unsigned int n); • Định nghĩa hàm: unsigned int factorial(unsigned int n) { if (n == 1) return 1; else return n * factorial(n – 1); } 19 CuuDuongThanCong.com https://fb.com/tailieudientucntt So sánh với NNLT khác Tiêu chí so sánh/Ngơn ngữ C C++ C# Java Khai báo hàm độc lập với thành phần khác (kiểu sở) (sử dụng &) (sử dụng từ khóa ref, out) (đối tượng mảng) Tham số có giá trị mặc định Hàm trùng tên (nạp chồng hàm) Khai báo hàm (phương thức) lớp đối tượng (class) Truyền giá trị (tham trị) Truyền địa Truyền biến (tham biến/tham chiếu) 20 CuuDuongThanCong.com https://fb.com/tailieudientucntt 21 CuuDuongThanCong.com https://fb.com/tailieudientucntt Thuật ngữ tiếng Anh • • • • • • • • • • • function: hàm (chương trình con) structured programming: lập trình cấu trúc modular programming: lập trình đơn thể parameter: tham số argument : đối số formal parameter: tham số hình thức, tương đương với parameter actual parameter: tham số thực, tương đương với argument function prototype: nguyên mẫu hàm function header: tiêu đề hàm function declaration: khai báo hàm function definition: định nghĩa hàm 22 CuuDuongThanCong.com https://fb.com/tailieudientucntt Thuật ngữ tiếng Anh • • • • • • • • • local variable: biến cục extern varialbe: biến global variable: biến toàn cục, tương tự extern variable call by value: truyền đối số giá trị (tham trị) call by reference: truyền đối số tham (tham chiếu) scope: tầm vực, phạm vi hiệu recursion: đệ qui overload: nạp chồng, tải ambiguity: nhập nhằng, mơ hồ biến 23 CuuDuongThanCong.com https://fb.com/tailieudientucntt Bài đọc thêm tiếng Anh • Bradley L Jones and Peter Aitken, Teach Yourself C in 21 days, 6th Edition, SAMS, 2003 – Day Packaging Code in Functions, pp 97-122 – Day 12 Understanding Variable Scope, pp 285-303 – Day 21 Advanced Compiler Use – Programming with Multiple Source-Code Files, pp 593-600 • Bjarne Stroustrup, The C++ Programming Language, 3rd Edition, AT&T, 1997 – Chapter Functions, pp 143-164 – Chapter Source Files and Programs, pp 197-220 24 CuuDuongThanCong.com https://fb.com/tailieudientucntt ... Packaging Code in Functions, pp 9 7-1 22 – Day 12 Understanding Variable Scope, pp 28 5-3 03 – Day 21 Advanced Compiler Use – Programming with Multiple Source-Code Files, pp 59 3-6 00 • Bjarne Stroustrup,... Thuật ngữ tiếng Anh • • • • • • • • • • • function: hàm (chương trình con) structured programming: lập trình cấu trúc modular programming: lập trình đơn thể parameter: tham số argument : đối số... hiệu recursion: đệ qui overload: nạp chồng, tải ambiguity: nhập nhằng, mơ hồ biến 23 CuuDuongThanCong.com https://fb.com/tailieudientucntt Bài đọc thêm tiếng Anh • Bradley L Jones and Peter Aitken,