Giáo trình Tin học đại cương - Phần 2 - Chương 5: Chương trình con Hàm và thủ tục

Khi lập trình gặp ñoạn chương trình cần dùng nhiều lần, ñể tránh viết lặp lại thì ñoạn

chương trình ñó ñược tổ chức thành chương trình con và mỗi khi cần gọi tới chương trình

con ñó.

Mặt khác khi xây dựng chương trình cho các bài toán lớn, phức tạp, ñể dễ cho việc thiết kế

chương trình, hiệu chỉnh chương trình, gỡ rối khi chạy chương trình, bài toán lớn ñược phân

thành các phần nhỏ, mỗi phần xây dựng thành các chương trình con. Chương trình chính sẽ

gọi tới các chương trình con .

Trong Pascal có 2 loại chương trình con ñó là hàm ( Function) và thủ tục (Procedure).

pdf6 trang | Chuyên mục: Pascal | Chia sẻ: dkS00TYs | Lượt xem: 2078 | Lượt tải: 3download
Tóm tắt nội dung Giáo trình Tin học đại cương - Phần 2 - Chương 5: Chương trình con Hàm và thủ tục, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
àm ñược viết như sau: 
 Tên_hàm( danh sách các tham số thực sự) 
 Các tham số thực sự tương ứng cả về số lượng và cả về kiểu dữ liệu với các tham số hình 
thức khai báo trong hàm. 
 Lời gọi hàm ñược coi như 1 biến, có thể tham gia vào biểu thức, tham gia vào các thủ tục 
vào/ ra. 
 Ví dụ1: Chương trình có xây dựng Function 
 Bài toán : Tính diện tích của tam giác biết 3 cạnh a,b,c. 
Trường ðại học Nông nghiệp 1 - Giáo trình Tin học ñại cương --------------------------------------------- 157 
 157 
 Chương trình 
 Program Tinh_dien_tich; 
 uses crt; 
 var a,b,c : real; 
 Function DT(x,y,z : real) : real; 
 var s,p : real; 
 begin 
 p:=(x+y+z)/2; 
 s:=sqrt(p*(p-a)*(p-b)*(p-c)); 
 DT:=s; 
 end; 
 begin { than chuong trinh chinh } 
 clrscr; 
 a:=2;b:=3;c:=2; 
 writeln(' dien tich tam giac 1 = ', DT(a,b,c):8:2); 
 write('Nhap 3 canh của tam giac a,b,c: '); 
 readln(a,b,c); 
 writeln(' dien tich tam giac 2 = ', DT(a,b,c):8:2); 
 readln; 
 end. 
 - Hàm ñặt ở vị trí sau khai báo biến trong chương trình chính và trước thân chương trình 
chính. 
- Chỉ ñược gọi tới hàm sau khi ñã khai báo hàm. 
- Ơ ví dụ 1 ta khai báo hàm có tên là DT có kiểu real, các tham số hình thức của hàm là: 
x,y,z. Trong thân chương trình có 2 lời gọi hàm, chúng ñều nằm trong lệnh Writeln. Trong 
lời gọi hàm thứ nhất, 3 tham số thực sự là a=2, b=3, c=2. Trong lời gọi hàm thứ hai, 3 tham số 
thực sự là a,b,c có giá trị ñược nhập vào từ bàn phím. 
b - Cấu trúc của thủ tục (Procedure) và lời gọi thủ tục 
• Thủ tục có cấu trúc ñầy ñủ như sau: 
 Procedure Tên_thủ_tục(Tham_số1 : kiểu; Tham_số2: kiểu; Var tham_số3: kiểu;. . .); 
 Label {Khai báo các nhãn } 
 Const { Khai báo các hằng } 
 Type { ðịnh nghĩa các kiểu dữ liệu của người sử dụng } 
 Var { Khai báo các biến cục bộ} 
 Begin 
 . . . { thân chương trình con } 
 End; 
 Các phần nếu có thì theo ñúng thứ tự ñã nêu. 
 Kiểu của tham số là các kiểu cơ bản, kiểu có cấu trúc như kiểu xâu kí tự và kiểu mang, 
