V. Kiểu dữ liệu có cấu trúc 5.1 Tệp định kiểu
Chươn gI Chương trình con
1. Chương trình con và vai trò
CTCon là dãy lệnh được xây dựng cho máy tính nhằm hoàn thành 1 công việc nào đấy
Vai trò
Phân rã bài toán phức tạp -> bài toán nhỏ
Nâng cao tính độc lập của công việc thiết kế, che giấu nội tại
Thực hiện lập trình Top-down
Xây dựng được thư viện lập trình, kế thừa kết quả, giảm chi phí
Chương I Chương trình con
2. Khai báo chương trình con a. Thủ tục
Là CTCon nhằm thực hiện 1 công việc nào đấy Procedure Tên_thủ_tục(D/S các tham số); Begin
{Thân Thủ tục} End;
Tham số có kiểu dữ liệu bất kỳ đã được định nghĩa phải được khai báo qua tên (alias) bằng từ khóa Type
Chương I Chương trình con
2. Khai báo chương trình con
b. Hàm
Là CTCon tính toán và trả về giá trị nào đó
Function Tên_Hàm(D/S các tham số):Kiểu dữ liệu;
Begin
{Thân Hàm}
Tên_Hàm:=Giá_trị; End;
Chú ý: Kiểu dữ liệu trả về không được là record, array
Chương I Chương trình con
2. Khai báo chương trình con c. Sử dụng CTCon
Để sử dụng CTCon, thực hiện lời gọi tới CTCon ở trong thân CTChính
Lời gọi hàm
Tên_hàm (D/S tham số thực);
Lời gọi thủ tục
Chương I Chương trình con
2. Khai báo chương trình con d. Ví dụ
Hàm tính USCLN không đệ quy
Chương I Chương trình con
3. Địa phương và Toàn cục
Toàn cục (Global)
Địa phương (Local)
Là k/n tương đối: cấp phát bộ nhớ cho các đối tượng khác nhau là độc lập, 2 đối tượng cùng tên có thể nằm ở 2 khối khác nhau
Chương I Chương trình con
3. Địa phương và Toàn cục
Ví dụ
Khai báo lỗi
Chương I Chương trình con
4. Cách dùng tham số
Vai trò
Tham số hình thức: Dùng khi định nghĩa CTCon
Tham số thực: Dùng để truyền giá trị khi thực hiện lời gọi CTCon trong thân CTChính
Chương I Chương trình con
4. Cách dùng tham số a. Truyền theo trị
Không sử dụng từ khóa Var
Truyền tham số theo trị được thực hiện qua bản sao
Không ảnh hưởng tới giá trị biến được truyền
Tốn ít bộ nhớ và thời gian cho việc sao chép
Cho phép giá trị ở đầu vào có thể là những giá trị của hằng, biến, hàm hoặc biểu thức
Chương I Chương trình con
4. Cách dùng tham số b. Truyền theo biến
Sử dụng từ khóa Var
Thực hiện vào chính địa chỉ của biến được truyền
Nếu có lệnh làm thay đổi giá trị của tham số thì cũng làm thay đổi giá trị biến được truyền
Chương I Chương trình con
4. Cách dùng tham số c. Hiệu ứng lề
Thay đổi giá trị của đối tượng mà NLT khó kiểm soát được
Ví dụ hiệu ứng lề
Chương I Chương trình con
5. Cấp phát bộ nhớ cho Chương trình con
Khi CTrình EXE chạy, máy tính sẽ cấp phát vùng nhớ cơ sở 640Kb Cao Thấp Heap (0-655360 Bytes) Stack segment (16-64 Kb) Data segment (64 Kb) Code segment (64 Kb) Program segment prefix (256 bytes)
Chương I Chương trình con
5. Cấp phát bộ nhớ cho Chương trình con
Cấp phát bộ nhớ cho các biến trong CTCon (local) được thực hiện trong vùng Stack (Ngăn xếp)
Biến trong CTChính (global) được cấp phát ở dùng Data (dữ liệu)
Trong quá trình chạy các biến được cấp phát, khi kết thúc sẽ tự động giải phóng bộ nhớ
Khai báo biến quá nhiều trong CTCon -> Stack overflow
Chương I Chương trình con
6. Chương trình con đệ quy
Quy nạp trong toán học
C1: n! = 1.2.3…(n-1).n C2: 1! = 1
n! = (n-1)!.n Giai thừa 1
Giai thừa 2
Nhược điểm: Tốn kém bộ nhớ, số phép toán thực hiện nhiều
Chương I Chương trình con
6. Chương trình con đệ quy
Dãy Fibonaci
Đệ quy
Chương I Chương trình con
6. Chương trình con đệ quy
Bài toán tháp Hà Nội
Một chồng n đĩa, đĩa nhỏ xếp trên đĩa lớn
Chuyển chồng đĩa -> vị trí khác theo nguyên tắc: Mỗi lần chuyển 1 đĩa, chỉ được xếp đĩa nhỏ trên đĩa lớn Trong quá trình chuyển cho phép dùng vị trí thứ 3
Chương I Chương trình con
6. Chương trình con đệ quy
Lời giải
Chuyển n – 1 đĩa từ vị trí 1 đến vị trí 3 (lấy vị trí 2 làm trung gian)
Chuyển 1 đĩa từ vị trí 1 về vị trí 2
Chuyển n-1 đĩa từ vị trí 3 về vị trí 2 (lấy đĩa 1 làm trung gian)