Cách xây dụng chương trình con

BÀI 17. CHƯƠNG TRÌNH CON VÀ PHÂN LOẠI

1. Khái niệm chương trình con

- Những bài toán phức tạp có thể phân chia thành nhiều bài nêu nhỏ, mỗi bài nêu nhỏ được phân chia thành nhiều bài nêu nhỏ, quá trình làm “mịn” dần bài toán như vậy được gọi là cách thiết kế từ trên xuống.

- Khi lập trình để giải các bài nêu có thể chia thành các khối, mỗi khối bao gồm các lệnh để giải 1 bài nêu nào đó, mỗi khối lệnh được xây dựng thành 1 chương trình con, sau đó chương trình chính được xây dựng trên các chương trình con này, cách lập trình như vậy gọi là chương trình có cấu trúc.

- Chương trình con là một dãy lệnh mô tả một số thao tác nhất định và có thể được thực hiện [được gọi ] từ nhiều vị trí trong chương trình.

- Lợi ích của việc sử dụng chương trình con:

  • Tránh được việc phải viết đi viết lại nhiều lần cùng 1 dóy lệnh;
  • Hổ trợ việc thực hiện các chương trình lớn;
  • Phục vụ cho quỏ trình trừu tượng hoá ;
  • Mở rộng khả năng ngôn ngữ;
  • Thuận tiện cho phát triển, nâng cấp chương trình;

2. Phân loại và cấu trúc của chương trình con

a. Phân loại:

  • Hàm: Là chương trình con thực hiện một số thao tác nào đó. Trả lại giá trị qua tên của hàm.
  • Thủ tục: Là chương trình con thực hiện một số thao tác nào đó. Không trả lại giá trị qua tên của thủ tục.

b. Cấu trúc chương trình con

[]

* Phần đầu:

  • Để khai báo tên của hàm hoặc thủ tục.
  • Nếu là hàm phải khai báo kiểu dữ liệu chỉ giá trị trả về của hàm.
  • Nhất thiết phải có.

* Phần khai báo:

  • Khai báo các biến cho dữ liệu vào/ra, các hằng và biến dùng trong chương trình con.

* Phần thân:

  • Gồm dãy các lệnh thực hiện để từ những dữ iệu vào/ra ta nhận dữ liệu ra hay kết qủa mong muốn.

c. Khái niệm các biến:

  • Tham số hình thức: gồm các biến được khai báo cho dữ liệu vào/ra.
  • Biến cục bộ: Gồm các biến khái được khai báo trong chương trình con.
  • Biến toàn cục: Gồm các biến khái được khai báo trong chương trình chính.

* Phạm vi hoạt động của các biến:

  • Biến cục bộ:
    • Chỉ sử dụng trong một chương trình con cuả nú mà thụi.
    • Không thể sử dụng biến cục bộ cuả một chương trình con cho chương trình chính và các chương trình con khác.
  • Biến toàn cục: Được sử dụng trong chương trình chính cũng có thể sử dụng trong chương trình con.

d. Thực hiện chương trình con:

  • Để thực hiện gọi chương trình con ta thực hiện lệnh theo có pháp sau: 

[]

Trong đó: tham số thực sự là các hằng, biến chứa dữ liệu vào/ ra.

* Chú ý: Trong quá trình xây dựng CTC, khi nào thì nên dùng thủ tục/hàm?

Dùng hàm

Dùng thủ tục

- Kết quả của bài toán trả về 1 giá trị duy nhất [kiểu vô hướng, kiểu string hoặc kiểu con trỏ].

- Lời gọi chương trình con cần nằm trong các biểu thức tính toán.

- Kết quả của bài toán không trả về giá trị nào hoặc trả về nhiều giá trị hoặc trả về  kiểu dữ liệu có cấu trúc [Array, Record, File].

- Lời gọi chương trình con không nằm trong các biểu thức tính toán.

