IV. CU TRÚC KI UB NGHI (RECORD)
I.3. Khai bâo ch ng trình con
NSD có th t xđy d ng câc CTC b ng câc khai bâo nh sau :
I.3.1.Khai bâo th t c
Procedure <proc_name> [(<param_list>)]; { Câc khai bâo trong th t c n u có } begin
{ Thđn th t c } end;
u th t c g m tín th t c (<proc_name>) vă danh sâch câc tham đ i đ t trong c p d u ngo c câch nhau d u ph y (<param_list>) đi sau t khoâ Procedure.
Thđn th t c n m gi a begin vă end. K t thúc th t c lă d u ch m ph y.
Ví d :
Th t c tính n!
program Tính_giai_th a; var n : integer; G1 : real;
procedure giaith a (m : intger; var gt: real); var i : integer; begin gt:= 1; for i := 1 to m do gt:= gt*i end; begin {program} write ('n = '); readln (n); while n>0 do begin giaith a (n, G1); { l nh g i th t c } writeln (n:2, '! =', G1:10); write ('n ='); readln (n) end end.
Trong ví d trín, khai bâo th t c đ c đ t sau câc ph n khai bâo (Label, Const, Type vă Var) c a ch ng trình chính. Tuy nhiín, Turbo Pascal cho phĩp thay đ i tr t t trín, ch ng h n khai bâo th t c có th đ t tr c khai bâo bi n.
L i g i th t c : giaith a(n, G1);
đ t giâ tr k t qu tính n! văo bi n G1. Vòng l p trong ch ng trình chính k t thúc khi s n gõ văo có giâ tr ≤ 0.
I.3.2.Khai bâo hăm
Function <func_name> [(<param_list>)]: <type_name>; { Câc khai bâo trong hăm n u có }
{ Thđn hăm } end;
u khai bâo hăm g m tín hăm (<func_name>), danh sâch câc tham đ i đ t trong c p d u ngo c câch nhau d u ph y vă ki u giâ tr tr v c a hăm đi sau t khoâ Function.
Thđn hăm n m gi a begin vă end. K t thúc hăm lă d u ch m ph y.
Ví d :
Hăm tính giai th a n! program Tính_giai_th a; var n : integer;
function giaith a (m: integer): real; var i: integer;
g: real; begin
g:=1;
for i:= 1 to m do g:= g*i;
giaith a:= g {gân tr k t qu cho hăm } end;
begin {program}
write ('n ='); readln (n); while n > 0 do begin
writeln (n:2, '! =', giaith a(n):10); write ('n ='); readln (n)
end end.
Trong ví d trín, l i g i hăm giaith a(n)có vai trò lă m t bi u th c trong th t c writeln mă không ph i lă m t l nh.
Tr c khi k t thúc hăm, tín hăm ph i có giâ tr b i l nh gân giaith a:= g;
I.3.3.Tham đ i hình th c vă tham đ i th c s
Trong khai bâo CTC, câc tham đ i li t kí sau tín th t c ho c sau tín hăm có th v ng m t, chúng đ c g i lă câc tham đ i hình th c (formal parameter).
Câc tham đ i trong l i g i th t c đ c g i lă câc tham đ i th c s (actual parameter), phù h p t ng ng theo th t xu t hi n c a chúng trong danh sâch tham đ i hình th c (T HT).
Chú ý : Do câc T HT ch có giâ tr bín trong CTC nín tín c a chúng có th trùng v i tín bi n c a CHTR chính (ngoăi CTC).
Ví d : Trong ch ng trình tính giai th a trín có th dùng l i tín bi n n : program Tính_giai_th a;
var n : integer;
function giaith a(n: integer): real; {Dùng l i tín bi n n }
. . .
Câc bi n khai bâo b i var trong CTC đ c g i lă câc bi n c c b (local variable) c a CTC đó. Ví d trong khai bâo :
procedure giaith a (m : intger; var gt: real); var i : integer;
thì i lă bi n c c b c a CTC giaith a.
I.3.4.T HT tr vă T HT bi n
i v i th t c, nh ng T HT không đ ng sau t khoâ var đ c g i lă T HT tr (value parmeter). Nh ng T HT đ ng sau var đ c g i lă T HT bi n (variable parmeter). Ví d trong khai bâo :
procedure giaith a (m : intger; var gt: real); thì m lă T HT tr , còn gt lă T HT bi n.
Trong l i g i th t c, danh sâch tham đ i th c s (T TS) đ c đ t t ng ng v i danh sâch T HT nh d i đđy :
giaith a(n, G1);
giaith a(m: intger; var gt: real);
Phđn bi t T HT tr vă T HT bi n
a) T HT tr
− Không đ t sau t khoâ var trong danh sâch T HT đ u th t c.
− c c p vùng nh riíng khi CTC đ c g i vă b lo i b sau khi ra kh i CTC.
− T TS t ng ng lă m t bi u th c.
− T HT th c ch t lă bi n c c b c a CTC nh n giâ tr ban đ u lă tr c a T TS t ng ng.
− Nh ng thay đ i c a T HT tr không nh h ng gì đ i v i ch ng trình g i.
b) T HT bi n
− t sau ch var trong danh sâch T HT đ u th t c.
− T TS t ng ng lă m t bi n.
− M i thay đ i trín T HT bi n c ng lă thay đ i trín T TS t ng ng.
− Th c ch t c a truy n tham đ i đ i v i T HT bi n lă truy n đa ch .