Chươn gI Chương trình con

Một phần của tài liệu KTLT (Trang 31 - 48)

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)

Một phần của tài liệu KTLT (Trang 31 - 48)