chương trình con

6 1.3K 3
chương trình con

Đang tải... (xem toàn văn)

Thông tin tài liệu

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ẠI 1. 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ại nhiề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ông việ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 = a m + b n + c p + d q Xem: 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 = a n như sau: Ta thấy: S1 = a m = axaxax……….xa m lần số a Giả sử: S1 = 2 4 =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; BEGIN Writeln( ‘ 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: 1 S3:=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 ); Readln END. ……………………………………………………………………… -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ổng quát có tên là: LuyThua. Chương trình con này dùng để tính X k Trong đó hệ số X là biến số thực, luỹ thừa K là biến số nguyên Nộ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; Begin Tich:=1; For j:=1 to k do Tich:=tich * x ; LuyThua := tich; End; ------------------------------------------------------------------------------ -Sau này khi nào cần tính: a m thì ta chỉ việc viết: LuyThua( a, m ); -Tương tự cho các luỹ thừa: b n , c p , d q -Vậy ta có tổng luỹ thừa S:=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ỗi nếu có sai xót xảy ra. 2. Phân loại và cấu trúc của chương trình con a) Phân loại Trong 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( 30 0 )=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à khi thự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 con 1. Phần đầu 2. Phần khai báo 3. 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ệu và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: 3 Function LuyThua( x : real ; k : integer ): real; Phần đầu Var tich : real; J : byte; Phần khai báo Begin Tich:=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ền sử 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ừng chươ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ục chuẩ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ọi chưong trình con. --------------------------------------------------------------------------------------- 18. CÁCH VIẾT VÀ SỬ DỤNG CHƯƠNG TRÌNH CON 1. Cách viết và sử dụng thủ tục Trang: 4 Tê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ếu chúng khác kiểu nhau thì ngăn cách bởi dấu chấm phẩy VD: 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ương trì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ình thứ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 ctc thự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ủa tham 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ược trở 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à đón nhậ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ác tham số biến trên. Trang: 5 Phần đầu PROCEDURE 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ần khai báo VAR Các khai báo hằng, biến cục bộ Phần thân BEGIN ……………các câu lệnh của thủ tục ; END ; 1 Phần khai báo của chương trình chính; 2 Phần dành cho chương trình con; 3 Phần thân chương trình chính; 2. Nếu ko muốn có sự tác động ngược trở lại như trên (tức là các tham số thực và tham số hình thức vẫn giữ nguyên giá trị củ khi ctc thực hiện xong). Các tham số hình thức đgl tham số giá trị (Tham trị) và trong phần đầu của ctc trước các tham số giá trị ko có từ VAR. VD: Procedure tinhtoan( Var x,y : real ; z : byte ); -Khi tham số thực truyền dl vào cho tham số biến thì ta phải ghi tham số thực ở dạng biến (tham số thực ko thể ghi dưới dạng hằng hay biểu thức). Còn với các tham số giá trị thì các tham số thực truyền vào tự do. VD: một ctc có phần đầu là: Procedure Tong( var x : real ; y : byte ) ; *Thì các lệnh gọi ctc sau là đúng: Tong(m , n ) với: m:=5; n:=4; Tong(m , 4 ) với: m:=5.5; Tong( m , m*n) *Các lệnh gọi ctc sau đây là sai: Tong(5 , 5) Tong(3*m , n) Tong(m , 4.0 ) VD về cách sử dụng tham biến và tham trị: A. Cách viết và sử dụng chương trình con hàm *Cấu trúc của hàm VD: Function HoanVi( x, y : real ; z : integer ) : Real ; -Các tính chất khác của thủ tục vẫn đúng cho hàm. * Đặc biệt: Khi sử dụng hàm thì trong thân hàm phải có một phép gán kết quả sau cùng lại cho tên hàm (kết quả sau cùng này có thể là biến hoặc biểu thức và phải cùng kiểu với hàm). VD về cách sử dụng hàm: Trang: 6 Function TênHàm ( Ds các Tsht : Kiểu dl của Tsht ) : kiểu dl của kết quả hàm ; Phần đầu Var Khai báo hằng, biến dùng riêng cho ctc ; Phần khai báo Begin ………….các câu lệnh ; End ; Phần thâ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ẠI 1. Khái niệm chương trình con (SGK) Khi lập trình, chúng. và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à

Ngày đăng: 24/06/2013, 01:28

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan