I. KHÂI NIỆM VỀ CHƯƠNG TRÌNH CON
a. Cấu trúc của thủ tục không tham số PROCEDURE < Tín thủ tục > ;
PROCEDURE < Tín thủ tục > ;
{ Câc khai bâo hằng, biến, kiểu cục bộ... } BEGIN
{ ... câc lệnh trong nội bộ thủ tục ... } END ;
Ví dụ 7.1: Tìm số lớn nhất trong 3 trị số nguyín
PROGRAM Largest ; (* Xâc định số lớn nhất trong 3 trị số nguyín được nhập văo *) VAR a, b, c : integer ;
yn : char ;
PROCEDUREmaximum ; VAR max : integer ; BEGIN
IF a > b THEN max := a ELSE max := b ; IF c > max THEN max := c ;
Writeln (' Số lớn nhất lă' , max ) ; END ;
BEGIN (* Ðoạn chương trình chính *)
yn := ‘Y‘ ;
WHILE ( upcase(yn) = ‘Y ‘) DO BEGIN
Writeln (' Nhập 3 số nguyín : ') ; Readln (a, b, c ) ;
maximum ; (* --- Lời gọi thủ tục maximum --- *) Write (' Tiếp tục nhập 3 số mới không (y/n) ? ') ; Readln (yn) ;
END ; END.
Chú ý:
Trong chương trình trín, thủ tục maximum được khai bâo trước khi nó được truy xuất, câc biến a, b, c được gọi nhập văo ở chương trình chính vă biến max được định nghĩa bín trong thủ tục. Ðiều năy cho ta thấy, không phải lúc năo cũng cần thiết khai bâo biến ngay đầu chương trình chính.
b. Cấu trúc của thủ tục có tham số
PROCEDURE < Tín thủ tục > (<danh sâch tham số hình thức : kiểu biến>); { Câc khai bâo hằng, biến, kiểu cục bộ ... }
BEGIN
{ ... câc lệnh trong nội bộ thủ tục ... } END ;
Khi viết một thủ tục, nếu có câc tham số cần thiết, ta phải khai bâo nó (kiểu, số lượng, tính chất, ...). Câc tham số năy gọi lă tham số hình thức (formal parameters).
Một thủ tục có thể có 1 hoặc nhiều tham số hình thức. Khi câc tham số hình thức có cùng một kiểu thì ta viết chúng câch nhau bởi dấu phẩy (,). Trường hợp câc kiểu của chúng khâc nhau hoặc giữa khai bâo tham số truyền bằng tham biến vă truyền bằng tham trị (sẽ học ở phần sau ) thì ta phải viết câch nhau bằng dấu chấm phẩy (;).
Ví dụ 7.2: Tính giai thừa của một số PROGRAM Tinh_Giai_thua ; VAR
n : integer ; gt : real ; {câc biến chung} PROCEDURE giaithua (m : integer );
VAR i : integer ; {i lă biến riíng} BEGIN
gt := 1 ;
FOR i := 1 TO m DO gt := gt * i ; END ;
BEGIN (* Thđn chương trình chính *)
Write('Nhập số nguyín n (0 <= n < 33) = ') ; Readln (n) ; If n>=0 then
Begin
Writeln ('Giai thừa của , n, lă :' , gt: 10 : 0) ; End
Else Writeln(' Không tính giai thừa của một số đm! ') ; Readln;
END.
Trong chương trình trín m lă câc tham số hình thức của thủ tục giaithua.
Khi gọi thủ tục giaithua (n) thì tham số thực n được truyền tương ứng cho tham số hình thức m. Ví dụ 7.3: Giải phương trình ax2 + bx + c = 0, theo dạng chương trình con lồng nhau:
PROGRAM Giai_PTB2;
VAR hsa, hsb, hsc:real; {câc biến toăn cục}
PROCEDURE Ptb2(a,b,c:real); {a, b, c lă câc tham số hình thức của Ptb2} Var delta:real; {biến cục bộ}
PROCEDURE Ptb1(a1,b1:real); {a,b lă câc tham số hình thức của Ptb1} Begin
if a1=0 then if b1=0 then
writeln('Phương trình vô số nghiệm') else
writeln('Phương trình vô nghiệm') else
writeln('Phương trình có nghiệm =',-b1/a1:8:2); End; {kết thúc thủ tục Ptb1}
Begin {bắt đầu thủ tục Ptb2}
(3) if a=0 then ptb1(b,c) {b, c lă câc tham số thực cho Ptb1} (4) else
begin
delta:=sqr(b)-4*a*c; if delta>0 then
begin writeln('Nghiệm x1= ',(-b+sqrt(delta))/(2*a):8:2); writeln('Nghiệm x2= ',(-b-sqrt(delta))/(2*a):8:2); end else if delta=0 then writeln('Nghiệm kĩp x1=x2= ',-b/(2*a):8:2) else
writeln('delta <0 => Phương trình vô nghiệm'); end;
End; {kết thúc thủ tục Ptb2} Begin {chương trình chính}
(1) write('Nhập câc hệ số a, b, c = ');readln(hsa, hsb, hsc);
(2) Ptb2(hsa,hsb,hsc); {hsa, hsb, hsc lă câc tham số thực cho Ptb2} (5) readln;
End. {kết thúc chương trình}
Ở ví dụ trín, thì thủ tục Ptb2 vă thủ tục Ptb1 được gọi lă thủ tục lồng nhau.
Ở dòng (4), ta thấy hsa, hsb, hsc lại được hiểu lă câc tham số thực, chúng truyền giâ trị biến cho câc tham số hình thức a, b, c tương ứng trong thủ tục Ptb2.
Nếu ta lại xĩt đến thủ tục con của thủ tục Ptb2 lă Ptb1 thì câc tham số a, b, c năy (chính xâc lă b vă c) lại lă tham số thực đối với Ptb1, với b vă c được truyền tương ứng cho câc tham số hình thức a, b của thủ tục Ptb1.
Như vậy ta nhận thấy rằng, vấn đề xâc định được đđu lă biến toăn cục, đđu lă biến cục bộ, đđu lă tham số thực vă đđu lă tham số hình thức (tham số biến vă tham số trị) lă ứng bước năo mă chương trình đang thực hiện? Ðđy lă phần then chốt để nắm được câch vận hănh vă kết quả của chương trình xử lý.