nếu là kiểu mảng thì phải khai báo bằng ñịnh nghĩa kiểu ở phần ñịnh nghĩa khiểu ở ñầu 
chương trình chính, không ñược khai báo trực tiếp. 
 Trong chương trình chính thủ tục ñứng trước thân chương trình chính, sau khai báo biến. 
 Các tham số khai báo trong hàm ñược gọi là tham số hình thức. 
• Lời gọi thủ tục 
 Trong thân chương trình chính sử dụng thủ tục phải có lời gọi thủ tục 
 Lời gọi thủ tục ñược viết như sau: 
 Tên_thủ_tục( danh sách các tham số thực sự); 
Trường ðại học Nông nghiệp 1 - Giáo trình Tin học ñại cương --------------------------------------------- 158 
 158 
 Các tham số thực sự tương ứng cả về kiểu và số lượng với các tham số hình thức khai báo 
trong thủ tục. 
 Lời gọi thủ tục như 1 câu lệnh ñứng ñộc lập. 
Ví dụ 2: chương trình có xây dựng Procedure 
 Bài toán: Tính tổng và trung bình cộng của dãy số a1, a2, . . ., an . 
 Chương trình 
 Program Tinh_tong_tb; 
 uses crt; 
 type mang= array[ 1 .. 50 ] of real ; 
 var i,n: integer; a: mang; tg,tb: real; 
 Procedure tong(m: integer; x: mang; var s, p : real); 
 Var j: integer ; t: real; 
 begin 
 t:=0; 
 For j:=1 to m do t:=t + x[j] ; 
 s:= t; 
 p:=t/m; 
 end; 
 begin { than chuong trinh chinh } 
 clrscr; 
 write(' nhap so phan tu cua day n '); 
 readln(n); 
 for i:= 1 to n do 
 begin 
 write(a[', i, ']=' ); readln(a[i]); 
 end; 
 tong(n,a,tg,tb); 
 writeln(' tong= ', tg: 8: 2, 'trung binh = ', tb: 8: 2 ); 
 readln; 
 end. 
1.2 - Sự khác nhau giữa hàm và thủ tục 
 - Hàm cho 1 giá trị thông qua tên hàm. Tên hàm trong lời gọi hàm ñược coi như một biến 
có thể tham gia vào biểu thức, các thủ tục vào ra. Cuối thân hàm phải có lệnh gán giá trị cho 
tên hàm. 
 - Tên thủ tục không cho 1 giá trị nào cả. 
 - Các tham số viết sau tên hàm, sau tên thủ tục ñược gọi là tham số hình thức. Tham số 
hình thức có 2 loại: + Tham số không có từ khoá Var ñi kèm trước gọi là tham trị. 
 + Tham số có từ khóa Var ñi kèm trước gọi là tham biến. 
 - Trong hàm thường chứa các tham trị, ít khi chứa các tham biến. Trong thủ tục thường có 
các tham biến. 
 - Các tham số trong lời gọi hàm, lời gọi thủ tục gọi là tham số thực sự. Các tham số thực 
sự phải tương ứng về số lượng và kiểu với các tham số hình thức. Các tham số thực sự tương 
ứng vơí các tham trị ñể chứa các dữ liệu vào. Các tham số thực sự tương ứng vơí các tham 
biến ñể chứa kết quả của thủ tục. 
 - Hàm lấy kết quả ở tên hàm, thủ tục lấy kết quả ở các tham số thực sự tương ứng với các 
tham biến. 
Trường ðại học Nông nghiệp 1 - Giáo trình Tin học ñại cương --------------------------------------------- 159 
 159 
 - Như vậy nếu ñể lấy 1 kết quả ta có thể tổ chức hàm hoặc thủ tục. Nếu muốn lấy nhiều hơn 
1 kết quả thì phải tổ chức chương trình con dạng thủ tục. 
2 - Biến toàn cục, biến cục bộ và truyền dữ liệu 
2.1 - Biến toàn cục 
 Biến toàn cục là biến khai báo ở ñầu chương trình chính. 
 Biến toàn cục tồn tại suốt thời gian làm việc của chương trình . 
 Biến toàn cục có thể sử dụng cả trong chương trình chính và chương trình con. 
 Ví dụ 1 mục 1 (tính diện tích tam giac) có a,b,c là biến toàn cục. 
 Ví dụ 2 mục 1 ( tính tổng và trung bình) có i, n, a, tg, tb là biến toàn cục. 
2.2 - Biến cục bộ 
 Biến cục bộ là các biến ñược khai báo ở ñầu chương trình con. 
 Biến cục bộ ñược cấp phát bộ nhớ khi chương trình con ñược gọi tới và bị xoá khi ra khỏi 
chương trình con. 
 Biến cục bộ chỉ ñược dùng trong chương trình con. 
 Biến toàn cục và biến cục bộ có thể trùng tên nhau nhưng chương trình vẫn phân biệt 2 biến 
khác nhau. 
 Trong ví dụ 1 mục 1 (tính diện tích tam giác) có s, p là biến cục bộ. 
 Trong ví dụ 2 muc 2 ( tính tổng và trung bình) có j, t là biến cục bộ. 
2.3 - Truyền dữ liệu 
 Khi gặp lời gọi chương trình con máy sẽ thực hiện các bước sau: 
 - Cấp phát bộ nhớ cho các tham số và cho các biến cục bộ trong chương trình con. 
 - Truyền giá trị của các tham số thực sự cho tham trị và truyền ñịa chỉ cho các tham biến. 
 - Thực hiện các lệnh trong thân chương trình con. 
 - Thực hiện xong chương trình con máy giải phóng các tham số và các biến cục bộ, rồi trở 
về chương trinh chính. 
3 - Tính ñệ quy của chương trình con 
 Trong Function và Procedure có thể có lời gọi tới chính nó. Tính chất này ñược gọi là tính 
ñệ qui. 
 Phương pháp ñệ qui ñược áp dụng cho các bài toán thuật giải mang tính ñệ qui. 
 Thuât giải ñệ qui làm cho chương trình ngắn gọn, ñẹp ñẽ nhưng lại tốn thờ gian tính toán 
và bộ nhớ. Có những bài toán chỉ có thể giải quyết ñược bằng xây dựng các chương trình con 
ñệ quy. 
 Ví dụ1: Bài toán tính giai thừa 
 - Trường hợp suy biến: n! = 1 khi n=0 
 - Trường hợp tổng quát: n! = (n-1)! . n khi n >= 1 
 Có thể xây dựng hàm Giaithua có tính chất ñệ qui như sau: 
 Function Giaithua( n: longint): longint ; 
 begin 
Trường ðại học Nông nghiệp 1 - Giáo trình Tin học ñại cương --------------------------------------------- 160 
 160 
 if n=0 then Giaithua:= 1 
 else Giaithua:= Giaithua(n-1) * n ; 
 end; 
 * Muốn xây dựng ñược chương trình con ñệ qui ta phải xác ñịnh ñược 2 trường hợp: 
 - Trường hợp suy biến , ñó là trường hợp ñặc biệt mà xác ñịnh ñược giá trị của hàm. 
 - Trường hợp tổng quát lần thứ n ñược tính dựa vào lần thứ (n-1). 
 Ví dụ 2: Tìm ước số chung lớn nhất của 2 số x và y có thể ñược ñịnh nghĩa như sau (x>y): 
 USCLN(x,y)= x nếu y=0 ( ñây là trường hợp suy biến) 
 USCLN(x,y)= USCLN( y, phần dư của x/y) nếu y0 ( ñây là trường hợp tổng quát). 
 Trong hàm xây dưng với x>y, nếu y>x thì chương trình tráo ñổi giá trị giữ x và y. 
 Hàm USCLN ñược viết như sau: 
 Function USCLN(x,y: integer) : integer ; 
Var t:Integer; 
 Begin 
 If y>x then begin t:=x; x:=y; y:=t; end; 
 if y=0 then USCLN:= x 
 else USCLN := USCLN(y, x mod y) ; 
 end; 
4. Một số chương trình con của turbo pascal 
 Pascal ñã xây dựng sẵn một số hàm và thủ thục, Ta có thể gọi tới các hàm, thủ tục ñó theo 
ñúng quy cách của nó ñể sử dụng. 
 Ngoài các hàn và thủ tục ñã xét ở các phần trên, trong phần này bổ sung thêm một số thủ tục 
sau ñây: 
* Procedure GotoXY(Xpos, YPos); 
 ðưa con trỏ(cursor) của màn hình về vị trí có toạ ñộ Xpos và Ypos trên màn hình. 
Xpos, Ypos kiểu số nguyên. 
 * Procedure ClrScr; 
 Xoá toàn bộ màn hình và ñặt con trỏ vào vị trí phía trên, bên trái. 
* Procedure ClrEof; 
 Xoá toàn bộ các kí tự bên phải con trỏ màn hình. Sau khi xoá con trỏ vẫn ở tại chỗ. 
* Procedure Deline; 
 Xoá toàn bộ dòng màn hình chứa con trỏ, sau ñó dồn các dòng ở dưới lên. 
* Procedure InsLine; 
 Xen một dòng trắng vào màn hình từ vị trí con trỏ. 
* Procedure LowVideo và NormVideo; 
 Sau khi gọi LowVideo mọi kí tự viết ra màn hình ñều có ñộ sáng yếu ñi cho tới khi 
gọi thủ tục NormVideo (Normal Video). 
* Procedure Delay(Time); 
 Tạo ra thời gian trễ Time (khoảng ms). Time là một số nguyên. Delay thường ñược 
dùng ñể làm chậm chương trình lại cho ta quan sát, khảo sát... 
* Procedure Sound(F) và NoSound; 
Trường ðại học Nông nghiệp 1 - Giáo trình Tin học ñại cương --------------------------------------------- 161 
 161 
 Tạo ra dao ñộng âm thanh với tần số là F (F: số nguyên) cho ñến khi ta gọi NoSound; 
Bài tập chương 5 
1. Viết chương trình tính tổ hợp chập m của n phần tử: Cmn 
 Chương trình viết có chương trình con. 
2. Viết chương trình tính Pn(x)=(. . . ( ( an*x+an-1 )*x+an-2 )*x+. . . +a1)*x+a0 
 Chương trình có chương trình con. 
3. Cho dãy số sau: a1,a2,....,an . Viết chương trình tính tổng, trung bình cộng các phần tử của 
dãy số ñó. Chương trình viết có chương trình con. 
4. Lập chương trình tính diện tích và chu vi của các hình: Tam giác biết 3 cạnh a,b,c, hình 
chữ nhật biết hai cạnh a,b, hình tròn biết bán kính. Chọn hình ñể tính thông qua câu hỏi ' Ban 
tính cho hình gì TG=1, CN=2, TR =3 '. Chương trình viết có sử dụng chương trình con. 
5. Cho hai số nguyên x1 và x2, lập chương trình nhập x1 và x2 từ bàn phím, sử dụng 
tính ñệ quy của chương trình con ñể tìm ước số chung lớn nhất của x1 và x2. 

File đính kèm:

  • pdfGiáo trình Tin học đại cương - Phần 2 - Chương 5_Chương trình con Hàm và thủ tục.pdf