Chương VI: CHƯƠNG TRÌNH CON VÀ LẬP TRÌNH CÓ CẤU TRÚCξ 17. CHƯƠNG TRÌNH CON VÀ PHÂN LOẠI1. Khái niệm chương trình con [SGK]Khi lập trình, chúng ta thường có những đoạn chương trình hay phép tính giống nhau và lặp lạinhiều lần.Nếu mỗi lần lặp lại, ta phải viết những đoạn lệnh như nhau thì chương trình ta trở nên dài dòng,rối rắm và mất thời gian vô ích. Để giải quyết vấn đề trên, các NNLT cho phép chúng ta tạo các khối nhỏ,mỗi khối là một đoạn chương trình nhỏ đgl chương trình con. chương trình con dùng để giải quyết một côngviệc nào đó. Mỗi chương trình con sẽ có tên khác nhau để làm việc. Sau cùng thì chương trình chính sẽđược xây dựng từ các chương trình con này.-Cách lập trình như vậy gọi là lập trình có cấu trúc.VD: xét bài toán tính tổng của bốn luỹ thừa sau:S = am + bn + cp + dqXem: S = S1 + S2 +S3 +S4-Thông thường để tính được tổng S thì ta phải tính: S1, S2, S3, S4-Trong đó cách tính S1, S2, S3, S4 tương tự nhau.-Chẳng hạn ta tính S1 = an như sau:Ta thấy: S1 = am = axaxax……….xam lần số aGiả sử: S1 = 24 =2x2x2x2=16*Sau đây là các câu lệnh chính để tính S1---------------------------------------------------------------------------Writeln[ ‘ nhập hệ số a và luỹ thừa m =? ’ ]; Readln[ a, m ];S1:=1;For i:=1 to m do s1:=s1 *a---------------------------------------------------------------------------*Và đây là chương trình dùng để tính tổng S----------------------------------------------------------------------------Program tong_luy_thua;Var a, b, c : real;m, n, p, q : byte;S, S1, S2, S3, S4 : Real;BEGINWriteln[ ‘ nhap vao cac he so: a, b, c, d =?]; Readln[ a, b, c, d ];Writeln[ ‘ nhap vao cac luy thua: m, n, p, q =? ]; Readln[ m, n, p, q ];{……………………Tinh S1……………………………………….}S1:=1;For i:=1 to m do S1:=S1 *a{………………………….Tinh S2………………………………..}S2:=1;For i:=1 to n do S2:=S2 *a{…………………………..Tinh S3……………………………….}Trang: 1S3:=1;For i:=1 to p do S3:=S3 *a{…………………………Tinh S4………………………………. }S4:=1;For i:=1 to q do S4:=S4 *a{………………………….Tinh S………………………………….}S:= S1 +S2 + S3 +S4 ;Writeln[ ‘ tong luy thua S:=’ , S : 4 :2 ];ReadlnEND.………………………………………………………………………..-Trong chương trình trên có 4 đoạn lệnh tương tự nhau, việc lặp lại những đoạn lệnh nhưnhau làm cho chương trình dài, khó theo dõi. Ta sẽ xây dựng một chương trình con tổngquát có tên là: LuyThua. Chương trình con này dùng để tính XkTrong đó hệ số X là biến số thực, luỹ thừa K là biến số nguyênNội dung của chương trình con này như sau:--------------------------------------------------------------------------------Function LuyThua[ x : real ; k : integer ]: real;Var tich : real;J : byte;BeginTich:=1;For j:=1 to k do Tich:=tich * x ;LuyThua := tich;End;-------------------------------------------------------------------------------Sau này khi nào cần tính: am thì ta chỉ việc viết: LuyThua[ a, m ];-Tương tự cho các luỹ thừa: bn , cp , dq-Vậy ta có tổng luỹ thừaS:=LuyThua[ a, n ] + LuyThua[ b, n ] + LuyThua[ c, p ] + LuyThua[ d, q ];*Lợi ích của việc sử dụng chương trình con:-Tiết kiệm bộ nhớ.-Không mất thời gian, tránh rối rắm, dễ theo dõi chương trình.-Dễ dàng kiểm tra được tính đúng đắng của các chương trình con, dễ dàng sửa lỗinếu có sai xót xảy ra.2. Phân loại và cấu trúc của chương trình cona] Phân loạiTrong các NNLT, chương trình con thường gồm 2 loại:-Hàm [Function]: là chương trình con sau khi thực hiện xong thì nó cho ra một kết quảthông qua tên của hàm.VD: Các hàm toán học: Sin[x], cos[x], …., sqr[ x ]vd: sin[ 300 ]=1/2-Hàm sử lí chuỗi: Length[ st ];Trang: 2*Hàm có thể tham gia vào các biểu thức tính toán.VD: x*Abs[-2]-Thủ tục [Procedure]: là chương trình con dùng để thực hiện các công việc nào đó và khithực hiện xong thì thủ tục không cho ra kết quả thông qua tên của thủ tục [điểm khác cơbản với hàm].VD : Các thủ tục: Writeln[……], Readln[……]Thủ tục xử lí chuỗi: Delete, Insert,………b. Cấu trúc của chương trình con1. Phần đầu2. Phần khai báo3. Phần thân*Trong đó:-Phần đầu của chương trình con chứa: tên chương trình con, các biến số cung cấp dữ liệuvào để chương trình con thực hiện.-Phần khai báo chương trình con: khai báo các biến, hằng mà chương trình con cần dùng.-Phần thân chương trình con: là một loạt các câu lệnh được đặt trong cặp từ khoá: BEGIN……các lệnh………..;END;VD: chẳng hạn ta xét hàm dùng để tính luỹ thừa :Trang: 3Function LuyThua[ x : real ; k : integer ]: real; Phần đầuVar tich : real;J : byte;Phần khai báoBeginTich:=1;For j:=1 to k do Tich:=tich * x ;Luythua := tich;End;Phần thân*Chú ý:-Các biến nào được viết trong phần đầu của ctc đgl tham số hình thức [x và k].-Các biến được viết trong phần khai báo của ctc đgl biến cục bộ [tich, j].-Chương trình chính không thể sử dụng các biến cục bộ của ctc, nhưng ctc thì được quyềnsử dụng các biến cuả chương trình chính !-Các biến được khai báo trong chương trình chính đgl biến toàn cục.-Một ctc có thể có hoặc không có tham số hình thức, biến cục bộ, [còn tuỳ thuộc vào từngchương trình cụ thể].c] Thực hiện chương trình con-Để thực hiện ctc, ta cần phải có lệnh gọi nó [tương tự như lệnh gọi các hàm hay thủ tụcchuẩn mà ta vẫn hay dùng trước đây].VD: để thực hiện hàm chuẩn toán học: Sqr[x];Thì ta có thể gọi nó như sau:Sqr[4]Hoặc: Sqr[ I ] với I:=4;Hoặc: Sqr[4*I]-Lúc này tại vị trí các tham số hình thức ta sẽ thay bởi các hằng, biến, biểu thức chứa dữliệu vào cụ thể và các hằng và biến này đgl Tham số thực sự.-Các tham số thực sự phải phù hợp kiểu dữ liệu với tham số hình thức.-Tóm lại: lời gọi chương trình con gồm có:-Chương trình con sẽ được thực hiện khi trong chương trình chính có lệnh gọi đến nó.-Khi thực hiện ctc xong thì chương trình chính sẽ thực hiện tiếp lệnh theo sau lệnh gọichưong trình con.---------------------------------------------------------------------------------------18. CÁCH VIẾT VÀ SỬ DỤNG CHƯƠNG TRÌNH CON1. Cách viết và sử dụng thủ tụcTrang: 4Tên chương trình con [ Hằng hoặc biến hoặc biểu thức ]A. Cấu trúc của một thủ tục-Nếu có nhiều tham số hình thức cùng kiểu thì ta dùng dấu phẩy để ngăn cách. --Nếuchúng khác kiểu nhau thì ngăn cách bởi dấu chấm phẩyVD: Procedure tong [ x, y : byte ; s, t: char ; k : real ];-Một chương trình chính có sử dụng chương trình con thì có dạng như sau:-Phần dành cho chương trình con được đặt ngay sau khai báo biến [ VAR] của chươngtrình chính.VD1: Cách viết và sử dụng thủ tục không tham số hình thức:VD2: Cách viết và sử dụng thủ tục có tham số hình thức:*Nhận xét: Khi có lệnh gọi ctc thì các tham số thực sẽ truyền dl vào cho các tham số hìnhthức, còn các tham số hình thức sẽ nhận lấy giá trị trên và đưa vào ctc để tính toán. Khi ctcthực hiện xong thì ta có 2 sự chọn lựa:1. Nếu muốn cho các lệnh của ctc tác động ngược trở lại và làm thay đổi giá trị củatham số hình thức. Còn tham số hình thức sẽ nhận lấy giá trị mới này và gửi ngượctrở ra cho các tham số thực. Cuối cùng các tham số thực sẽ bỏ đi giá trị củ và đónnhận giá trị mới này. Để làm được đều đó thì các tham số hình thức đgl các tham sốbiến [Tham biến]. Khi đó trong phần đầu của ctc cần phải có từ khoá VAR trước cáctham số biến trên.Trang: 5PhầnđầuPROCEDURE Tên thủ tục [Danh sách các tham số hình thức : kiểu dữ liệu của chúng] ;PhầnkhaibáoVAR Các khai báo hằng, biến cục bộ PhầnthânBEGIN……………các câu lệnh của thủ tục ;END ;1Phần khai báo của chương trình chính;2Phần dành cho chương trình con;3Phần thân chương trình chính;

Video liên quan

Chủ Đề