Bài giảng Cơ sở lập trình - Chương 6 cung cấp các kiến thức cơ bản về hàm và đệ quy. Nội dung cụ thể được trình bày trong chương này gồm có: Cơ bản về hàm, truyền tham số, các đặc tính mới về hàm trong C#, các dạng hàm Main, đệ quy. Mời các bạn cùng tham khảo.
Hàm v 1.0 - 10/2012 Lê Viết Mẫn - lvman@hce.edu.vn Monday, September 9, 13 Hàm học Tuần tự Lê Viết Mẫn - lvman@hce.edu.vn Monday, September 9, 13 Rẽ nhánh Lặp Câu lệnh if, switch Câu lệnh for, while, Hàm using System; namespace ConsoleApplication { class Program { static void Main(string[] args) { } } Tồn } • code viết Khó để xử lý toán lớn, phức tạp Lê Viết Mẫn - lvman@hce.edu.vn Monday, September 9, 13 Hàm Nội dung Hàm 1.1 Cơ hàm 1.2 Truyền tham số 1.3 Các đặc tính hàm C# 1.4 Các dạng hàm Main Đệ qui Lê Viết Mẫn - lvman@hce.edu.vn Monday, September 9, 13 Hàm Cơ Hàm Function Lê Viết Mẫn - lvman@hce.edu.vn Monday, September 9, 13 Hàm Hàm (1/3) • Kỹ thuật cho phép chia nhỏ chương trình lớn nhiều chương trình nhỏ • • • Module hóa chương trình - hàm đảm nhiệm vài chức chương trình Ví dụ : tiền tệ Mỹ • • • Input Output Xử lý Lợi ích : • • • Giảm nhẹ công việc cho người lập trình • viết chương trình nhỏ gỡ lỗi chúng, sau lắp chương trình thành chương trình Giảm đoạn mã nguồn lặp lại Sử dụng lại mã nguồn nhiều chương trình Lê Viết Mẫn - lvman@hce.edu.vn Monday, September 9, 13 Hàm Hàm (2/3) • int a = 100; int b = 25; Khi sử dụng hay gọi, hàm xử lý hộp đen • • • Lê Viết Mẫn - lvman@hce.edu.vn Monday, September 9, 13 Người sử dụng quan tâm làm gì, khơng quan tâm làm (hiệu năng, lỗi, ) • Console.WriteLine Nguyên mẫu hàm mô tả cách kết nối với gọi Các tham số hàm nhận • • • Hằng Biến Biểu thức Hàm Hàm (3/3) Lời gọi hàm phải tương ứng với định nghĩa hàm Lời gọi hàm câu lệnh Việc thực thi chương trình tiếp tục câu lệnh theo sau lời gọi hàm Lê Viết Mẫn - lvman@hce.edu.vn Monday, September 9, 13 Hàm Định nghĩa hàm • • • type - kiểu giá trị trả • name - tên hàm • tuân thủ cách đặt tên định danh arguments - danh sách tham số • • • khơng trả liệu sử dụng void danh sách tên tham số kiểu liệu tham số, cách dấu phẩy tham số có tên đặt tên theo quy tắc đặt tên biến statements - thân hàm • • static type name(arguments) { statements } static int addition(int a, int b) { return a + b; } Biến địa phương Định nghĩa hàm phạm vi lớp Program, phạm vi hàm Main Các câu lệnh Lê Viết Mẫn - lvman@hce.edu.vn Monday, September 9, 13 Hàm Cách đặt tên hàm • • • Sử dụng ký hiệu Pascal để đặt tên hàm • Viết hoa ký tự từ Add, IndexOf, RemoveAll Nên dùng động từ cụm động từ để đặt tên cho hàm Đặc biệt, hàm có • • • • kiểu trả void nên bắt đầu động từ kiểu trả bool nên Is IsActivated tên Get để lấy liệu (từ người sử dụng) GetDataFormFile tên Set để gán liệu Lê Viết Mẫn - lvman@hce.edu.vn Monday, September 9, 13 PrintResults 10 SetName Hàm Chồng hàm • • Các hàm có tên (do người sử dụng cung cấp) Phải có danh sách tham số riêng • Khác số lượng tham số F(void), F(int i), F(int i, int j) • Khác kiểu tham số F(int i), F(string s), F(double d) • Khác kiểu tham số vị trí tương ứng G(int i, string s), G(string s, int i) • • Nên có cách sử dụng tương tự Không nên (không thể) chồng hàm dựa kiểu trả Lê Viết Mẫn - lvman@hce.edu.vn Monday, September 9, 13 39 Hàm Hàm Main Lê Viết Mẫn - lvman@hce.edu.vn Monday, September 9, 13 40 Hàm Các dạng hàm Main static void Main(string[] args) { } static void Main() { } static int Main(string[] args) { return 0; } static int Main() { return 0; } Lê Viết Mẫn - lvman@hce.edu.vn Monday, September 9, 13 41 Hàm Đệ qui Lê Viết Mẫn - lvman@hce.edu.vn Monday, September 9, 13 42 Hàm Hàm đệ qui • • • • • Đệ qui kỹ thuật mà hàm gọi lại Đệ qui trực tiếp : hàm gọi lại Đệ qui gián tiếp : A gọi B, B gọi C, C gọi A Phải có đặc tính : • • • Một nhánh để thực lời gọi đệ quy (thường lệnh if) Một nhánh để kết thúc đệ quy (thường lệnh if) Đầu vào phải thay đổi với lời gọi Về mặt lý thuyết, đệ qui viết vòng lặp Lê Viết Mẫn - lvman@hce.edu.vn Monday, September 9, 13 43 Hàm Ví dụ - in số static void Forward(int number) { ! if (number != 0) ! { ! ! Forward(number / 10); ! ! Console.Write(number % 10); ! } } Lê Viết Mẫn - lvman@hce.edu.vn Monday, September 9, 13 static void Reverse(int number) { ! if (number != 0) ! { ! ! Console.Write(number % 10); ! ! Reverse(number / 10); ! } } 44 Hàm Ví dụ - in số number == number == number == Forward(0) Write(1) number == Write(1) Reverse(0) number == 12 Forward(1) Write(2) number == 12 Write(2) Reverse(1) number == 123 Forward(12) Write(3) number == 123 Write(3) Reverse(12) Gọi lần Gọi lần Gọi lần Gọi lần Forward Lê Viết Mẫn - lvman@hce.edu.vn Monday, September 9, 13 Reverse 45 Hàm Ví dụ - tính giai thừa Viết chương trình tính n! (n giai thừa) ⎧ n=0 n! = ⎨ ⎩ 1* * * n n ≥ Lê Viết Mẫn - lvman@hce.edu.vn Monday, September 9, 13 46 Hàm using System; namespace Factorial { class Program { static void Main(string[] args) { int product = 1; int n; ! Console.Write("CALCULATE FACTORIAL OF A NUMBER\n\n"); ! Console.Write("Enter a number : "); n = int.Parse(Console.ReadLine()); ! for (int i = 2; i