2. Bài 17 : CHƯƠNG TRÌNH CON VÀ
PHÂN LOẠI
• Khái niệm chương trình con.
• Lợi ích của việc sử dụng chương trình con.
Khái niệm chương trình con
• Phân loại.
• Cấu trúc chương trình con.
• Thực hiện chương trình con.
Phân loại và cấu trúc của chương trình con
2
3. 3
Khái niệm chương trình con
Ví dụ : Tính diện tích ngũ giác ABCDE (như hình
vẽ) với các độ dài a, b, c, d, e, f, g.
b
ca
B
C
A
g
e
d
E
f
D
Cách tính
diện tích
ngũ giác
ABCDE
???
Tính diện tích từng
tam giác nhỏ =>
cộng diện tích của
3 tam giác đó lại.
3
4. b
ca
B
C
A
g
e d
E
f
D
write(‘Nhập cạnh a, b, c: ‘);
readln(a,b,c);
p1 := (a + b + c)/2 ;
dt1 := sqrt(p*(p-a)*(p-b)*(p-c));
write(‘Nhập cạnh f, g: ‘);
readln(f,g);
p3 := (e + f + g)/2 ;
dt3 := sqrt(p*(p-e)*(p-f)*(p-
g));
write(‘Nhập cạnh d, e: ‘);
Readln(d,e);
p2 := (c + d + e)/2 ;
dt 2:= sqrt(p*(p-c)*(p-d)*(p-e));
dt := dt1 + dt2 +dt3;
writeln(‘Diện tích ngũ giác ABCDEFG: ‘, dt);
var a, b, c, p, dt : real;
begin
write(‘Nhap do dai a, b, c: ‘);
readln(a,b,c);
p := (a + b + c)/2;
dt := sqrt(p*(p-a)*(p-b)*(p-c));
end.
4
Tên CTC:
Dientich
Biến: a, b, c
Dientich (a, b, c);Dientich (c, d, e);Dientich (e, f, g);
5. 5
Chương trình hoàn chỉnh
program tinhdientich;
uses crt;
var a, b, c, d, e, f, g, p, dt1, dt2, dt3, dt: real;
begin
write(‘Nhập độ dài các cạnh: ‘);
readln(a, b, c, d, e, f, g);
p1 := (a+b+c)/2;
dt1 := sqrt(p*(p-a)*(p-b)*(p-c));
p2 := (c+d+e)/2;
dt2 := sqrt(p*(p-c)*(p-d)*(p-e));
p1 := (e+f+g)/2;
dt1 := sqrt(p*(p-e)*(p-f)*(p-g));
dt := dt1 + dt2 + dt3;
writeln(‘Diện tích ngũ giác ABCDEFG là: ‘,dt);
readln
end.
5
6. 6
Khái niệm chương trình con
Trong thực tế, các bài toán thường phức tạp, chương trình rất dài
Phân chia bài toán thành các bài
toán con
Dễ đọc, hiệu
chỉnh, nâng cấp
Khó nhận biết
và hiệu chỉnh
Phân chia chương trình thành các khối.Mỗi
khối là một dãy lệnh giải một bài toán con
nào đó. Mỗi khối lệnh xây dựng thành
chương trình con. Sau đó ghép nối các
chương trình con thành chương trình chính.
Khi lập trình
trên máy tính
Chương trình con là
gì?
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ể thực hiện (được gọi) từ nhiều vị trí
trong chương trình.
6
Ví dụ : Tính S= n! + 4n! - 2(n-1)! + (n+2)!
Tại sao bài này sử
dụng chương trình
con ??????
7. 7
Khái niệm chương trình con
Ví dụ : Tính tổng bốn lũy thừa :
Tluythua = an + bm +cp + dq
Mỗi tổ thảo luận và viết chương trình tính lũy thừa :
Tổ 1 : tính an .
Tổ 2 : tính bm .
Tổ 3 : tính cp .
Tổ 4 : tính dq .
Mỗi tổ cử thành viên lên bảng ghi kết quả.
Thời gian: 3 phút.
7
8. program tinh_tong;
var TLuythua, Luythua1, Luythua2, Luythua3, Luythua4 : real;
a,b,c,d : real;
i, n, m, p, q : integer;
begin
write(‘Hãy nhập dữ liệu theo thứ tự a, b, c, d, m, n, p, q: ‘);
readln(a, b, c, d, m, n, p, q);
Luythua1 := 1.0;
for i := 1 to n do
Luythua1 := Luythua1*a;
Luythua2 := 1.0;
for i := 1 to m do
Luythua2 := Luythua2*b;
Luythua3 := 1.0;
for i := 1 to p do
Luythua3 := Luythua3*c;
Luythua4 := 1.0;
for i := 1 to q do
Luythua4 := Luythua4*d;
TLuythua := Luythua1 + Luythua2 + Luythua3 + Luythua4;
writeln(‘Tổng lũy thừa = ‘, TLuythua: 8: 4);
readln
end.
8
var j : integer;
Tich := 1.0;
for j := 1 to k do
Tich :=Tich*x;
Tên CTC: Luythua
Biến : x và k
Luythua
(a, n);
Luythua
(b, m);
Luythua
(c, p);
Luythua
(d, q);
9. 9
Lợi ích
chương trình
con
Tránh sự lặp đi
lặp lại cùng
một dãy lệnh
nào đó
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 hóa
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
Tổ chức các
dãy lệnh tương
tự nhau thành
chương trình
con
Chỉ cần gọi
chương trình
con khi cần
Có thể giao cho nhiều
người cùng viết 1 chương
trình, mỗi người viết 1
chương trình con, sau đó
lắp ghép chúng lại thành
chương trình chính
Sử dụng kết quả
được thực hiện bởi
chương trình con mà
không quan tâm đến
cài đặt
Việc thiết kế chương
trình con rất cần
thiết, mở rộng khả
năng ứng dụng ngôn
ngữ
Dễ đọc, dễ hiểu, dễ
kiểm tra, hiệu chỉnh
và không ảnh hưởng
đến các chương
trình con khác
9
10. Hàm
Thủ
tục
Cho một số hàm và thủ tục chuẩn
sau:length(x),copy(s,vt,n), Writeln, pos(s1,s2),
Delete(st,vt,n), Sin(x), readln, sqrt(x),
insert(s1,s2,vt)...
Sin(x),sqrt(x),
pos(s1,s2),
length(x),copy(s,vt,n)
...
Writeln,readln và
Delete(st,vt,n),
insert(s1,s2,vt)...
2.Phân Loại Chương Trình Con
10
11. 11
TÍNH DIỆN TÍCH CỦA 1
TAM GIÁC
Function Dientich( a, b, c:
integer ) : real;
Var dt,p : real;
Begin
p := (a+b+c)/2;
dt := sqrt(p* (p-a)*(p-b)*(p-c));
Dientich := dt;
End;
- Có kết quả trả về là một số thực .
12. Vậy các em cho biết hàm có đặc
điểm gì ?(hay hàm là gì ?).
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
Hàm
(function)
12
13. 13
Xét thủ tục Writeln:
Writeln(‘‘độ dài các cạnh’’)
Thủ tục Writeln(” độ dài các cạnh’’) làm gì ? cho kết
quả là gì ? có trả về giá trị nào không ?.
-Dùng để đưa kết quả ra màn hình
-Cho kết quả xuất trên màn hình dòng chữ “ độ dài
các cạnh”.
-Không trả về giá trị nào cả.
XUẤT RA CÁC KÝ TỰ
PROCEDURE xuatkitu(k:
integer, ky_tu:char);
Var i: integer;
Begin
For i:=1 to k do
Writeln(ky_tu);
End;
- Kết quả trả về không phải là một
giá trị.
14. 14
Vậy các em cho biết thủ tục có đặc điểm
gì ?
(hay thủ tục là gì ?).
Thủ tục
(procedure)
Là chương trình con
Thực hiện một số thao tác nào đó
Không trả về một giá trị qua tên
của nó
16. <Phần đầu>
[<Phần khai báo >]
<Phần thân >
khai báo tên của chương trình con,
nếu là hàm phải khai báo kiểu dữ
liệu trả về của hàm
khai báo biến cho dữ liệu vào và ra,
các hằng và biến dùng trong chương
trình con
dãy câu lệnh
Ghép thành câu thích hợp
17. <Phần đầu>
[<Phần khai báo >]
<Phần thân >
khai báo tên của chương trình con,
nếu là hàm phải khai báo kiểu dữ
liệu trả về của hàm
khai báo biến cho dữ liệu vào và ra,
các hằng và biến dùng trong chương
trình con
dãy câu lệnh
ĐÁP ÁN:
17
18. Ví dụ:
Function Dientich( a, b, c:Integer ) : Real;
Var dt,p : Real;
Begin
p := (a+b+c)/2;
dt := sqrt(p* (p-a)*(p-b)*(p-c));
Dientich := dt;
End;
<Phần đầu> [<Phần khai
báo>]
<Phần thân>
18
19. <Phần đầu>
[<Phần khai báo>]
<Phần thân>
[<Phần khai báo>]
<Phần thân>
Vậy sự khác nhau của 2 cấu trúc trên là
gì???
19
20. Chương trình con nhất thiết phải có tên và
phần đầu để khai báo tên, nếu là hàm thì phải
khai báo kiểu dữ liệu cho giá trị trả về của hàm
Cấu trúc của chương trình con
20
21. Program TinhDT;
Uses crt;
Var a, b, c : real;
Function Dientich( a, b, c: integer ) : real;
Var dt,p : real;
Begin
p := (a+b+c)/2;
dt := sqrt(p* (p-a)*(p-b)*(p-c));
Dientich := dt;
End;
Begin
writeln(‘Nhap vao do dai 3 canh’);
readln(a,b,c);
writeln(Dientich(a,b,c));
writeln(Dientich(10,6,5));
Readln
End.
?
21
22. Var a, b, c : real;
Var dt,p : real;
BIẾN TOÀN CỤC
BIẾN CỤC BỘ
Khai báo ở đầu
chương trình chính
Tồn tại suốt CT, ảnh
hưởng toàn bộ CT
Khai báo trong
chương trình con
Hình thành khi gọi CTC và
biến mất khi CTC kết thúc
22
23. THỰC HIỆN CHƯƠNG TRÌNH CON
Lệnh gọi chương trình con
Tên chương trình con([thamso]);
Dientich(4,7,5);
Tên CTC Tham số
24
24. THAM SỐ HÌNH
THỨC
Các biến được khai
báo cho dữ liệu vào/
ra
THAM SỐ THỰC
SỰ
Hằng và biến chứa
DL vào ra tương ứng
với TSHT đặc trong
cặp dấu ().
23