Tải bản đầy đủ (.doc) (122 trang)

Tai lieu boi duong hoc sinh gioi Tin 9

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.2 MB, 122 trang )

 Tài liệu bồi dưỡng học sinh giỏi Tin 9

...................................  Văn Trọng-Tân Hội-ĐT

Giáo dục có rễ đắng mà
trái ngọt.
Aristote
(384-322
T.C.N)HỌC
Chương 1: MỘT
SỐ VẤN
ĐỀ TOÁN
I. HỆ ĐẾM:

1. Hệ đếm thập phân (Decimal): Có 10 chữ số biểu diễn (0,1,2,3,4,5, 6,7,8,9)
Dạng tổng quát: a1a2…an = a1.10n-1+ a2.10n-2+… +an.100
VD: 35710 = 3.102+5.101+7.100
(Lưu ý: Thường khi viết số ở hệ đếm thập phân người ta không ghi cơ số)

2. Hệ đếm nhị phân (Binary): Có 2 chữ số biểu diễn (0,1)
a. Dạng tổng quát: a1a2…an = a1.2n-1 + a2.2n-2 + … + an.20
VD: 10102 = 1.23 + 0.22 + 1.21 + 0.20 = 10
(Lưu ý: Đây chính là cách quy đổi từ hệ nhị phân sang hệ thập phân)
b. Cách quy đổi từ thập phân sang nhị phân:
- Bước 1: Chia liên tiếp số cần đổi cho 2 đến khi thương bằng 0.
- Bước 2: Viết ngược lại số dư, ta được số mới trong hệ nhị phân.
VD: Đổi số 6 từ hệ thập phân sang hệ nhị phân, ta làm như sau:
6 2
0 3 2
Ngừng
1 1 2


chia
1 0
Kết quả: 6 = 1102

3. Hệ đếm thập lục phân (Hexa):
Có 16 chữ số biểu diễn (0,1,2,3,4,5, 6,7,8,9,A,B,C,D,E,F)
a. Dạng tổng quát: a1a2…an = a1.16n-1 + a2.16n-2 + … + an.160
VD: 37Dh = 3.162 + 7.161 + 13.160 = 893
(Lưu ý: Đây chính là cách quy đổi từ hệ Hexa sang hệ thập phân)
b. Cách quy đổi từ TP sang Hexa:
- Bước 1: Chia liên tiếp số cần đổi cho 16 đến khi thương bằng 0.
- Bước 2: Viết ngược lại số dư, ta được số mới trong hệ Hexa.
(Lưu ý: Nếu số dư lớn hơn 9 ta quy đổi thành A, B, C, D, E, F)
c. Cách quy đổi nhanh từ hệ Hexa sang hệ nhị phân và ngược lại:
Nhận xét: Số lớn nhất trong hệ Hexa có thể đổi ra 4 chữ số trong hệ nhị phân (1111=F). Do đó
muốn đổi từ hệ Hexa ra hệ nhị phân, ta đổi từng con số Haxa ra nhóm 4 số nhị phân (nếu chưa đủ 4 chữ
số nhị phân ta phải thêm các chữ số 0 vào phía trước). Ngược lại, muốn đổi từ hệ nhị phân sang Hexa, ta
nhóm từ phải sang trái, mỗi nhóm 4 số rồi quy đổi từng nhóm sang hệ Hexa.
 Tổng quát:
- Muốn đổi a1a2…an từ hệ X sang hệ thập phân, ta tính giá trị của đa thức:
a1.Xn-1+ a2.Xn-2+… +an.X0
- Muốn đổi một số từ hệ thập phân sang hệ X, ta chia liên tiếp số đó cho X cho đến khi thương
bằng 0. Viết ngược lại số dư ta được số trong hệ X.
- Muốn đổi một số từ hệ X sang hệ Y, ta đổi số từ hệ X sang hệ thập phân, sau đó đổi kết quả từ
hệ thập phân sang hệ Y.
II. TẬP HỢP:

1



 Tài liệu bồi dưỡng học sinh giỏi Tin 9

...................................  Văn Trọng-Tân Hội-ĐT

1. Phép hợp (Union): A  B = {x | x ∈ A hoặc x ∈ B}
2. Phép giao (Intersection): A  B = {x | x ∈ A và x ∈ B}
(Lưu ý: Khi A  B = φ ta nói rằng A và B là hai tập phân biệt)

3. Phép trừ (Difference): A \ B = {x | x ∈ A và x ∉ B}
4. Phép nhân (Multiplication): A × B = { (a,b) | a ∈ A và b ∈ B}
5. Phép phân hoạch (Partition):

Cho X là một tập hợp (X ≠ φ).
Tập X được chia ra thành các tập con A i (Ai ≠ φ), họ các tập con Ai này được gọi là 1 phân hoạch
(hay chia lớp) của tập X khi nó giao nhau từng đôi một bằng rỗng và hợp lại bằng tập lớn X. Tức là: A  B
= φ, ∀ i ≠ j




i

Ai = X.

6. Hiệu đối xứng (Symmetric difference): A ∆ B = (A \ B)  (B \ A)
Các ký hiệu tập hợp số thường dùng: N (số tự nhiên), N* (số tự nhiên khác không), Z (số nguyên) , Q (số
hữu tỉ), I (số vô tỉ), R (số thực), P (số nguyên tố).
III. SỐ NGUYÊN TỐ - ƯỚC SỐ CHUNG LỚN NHẤT - BỘI SỐ CHUNG NHỎ NHẤT:

1. Số nguyên tố:

Khái niệm: Số nguyên tố là số tự nhiên lớn hơn 1, chỉ có 2 ước là 1 và chính nó.
Định lí: Mọi hợp số n đều có ít nhất một ước nguyên tố không vuợt quá n .

2. Ước số chung lớn nhất – Bội số chung nhỏ nhất:
- Thuật toán Euclid: Để tìm ƯCLN (a,b), ta có thể làm bằng cách trừ liên tiếp số lớn cho số nhỏ tới khi 2
số bằng nhau, giá trị cuối cùng của a hoặc b chính là ƯCLN (a,b).
- Bổ đề: ƯCLN (a,0) = |a|, ∀ a ≠ 0.
- UCLN (a,b)·BCNN (a,b)=a·b⇔BCNN (a,b)=

a.b
a.b
⇔UCLN (a,b)=
UCLN(a, b)
BCNN(a,b)

3. Số nguyên tố cùng nhau: Hai số có UCLN bằng 1 gọi là hai số nguyên tố cùng nhau.
IV. PHÂN SỐ:
a
c
1. Phân số bằng nhau: = ⇔ ad = bc
b
d
2. Phân số tối giản:
- Khi chia tử và mẫu của một phân số cho UCLN của chúng ta được phân số tối giản.
V. PHƯƠNG TRÌNH - BẤT PHƯƠNG TRÌNH:

1. Phương trình bậc nhất: ax + b = 0

(a ≠ 0)


b
a
Lưu ý: Nếu a = 0 thì ax + b = 0 ⇔ b = 0. Khi đó:
Phương trình có nghiệm là x = -

b ≠ 0 thì phương trình vô nghiệm;
b = 0 thì PT có vô số nghiệm.

2. Phương trình bậc hai: ax2 + bx + c = 0 (a ≠ 0).
a) Dạng khuyết c (c=0): ax2 + bx = 0
x = 0
x = 0


ax + bx = 0 ⇔ x. (ax + b) = 0 ⇔ 
x = − b
ax + b = 0
a

2

b) Dạng khuyết b (b=0): ax2 + c = 0

2


 Tài liệu bồi dưỡng học sinh giỏi Tin 9

...................................  Văn Trọng-Tân Hội-ĐT


+ Nếu a và c cùng dấu: phương trình vô nghiệm.
+ Nếu a và c khác dấu: ax2 + c = 0 ⇔ ax 2


c
x = −
c
a
=−c ⇔ x 2 =− ⇔

a
c
x = − −
a


c) Dạng đầy đủ: ax2 + bx + c = 0
+ Ta tính ∆ = b2 – 4ac
+ Nếu ∆ < 0: phương trình vô nghiệm.
+ Nếu ∆ = 0: phương trình có 1 nghiệm x = –

b
2a

+ Nếu ∆ > 0: phương trình có 2 nghiệm phân biệt: x1=

−b + ∆
−b − ∆
; x2=
2a

2a

Lưu ý:
- Nếu khuyết a (a = 0) thì phương trình ax 2 + bx + c = 0 trở thành phương trình bậc nhất ax + b =
0.
- Trong toán học ta còn có thể tìm nghiệm của phương trình bậc 2 bằng cách tính ∆’ (nếu b chẵn)
hoặc tính nhẩm nghiệm trong các trường hợp a+b+c=0, a-b+c=0. Tuy nhiên những cách này ít dùng
trong lập trình.

3. Phương trình trùng phương: ax4 + bx2 + c = 0 (a ≠ 0)

(*)
Cách giải: Ta đặt t = x2, khi đó phương trình (*) trở thành at2 + bt + c = 0 (**)
Giải (**) theo ẩn t.
Nếu (**) có các nghiệm t >= 0 thì (*) có nghiệm là ± t , ngược lại thì (*) vô nghiệm.

4. Bất phương trình bậc nhất: ax + b > 0

(a ≠ 0)
b
Nếu a > 0 thì bất phương trình có nghiệm là x > a
b
Nếu a < 0 thì bất phương trình có nghiệm là x < a
Lưu ý:
- Nếu khuyết a (a = 0) thì ax + b > 0 ⇔ b > 0. Khi đó: b ≤ 0 thì BPT vô nghiệm;
b > 0 thì BPT có vô số nghiệm.
- Các dạng khác của bất phương trình bậc nhất: ax + b ≥ 0, ax + b < 0, ax + b ≤ 0)

a x + b y = c
5. Hệ phương trình bậc nhất 2 ẩn số (Giải bằng định thức): 

a ' x + b ' y = c '
a b 
c b 
a c 
Dy = 
Dx = 
D= 
 = cb' - c'b
 = ab' - a'b
 = ac' - a'c
 a' c'
 c' b'
 a' b'
Nếu D = 0 thì:

+ Nếu Dx ≠ 0 hoặc Dy ≠ 0 thì hệ PT vô nghiệm;
+ Nếu Dx = Dy = 0 thì hệ PT có vô số nghiệm.
Dy
D
Nếu D ≠ 0 thì hệ PT có nghiệm duy nhất: x = x và y =
D
D
Lưu ý: Trong toán học ta có thể giải hệ phương trình bậc nhất 2 ẩn bằng phương pháp thế hoặc phương
pháp cộng đại số. Tuy nhiên những cách đó ít dùng trong lập trình.

3


 Tài liệu bồi dưỡng học sinh giỏi Tin 9


...................................  Văn Trọng-Tân Hội-ĐT

VI. HÀM SỐ - ĐỒ THỊ:

1. Hàm số bậc nhất: y = ax + b (a ≠ 0)
- Tập xác định: ∀x∈ R
- Tính chất biến thiên: đồng biến trên R khi a>0; nghịch biến trên R khi a<0.
- Cách vẽ đồ thị của hàm số y = ax + b:
Cho x = 0 ⇒ y = b, ta được A (0;b)
b
b
Cho y = 0 ⇒ x = − , ta được B ( − ;0)
a
a
b
Vậy đồ thị hàm số là một đường thẳng đi qua hai điểm A (0;b) và B ( − ;0).
a
- Cách vẽ đồ thị của hàm số y = ax:
Cho x = 1 ⇒ y = a, ta được A (1;a)
Vậy đồ thị là một đường thẳng đi qua gốc tọa độ O (0;0) và qua điểm A (1;a).
- Vị trí tương đối của hai đường thẳng (d) y = ax + b và (d’): y = a’x + b’:
(d) // (d’) ⇔ a = a’; b ≠ b’
(d) ≡ (d’) ⇔ a = a’; b = b’
(d) cắt (d’) ⇔ a ≠ a’
(d) cắt (d’) tại một điểm trên trục tung ⇔ a ≠ a’; b = b’
(d) ⊥ (d’) ⇔ a.a’ = -1
Lưu ý: Tọa độ giao điểm (nếu có) của (d) và (d’) là nghiệm x, y của hệ phương trình
ax + b = y
(Nếu hệ vô nghiệm thì (d) và (d’) không cắt nhau)


a ' x + b ' = y
- Độ dài đoạn thẳng AB với A (x1,y1), B (x2,y2): AB = ( x2 − x1 ) 2 + ( y2 − y1 ) 2
- Để xác định hàm số y = ax + b biết đồ thị của nó đi qua 2 điểm A (x 1,y1), B (x2,y2), ta chỉ việc giải hệ
ax1 + b = y1
phương trình 
để tìm giá trị của a và b, sau đó thay giá trị a, b vào hàm số y = ax + b.
ax2 + b = y2
- Để xét xem 3 điểm A (x1,y1), B (x2,y2), C (x3,y3) trong hệ trục tọa độ có thẳng hàng hay không, ta chỉ
việc tìm hàm số y = ax + b đi qua 2 điểm A và B, sau đó xét xem điểm C (x 3,y3) có thuộc đường thẳng y =
ax + b hay không.
(C (x3,y3) thuộc đường thẳng y = ax + b ⇔ y3 = ax3 + b)

2. Hàm số: y = ax2 (a ≠ 0)
- Tập xác định: ∀x∈ R
- Tính chất biến thiên:
+ Nếu a>0 thì hàm số đồng biến khi x>0 và nghịch biến khi x<0
+ Nếu a<0 thì hàm số đồng biến khi x<0 và nghịch biến khi x>0
- Đồ thị của hàm số y = ax 2 là một Parabol có đỉnh O (0;0) và nhận trục Oy làm trục đối xứng. Nếu a>0
thì đồ thị nằm phía trên trục hoành Ox; nếu a<0 thì đồ thị nằm phía dưới trục hoành Ox.

- Cách vẽ đồ thị của hàm số y = ax2:
+ Lập bảng giá trị tương ứng:

4


 Tài liệu bồi dưỡng học sinh giỏi Tin 9

...................................  Văn Trọng-Tân Hội-ĐT


X
- x1
- x2
0
x2
x1
2
Y = ax
y1
y2
0
y2
y1
+ Biểu diễn các điểm có tọa độ như bảng trên. Vẽ Parabol đi qua các điểm đó.
- Quan hệ giữa (P) y = ax2 (a ≠ 0) và đường thẳng (D) y = mx + n:
Phương trình hoành độ giao điểm của (P) và (D) là:
ax2 = mx + n ⇔ ax2 – mx – n = 0 (*)
+ (P) cắt (D) tại hai điểm phân biệt ⇔ (*) có hai nghiệm phân biệt (∆>0)
+ (P) tiếp xúc (D) ⇔ (*) có nghiệm kép (∆=0)
+ (P) và (D) không có điểm chung ⇔ (*) vô nghiệm (∆<0)
Mở rộng: Đồ thị hàm số y = ax2 + bx + c cũng là một Parabol có tọa độ đỉnh là ( −

b
V
,−
).
2a 4a

Giữa (P) y = ax2 + bx + c và đường thẳng (D) y = mx + n cũng có quan hệ như trên, nhưng
phương trình hoành độ giao điểm là:

ax2 + bx + c = mx + n ⇔ ax2 + bx + c - mx - n = 0 ⇔ ax2 + (b–m)x + c – n = 0
VII. SỐ GẦN ĐÚNG – SAI SỐ:

∆a = ā –a

- Nếu a là số gần đúng của số đúng ā thì

được gọi là sai số tuyệt đối của số gần đúng a.

- Nếu ∆ a = ā – a ≤ d thì − dā≤– a d≤
hay a − dā≤ a≤ d+ , ta nói a là số gần đúng của số đúng ā với độ
chính xác d, và quy ước viết gọn là ā = a ± d.
VIII. GIẢI TÍCH TỔ HỢP:

1. Hoán vị:
- Cho tập hợp A có n phần tử (n >0). Khi sắp xếp n phần tử này theo một thứ tự, ta được 1 hoán vị các
phần tử của tập A.
- Số các hoán vị của một tập hợp có n phần tử là: Pn = 1.2.3…... (n-1).n = n!

2. Chỉnh hợp:
- Cho tập hợp A gồm n phần tử. Mỗi cách sắp k phần tử của tập hợp A (1≤ k≤ n) theo một thứ tự nhất
định gọi là một chỉnh hợp chập k của n phần tử của tập A.
- Số các chỉnh hợp chập k của một tập hợp có n phần tử (1≤ k ≤ n) là:

A

k

= n(n − 1)...(n − k + 1) =
n


n!
(Lưu ý: 0! = 1)
(n − k)!

3. Tổ hợp:
- Cho tập hợp A gồm n phần tử. Mỗi cách sắp k phần tử của tập hợp A (1≤ k ≤ n) (không quan tâm thứ
tự) gọi là một tổ hợp chập k của n phần tử của tập A.
- Số các tổ hợp chập k của một tập hợp có n phần tử (1≤ k ≤ n) là:
k

C = Ak!
k
n

n

=

n(n − 1)...(n − k + 1)
n!
=
k!
k!(n − k)!

5


 Tài liệu bồi dưỡng học sinh giỏi Tin 9


...................................  Văn Trọng-Tân Hội-ĐT

IX. CẤP SỐ CỘNG – CẤP SỐ NHÂN:

1. Cấp số cộng: Cấp số cộng là một dãy số (hữu hạn hoặc vô hạn), trong đó kể từ số hạng thứ hai, mỗi số
hạng đều bằng số hạng đứng ngay trước nó cộng với một số không đổi d. Số d được gọi là công sai của
cấp số cộng. Nếu (Un) là một cấp số cộng với công sai d, ta có công thức truy hồi: U n + 1 = U n + d với n ∈
N*
n(a + a )
Công thức tính tổng n số hạng đầu của cấp số cộng: Sn = 1 n
2

2. Cấp số nhân: Cấp số nhân là một dãy số (hữu hạn hoặc vô hạn), trong đó kể từ số hạng thứ hai, mỗi số
hạng đều là tích của số hạng đứng ngay trước nó với một số không đổi q. Số q được gọi là công bội của
cấp số nhân. Nếu (Un) là một cấp số nhân với công bội q, ta có công thức truy hồi: U n + 1 = U n .q với n ∈ N*
Công thức tính tổng n số hạng đầu của cấp số nhân: Sn =

u1 (1 − q n )
1− q

X. LŨY THỪA – LOGARIT:

1. Lũy thừa:
Am+n = Am.An ;

A

−n

Am-n =


Am
(A≠0) ;
An

(Am)n = Am.n ;

1
A0
1
−n
0−n
= n (A = A = n = n ) ;
A
A
A

m
n

a = n am

n

(n am = a

m
.n
n


n

= (a

(A.B)n = An. Bn ;

A =1 (A = A
0

0

m
n

) n =a

m
n

n −n

An
= n =1)
A

)

Lưu ý: + Khi không có dấu ngoặc thì thứ tự thực hiện lũy thừa là từ trên xuống:
b
(b )

b
b.c
a c = a c ≠ (a )c= a
+ Số mũ của lũy thừa còn có thể là số thực và trong lập trình thường được định nghĩa bằng cách
sử dụng logarit (xem phần ứng dụng trong lập trình).

2. Logarit:
Khái niệm: Cho hai số dương a, b với a khác 1. Số x thoả mãn đẳng thức a x = b được gọi là lôgarit cơ
số a của b và kí hiệu là logab. Ta có: x = logab ⇔ ax = b
Tính chất:
• loga 1 = 0 (a0 = 1 ⇔ loga 1 = 0)
• loga a = 1 (a1 = a ⇔ loga a = 1)
log b
log b
• a a = b (x = logab ⇔ ax = b. Thay x = logab vào ax ta có: a a = b)
• loga ax = x (loga ax = x ⇔ ax = ax)

3. Logarit tự nhiên (Logarit cơ số e – Logarit Nêpe):
Số e là hằng số quan trọng của toán học, e ≈ 2.718. Ta có: x = logeb ⇔ ex = b. logeb gọi là gogarit
tự nhiên của b và viết tắt là ln b.

4. Ứng dụng trong lập trình:
Trong Pascal chỉ có 2 hàm liên quan đến số mũ là : Exp (x) = ex và Ln (x) =ln x
log A
ln A n
n.ln A
⇒ An = Exp (n*LN
(A))
- Tính An: An = (e e )n = (e
) =e

A
1
log A 1
ln A 1 1 .ln A ⇒ n
A = Exp (1/n*LNb (A))
- Tính n A : n A =A n = (e e ) n = (e
) n =e n

c

XI. HÌNH HỌC:

6

B

b
'

h

H

a

c
'

C



 Tài liệu bồi dưỡng học sinh giỏi Tin 9

...................................  Văn Trọng-Tân Hội-ĐT

1. Định lí Py-ta-go: Tam giác ABC vuông tại A ⇒ BC2 = AB2 + AC2
2. Hệ thức lượng trong tam giác vuông:
b2=ab’ (c2=ac’); h2=b’c’; bc = ah;

1
1 1
= 2+ 2
2
h
b c

3. Trong một tam giác bất kỳ với 3 cạnh là a, b, c:
+ Ta luôn có a + b > c; a + c > b; b + c > a
+ Ta có thể tính diện tích tam giác theo công thức Hê-rông:
S=

p ( p − a )( p − b )( p − c )

Trong đó p là nửa chu vi: p =

4. Tỉ số lượng giác của góc nhọn:
Sinα =

tgα =


®
èi  AC 
=
÷
huyÒn 
 BC 

®
èi  AC 
=
÷
kÒ
 AB 

cosα =

kÒ  AB 
=
÷ Caïnh keà
huyÒn 
 BC 

cotgα =

kÒ AB 
=
÷
®
èi 
 AC 


B

c = a.Sinβ = a.Cosα
c = b.tg β = b.Cotgα

6. Arcsin, Arccos, Arctan, Arccotg:

Caïnh ñoá
i

α

C
Caïnh huyeà
n

B

5. Một số hệ thức về cạnh và góc trong tam giác vuông:
b = a.Sinα = a.Cos β
b = c.tgα = c.Cotg β

a +b +c
2
A

α
a


c

β

A

b

Arcsin a = số đo của cung có sin bằng a.
Arccos a = số đo của cung có cos bằng a.
Arctan a = số đo của cung có tang bằng a.
Arccotg a = số đo của cung có cotang bằng a.

π

0

180 
rad và 1 rad = 
7. Đổi độ sang Radian và ngược lại: 1 =

÷
180
 π 
0

8. Một số công thức tính chu vi, diện tích:
- Chu vi hình vuông: C = 4a (với a là cạnh hình vuông)
- Diện tích hình vuông: S = a 2 (với a là cạnh hình vuông)
- Chu vi hình chữ nhật: C = 2(a + b) (với a là chiều dài, b là chiều rộng)

- Diện tích hình chữ nhật: S = ab (với a là chiều dài, b là chiều rộng)
1
- Diện tích hình tam giác: S = ah (với a là cạnh đáy, h là đường cao thuộc cạnh đáy)
2
1
- Diện tích hình thang: S = ( a +b) h (với a là đáy lớn, b là đáy nhỏ, h là đường cao)
2
- Chu vi đường tròn: C = 2πR (với R bán kính)
- Diện tích hình tròn: S = πR2 (với R bán kính)

7

C


 Tài liệu bồi dưỡng học sinh giỏi Tin 9

...................................  Văn Trọng-Tân Hội-ĐT

Học, học nữa, học mãi.
Vladimir Ilyich Lenin (18701924)
Chương 2: MỘT SỐ VẤN ĐỀ CƠ BẢN TRONG PASCAL
I. GIẢI THUẬT:
a. Khái niệm:
Giải thuật (còn gọi là thuật toán) là một tập hữu hạn các thao tác (các công việc, các phép toán…) có
thể đặt tên được và chúng được thực hiện theo một trình tự thích hợp đối với một số đối tượng nào đó để
đạt được điều mong muốn.
b. Biểu diễn giải thuật:
Thông thường, người ta sử dụng một trong 4 cách sau để biểu diễn giải thuật:
- Liệt kê: Là hình thức liệt kê từng bước bằng ngôn ngữ tự nhiên.

- Lưu đồ: Là hình thức biểu diễn giải thuật dưới dạng sơ đồ.
- Dùng ngôn ngữ lập trình.
- Dùng ngôn ngữ mã giả.
II. CÁC PHÉP TOÁN CƠ BẢN – TỪ KHÓA, TÊN TỰ ĐẶT:
1. Các phép tính: + ; - ; * ; / (chia cho thương là số thực); DIV (chia lấy phần nguyên); MOD (chia
lấy phần dư); IN (thuộc về - dùng cho tập hợp)
 Lưu ý: phép + có thể dùng để cộng hai chuỗi hoặc cộng hai tập hợp; phép trừ có thể dùng để trừ hai
tập hợp; phép * có thể dùng để lấy phần giao của hai tập hợp; phép DIV, MOD không dùng được
với số thực.
2. Các phép so sánh: > ; < ; = ; <> ; >= ; <=
3. Từ khóa: Là các từ của riêng Pascal, không được dùng vào những việc khác hoặc đặt tên mới trùng
với từ khóa.
Các từ khóa bao gồm: And, Array, Begin, Case, Const, Div, Do, Downto, Else, End, File, For,
Function, Goto, If, In, Label, Mod, Nil, Not, Of, Or, Packed, Procedure, Program, Record,
Repeat, Set, String, Then, To, Type, Until, Uses, Var, While, With
4. Tên tự đặt: Là một dãy ký tự dùng để đặt tên chương trình, biến, hằng, nhãn, thủ tục, hàm… Tên
phải bắt đầu bằng một chữ cái và theo sau là các chữ cái, chữ số, dấu “_” (gạch nối dưới). Tên không
được có khoảng trắng, không được chứa ký hiệu đặc biệt và không được trùng với từ khóa. Độ dài tối
đa của tên là 127 ký tự. Không nên đặt tên trùng với tên chuẩn của Pascal.
Một số tên chuẩn của Pascal: Abs, Arctan, Boolean, Byte, Char, Chr, Cos, Eof, Exp, False,
Integer, New, Old, Read, Readln, Real, Reset, Rewrite, Round, Sin, Sqr, Sqrt, Text, True, Write,
Writeln.
III. BIẾN, HẰNG, LỆNH GÁN - MỘT SỐ THỦ TỤC CƠ BẢN:
1. Biến: Biến là những đại lượng có thể thay đổi giá trị. Tên của biến là tên vùng nhớ lưu trữ dữ liệu.
Cách khai báo biến: Var <DS tên biến>: <kiểu dữ liệu>;
(Một số kiểu cơ bản: Integer, Real, Char, String, Boolean...)
VD: Var n,p: Integer; f: Boolean;
2. Hằng: Hằng là những đại lượng không thay đổi giá trị. Tên của hằng là tên vùng nhớ lưu trữ dữ liệu.
Cách khai báo hằng:
Const <tên hằng> = <giá trị hằng>; (VD: Const Pi = 3.14;)


8


 Tài liệu bồi dưỡng học sinh giỏi Tin 9

...................................  Văn Trọng-Tân Hội-ĐT

 Tổng quát: Một chương trình thường có những khai báo theo thứ tự sau:
Khai báo tên chương trình: PROGRAM <Tên chương trình>;
Khai báo sử dụng đơn vị chương trình: USES <DS đơn vị chương trình>;
Khai báo nhãn: LABEL <Tên nhãn>;
Khai báo hằng : CONST <tên hằng> = <Giá trị>;
Khai báo kiểu dữ liệu mới: TYPE <Tên kiểu DL mới> = <Định nghĩa kiểu>;
Khai báo biến: VAR <DS biến 1>: <Kiểu DL 1>; <DS biến 2>: <Kiểu DL 2>;
Khai báo thủ tục: PROCEDURE <Tên thủ tục> (Các tham số nếu cần);
Khai báo hàm: FUNCTION <Tên hàm> (Các tham số nếu cần):<Kiểu DL hàm>;
3. Ghi chú trong chương trình: {nội dung ghi chú} hoặc (* nội dung ghi chú *)
4. Lệnh gán: <Biến>:= <Biểu thức>; (VD: x:= -b/a;)
5. Thủ tục nhập:
Read (DS biến); hoặc Readln (DS biến); {Nhập vào DS biến các giá trị từ bàn phím}
(Lưu ý: Nếu nhập nhiều biến một lần thì mỗi biến phải cách nhau 1 khoảng trắng)
Read (F, DS biến); hoặc Readln (F, DS biến); {Đọc từ tệp F vào DS biến}
Readln; {Chờ nhấn phím Enter}
Thủ tục nhập đặc biệt: Readkey : Char; {Cho kí tự khi gõ phím mà không cần nhấn Enter. Để sử
dụng thủ tục này phải khai báo Uses CRT;}
Hàm KeyPressed : Boolean; cho giá trị True nếu bàn phím có kí tự gõ, ngược lại sẽ có giá trị False.

 Lưu ý về cách viết Thủ tục và Hàm trong tài liệu này:
<Tên Thủ tục / Hàm> (<Các đối số> : <Kiểu của đối số>) : <Kiểu của hàm>

Ví dụ: Ghi Thủ tục FillChar (Var X; N:Word, V)
Có nghĩa là: Tên thủ tục là FillChar. Thủ tục có 3 đối số X, N, V, trong đó X phải là 1 biến
kiểu bất kỳ (tham biến), N phải là số nguyên kiểu Word (biến hoặc giá trị đều được), V là giá trị bất
kỳ (biến hoặc giá trị đều được).
Ghi Hàm Copy (S : String; P,N : Integer) : String
Có nghĩa là: Tên hàm là Copy. Hàm có 3 đối số S, P, N, trong đó S phải là chuỗi (String), P
và N phải là số nguyên kiểu Integer. Kết quả của hàm trả về là chuỗi (String).
Nếu trước đối số có từ VAR thì phải truyền vào đối số ở vị trí đó là biến (không được truyền giá trị
- Về tham biến, tham trị sẽ nghiên cứu trong chương 4). Nếu ghi rõ kiểu của đối số thì phải truyền
đúng kiểu cho đối số đó, nếu không ghi rõ kiểu đối số thì có thể truyền kiểu bất kỳ (Riêng các kiểu
Integer, Byte, ShortInt, LongInt, Word có thể truyền chung tùy từng trường hợp. Nếu đối số là số
nguyên nói chung thì chỉ ghi đại diện bằng từ Integer). Đối số nào có thể có hoặc không có vẫn được
thì ghi trong ngoặc vuông [ ]. Giữa các loại đối số ghi cách nhau dấu chấm phẩy để cho dễ phân loại,
nhưng khi sử dụng ta phải dùng dấu phẩy (không được dùng dấu chấm phẩy).
6. Thủ tục xuất:
Write (DS dữ liệu xuất); hoặc Writeln (DS dữ liệu xuất); {Xuất ra màn hình}
Write (n:d); hoặc Writeln (n:d); {Dành d vị trí để xuất biến nguyên n}
Write (x:d:d1); hoặc Writeln (x:d:d1);{Xuất biến thực x với d vị trí và d1 kí số thập phân}
Write (F, DS dữ liệu xuất); hoặc Writeln (F, DS dữ liệu xuất);{Ghi dữ liệu vào tệp F}
Write (LST, DS dữ liệu xuất); hoặc Writeln (LST, DS dữ liệu xuất);{Xuất ra máy in}
Writeln; {Xuống dòng}
Write (#7); hoặc Write (Chr (7)); {Phát ra một tiếng chuông ở loa của máy}
7. Các thủ tục điều khiển màn hình: (Cần khai báo Uses CRT; trước khi dùng)

9


 Tài liệu bồi dưỡng học sinh giỏi Tin 9

...................................  Văn Trọng-Tân Hội-ĐT


ClrScr: Xóa mành hình
ClrEol: Xóa từ vị trí con trỏ tới cuốn dòng
DelLine: Xóa toàn bộ dòng chứa con trỏ, sau đó dồn các dòng dưới lên
InsLine: Xen một dòng trắng vào màn hình từ vị trí con trỏ
Gotoxy (Cột, Dòng : Byte): Chuyển tới tọa độ cột, dòng
Hàm WhreX : Byte cho giá trị cột hiện thời.
Hàm WhreY : Byte cho giá trị dòng hiện thời.
Textbackground (Color) hoặc Textbackground (từ 0 tới 15 : Byte): Định màu nền.
TextColor (Color) hoặc TextColor (số từ 0 tới 15 : Byte): Định màu chữ.
Windows (X1,Y1,X2,Y2 : Byte): Tạo cửa sổ có tọa độ X1,Y1,X2,Y2 trong màn hình.
LowVideo, NormVideo, HighVideo: điều khiển độ sáng của màn hình.
8. Một số hàm và thủ tục khác:
Hàm MaxInt : Integer Cho giá trị lớn nhất của kiểu Integer.
Hàm MaxLongInt : LongInt Cho giá trị lớn nhất của kiểu LongInt.
Break: Thoát khỏi vòng lặp.
Continue: Bỏ qua những lệnh sau Continue và tiếp tục thực hiện vòng lặp.
Exit: Thoát khỏi khối lệnh. (thường dùng để thoát khỏi chương trình con)
Halt: Thoát khỏi chương trình.
Randomize: Khởi động bộ tạo số ngẫu nhiên để cung cấp cho hàm Random
Hàm Random (N : Word ) : Word cho số nguyên ngẫu nhiên trong nửa đoạn [0;n)
Hàm SizeOf (X) : Integer cho biết kích thước của biến hoặc kiểu x tính theo đơn vị Byte
FillChar (Var X, N : Word, V): Ghi n byte liên tiếp trong bộ nhớ với giá trị V, bắt đầu từ byte đầu tiên
được biến x chiếm giữ. Việc kiểm tra độ dài biến không được thực hiện nên thường phải dùng kèm
theo hàm SizeOf (x).
VD: FillChar (A,SizeOf (A),0); {Điền đầy mảng A với giá trị là số 0}
Sound (F : Word): Tạo âm thanh tần số F tính theo Hz cho đến khi gặp lệnh NOSOUND.
Nosound: Ngừng thực hiện hàm SOUND.
Delay (T : Word): Tạo thời gian trể T tính theo đơn vị mili giây (T là số nguyên).
Goto <Nhãn>: Nhảy vô điều kiện tới <Nhãn> {không nên dùng}

IV. MỘT SỐ CẤU TRÚC ĐIỀU KHIỂN:
1. Câu lệnh điều kiện IF:
Dạng 1: IF <Điều kiện> THEN <Câu lệnh>;
Dạng 2: IF <Điều kiện> THEN <Câu lệnh 1> ELSE <Câu lệnh 2>;
(Lưu ý: Trước ELSE của lệnh IF không được viết dấu chấm phẩy)
2. Câu lệnh lựa chọn CASE:
Dạng 1
Dạng 2
CASE <Biểu thức> OF
CASE <Biểu thức> OF
<Giá trị 1>: <Câu lệnh 1>;
<Giá trị 1>: <Câu lệnh 1>;
<Giá trị 2>: <Câu lệnh 2>;
<Giá trị 2>: <Câu lệnh 2>;
............
............
<Giá trị n>: <Câu lệnh n>;
<Giá trị n>: <Câu lệnh n>;
END;
ELSE <Câu lệnh n+1>;
END;
(Lưu ý: CASE kết thúc bằng END; Trước ELSE của CASE được chấm phẩy )
3. Điều khiển lặp FOR…TO/ FOR…DOWNTO:

10


 Tài liệu bồi dưỡng học sinh giỏi Tin 9

...................................  Văn Trọng-Tân Hội-ĐT


Dạng 1: FOR <Biến đếm>:= <Trị đầu> TO <Trị cuối> DO <Câu lệnh>;
Dạng 2: FOR <Biến đếm>:= <Trị cuối> DOWNTO <Trị đầu> DO <Câu lệnh>;
4. Điều khiển lặp REPEAT…UNTIL: Ngừng lặp khi <Điều kiện> ĐÚNG.
REPEAT
<Câu lệnh 1>;
<Câu lệnh 2>;

<Câu lệnh n>;
UNTIL <Điều kiện>;
5. Điều khiển lặp WHILE…DO: Ngừng lặp khi <Điều kiện> SAI.
WHILE <Điều kiện> DO <Câu lệnh>;
(Sau DO chỉ có 1 câu lệnh, muốn lặp nhiều câu lệnh ta phải dùng câu lệnh ghép)
6. Lệnh ghép: Ở những chỗ ta chỉ được sử dụng 1 câu lệnh, nhưng ta lại muốn sử dụng nhiều hơn 1 câu
lệnh thì phải sử dụng lệnh ghép. Lệnh ghép có dạng:
BEGIN
<Câu lệnh 1>;
<Câu lệnh 2>;

<Câu lệnh n>;
END;

BÀI TẬP CHƯƠNG 2
1. Viết chương trình nhập tổng, hiệu của hai số nguyên a,b rồi in ra giá trị của hai số đó ?
2. Viết chương trình nhập tổng, tích của hai số nguyên a,b rồi in ra giá trị của hai số đó ?
3. Viết chương trình tính tổng các phần tử của cấp số cộng có n phần tử biết rằng phần tử thứ nhất là a và
công sai là d ?
4. Viết chương trình tính tổng các phần tử của cấp số nhân có n phần tử biết rằng phần tử thứ nhất là a và
công bội là q ?
5. Cho 2 số nguyên m và n (1 ≤ m ≤ 12; 0 ≤ n < 60). Hãy xác định thời gian bé nhất mà sau khoảng thời

gian đó hai kim đồng hồ sẽ:
a) Trùng nhau.
b) Vuông góc với nhau.
6. Tuổi cha hiện nay là B và tuổi con là C (0B – C >19).
Viết chương trình kiểm tra xem tuổi cha có gấp đôi tuổi con không ? Nếu đúng thì đưa ra màn hình
thông báo “Tuổi cha gấp đôi tuổi con”. Trong trường hợp ngược lại, hãy tính số năm mà trước đó (hoặc
sau đó) tuổi cha gấp đôi tuổi con và đưa ra thông báo dạng “n năm trước đây tuổi cha gấp đôi tuổi con”
hoặc “sau n năm nữa tuổi cha sẽ gấp đôi tuổi con”.
Ví dụ: Với B=59, C=29 thì thông báo sẽ đưa ra là:
“Sau 1 năm nữa tuổi cha sẽ gấp đôi tuổi con”
7. Viết chương trình tính tổng n số tự nhiên đầu tiên (n là số tự nhiên nhập từ bàn phím).
 Yêu cầu kỹ thuật: Nếu người sử dụng nhập n ≤ 0 thì thông báo “Dữ liệu nhập không hợp lệ” rồi
kết thúc chương trình.
8. Cho n! (n giai thừa) là tích n số tự nhiên dầu tiên (n! = 1.2.3....n). Hãy viết chương trình tính n! với n

11


 Tài liệu bồi dưỡng học sinh giỏi Tin 9

...................................  Văn Trọng-Tân Hội-ĐT

là số tự nhiên nhập vào từ bàn phím (n>0).
9. Nhập số nguyên dương n. Tính:
1.3.5...n (Nếu n lẻ)
n!! =
2.4.6...n (Nếu n chẵn)
10. Bộ ba số nguyên dương a, b, c được gọi là bộ số Py-ta-go nếu tổng các bình phương của hai số bằng
bình phương của số còn lại. Viết chương trình nhập từ bàn phím ba số nguyên dương a, b, c và kiểm

tra xem chúng có là bộ ba số Py-ta-go hay không ?
11. Số tự nhiên n gọi là Amstrong nếu nó bằng tổng lập phương các chữ số của nó.
Ví dụ 153 = 1+125+27. Viết chương trình tìm tất cả các số Amstrong có 3 chữ số.
12. Viết chương trình đổi từ năm dương lịch sang năm âm lịch. Năm dương lịch được biểu diễn bằng một
số nguyên dương, năm âm lịch được biểu diễn bằng 2 từ theo thứ tực Can và Chi. Can và Chi được
lấy lần lượt vòng tròn, năm xuất phát là năm Tân Dậu (ứng với dương lịch là năm 1).
Có 10 Can được lấy theo thứ tự như sau: Canh, Tân, Nhâm, Quý, Giáp, Ất, Bính, Đinh, Mậu,
Kỷ.
Có 12 Chi được lấy theo thứ tự như sau: Thân, Dậu, Tuất, Hợi, Tí, Sửu, Dần, Mão, Thìn, Tỵ,
Ngọ, Mùi. (Lưu ý: Viết Tí, Tỵ để khỏi nhần khi không có dấu thanh tiếng Việt)
13. Viết chương trình để giải bài toán sau:
Trăm trâu ăn trăm bó cỏ
Trâu đứng ăn năm
Trâu nằm ăn ba
Lụ khụ trâu già
Ba con một bó
Hỏi có bao nhiêu con trâu mỗi loại ?.
14. Viết chương trình in tất cả các nghiệm nguyên dương của phương trình: x2 + y2 = n với n nhập từ
bàn phím (n > 0).
15. Viết chương trình nhập một số nguyên từ bàn phím và kiểm tra xem số vừa nhập có phải là lập
phương của một số hay không (tức là có dạng z3 với z là số nguyên)
16. Viết chương trình in bảng cửu chương (từ 2 tới 9) ra màn hình ?
17. Nhập n số nguyên (0< n <= 20). In ra màn hình tam giác cân có chiều cao n:
*
***
***** n
*******
*********
***********
Yêu cầu: Đỉnh tam giác nằm tại dòng 2, tam giác nằm ở giữa màn hình theo chiều ngang.


12


 Tài liệu bồi dưỡng học sinh giỏi Tin 9

...................................  Văn Trọng-Tân Hội-ĐT

Thiên tài gồm một phần trăm
là linh cảm , còn chín mươi chín
phần trăm là mồ hôi.
Thomas Alva Edison (1847-1931)
Chương 3: CÁC KIỂU DỮ LIỆU ĐƠN GIẢN TRONG PASCAL

Kiểu vô hướng
đơn giản

Kiểu dữ liệu

Kiểu dữ liệu có
cấu trúc

Kiểu cơ sở

Kiểu logic (Boolean)
Kiểu số nguyên (Integer)
Kiểu số thực (Real)
Kiểu ký tự (Char)

Kiểu do người

dùng định nghĩa

Kiểu khoảng con
Kiểu liệt kê

Kiểu mảng (Array)
Kiểu tập hợp (Set)
Kiểu bản ghi (Record)
Kiểu tệp (File)

Kiểu xâu ký tự (String)
Kiểu con trỏ (Pointer)
• Lưu ý quan trọng: Các kiểu Boolean, Integer, Char, đoạn con, liệt kê là kiểu dữ liệu đếm được.
Các kiểu khác là kiểu dữ liệu không đếm được. Không được dùng kiểu dữ liệu không đếm được để
làm chỉ số mảng, chỉ số lặp.
I. KIỂU LOGIC (BOOLEAN):
1. Tập giá trị: True, False (kích thước: 1 bit)
2. Khai báo: VAR <DS biến>: Boolean; VD: Var f: Boolean;
3. Đọc / ghi biến Logic: Ta không thể dùng lệnh Read để đọc biến logic. Muốn nhận dữ liệu cho biến
logic, ta phải dùng phép gán. VD: f:=3>5;
Ta có thể dùng lệnh Write để viết giá trị của biến logic ra màn hình. Nhưng thông thường ta chỉ dùng
giá trị của biến logic để làm điều kiện.
4. Các phép toán: And, Or, Xor, Not
A
B
A and B
A or B
A xor B
not A
True

True
True
True
False
False
True
False False
True
True
False
False True
False
True
True
True
False False False
False
False
True
Lưu ý: Các phép so sánh luôn cho giá trị kiểu logic.
5. Ví dụ: Viết chương trình kiểm tra số nhập vào có phải là số nguyên tố không?
Var n,p: Integer; f: Boolean;
Begin
Write ('Nhap n >=2: '); Readln (n);
If n < 2 then
Begin
f:= False;
Halt; {Thoat chuong trinh}
End;
p:=2;

f:= True;

13


 Tài liệu bồi dưỡng học sinh giỏi Tin 9

...................................  Văn Trọng-Tân Hội-ĐT

While (p <= Sqrt (n)) and f do
If n mod p = 0 then f:= false Else p:= p+1;
If f then Write (n, ' la so nguyen to') Else Write (n, ' khong phai la so nguyen to')
Readln;
End.
Lưu ý: Giả sử f là biến logic. Thay vì viết If f=true … , ta chỉ cần viết If f…;
Thay vì viết If f=False…, ta chỉ cần viết If not f …
II. KIỂU SỐ NGUYÊN (INTEGER):
1. Tập giá trị:
Từ khai báo
Phạm vi biểu diễn
Kích thước (Byte)
BYTE
0 .. 255
1
SHORTINT
-128 .. +127
1
INTEGER
-32768 .. 32767
2

WORD
0 .. 65535
2
LONGINT
-2147483648 .. 2147483647
4
2. Khai báo:
VAR <DS biến>: <từ khai báo: Byte, Shortint, Integer, Word, Longint>;
VD: Var i,n: Integer;
3. Đọc / ghi biến nguyên: Ta có thể dùng lệnh Read, Write để đọc / ghi biến nguyên. VD: Readln (n);
s:= 0; For i:=1 to n do s:= s+i; Writeln (s);
4. Các phép toán:
- Phép toán số học: + ; - ; * ; / (chia cho thương là số thực); DIV (chia lấy phần nguyên); MOD (chia
lấy phần dư).
- Phép toán so sánh: > ; < ; = ; <> ; >= ; <=
5. Ví dụ: Viết chương trình hiển thị tất cả các số tự nhiên gồm 3 chữ số sao cho tổng tất cả các chữ
số bằng tích của chúng ?
Var a, b, c: Integer;
Begin
For a:= 1 to 9 do
For b:= 0 to 9 do
For c:= 0 to 9 do
if a+b+c = a*b*c then Writeln (a,b,c);
Readln;
End.
Viết chương trình nhập số nguyên n rồi viết đảo ngược lại số n ?
Var n, n1, cs: Integer;
Begin
Readln (n); n1:= 0; {n1 lưu giá trị đảo ngược của n}
While n <> 0 do

Begin
cs:= n mod 10;
n1:= n1*10+cs;
n:= n div 10;
End;
Writeln (n1);
Readln;
End.
(Lưu ý: Có thể dùng cách tách chữ số như trên để dùng vào các mục đích khác)

14


 Tài liệu bồi dưỡng học sinh giỏi Tin 9

...................................  Văn Trọng-Tân Hội-ĐT

III. KIỂU SỐ THỰC (REAL):
1. Tập giá trị:
Từ khai báo
Phạm vi biểu diễn
Chữ số có nghĩa
Kích thước (Byte)
REAL
2.9E-39 .. 1.7E+38
11-12
6
SINGLE
1.5E- 45 .. 3.4E+38
7-8

4
DOUBLE
5.0E-324 .. 1.7E+308
15-16
8
EXTENDED
3.4E- 4951 .. 1.1E+4932
19-20
10
2. Khai báo:
VAR <DS biến>:<từ khai báo: Real, Single, Double, Extended>;VD: Var x,y,tam: Real;
Lưu ý: Thông thường chỉ dùng kiểu Real. Muốn sử dụng các kiểu thực khác thì phải vào
Options / Compiler và chọn mục 8087 / 80287.
3. Đọc / ghi biến thực: Ta có thể dùng lệnh Read, Write để đọc / ghi biến thực.
VD: Readln (x,y); tam:= x; x:= y; y:= tam; Wrietln (x,' ', y);
4. Các phép toán:
- Phép toán số học: + ; - ; * ; / . (Không dùng DIV, MOD cho số thực)
- Phép toán so sánh: > ; < ; = ; <> ; >= ; <=
5. Một số hàm và thủ tục xử lý số nguyên, số thực:
Hàm Abs (X : Integer / Real) : Integer / Real = x . VD: Abs (-5) = 5
Hàm Sqr (X : Integer / Real) : Integer / Real = x2.
VD: Sqr (2) = 4
Hàm Sqrt (X : Integer / Real) : Integer / Real = x . VD: Sqrt (9) = 3
Hàm Pred (N : Integer) : Integer = n-1.
VD: Pred (3) = 2
Hàm Succ (N : Integer) : Integer = n+1
VD: Succ (3) = 4
Hàm Trunc (X : Integer / Real) : LongInt lấy phần nguyên của x. VD: Trunc (5.75) = 5
Hàm Round (X : Integer / Real) : LongInt làm tròn x. VD: Round (5.75) = 6
Hàm Int (X : Integer / Real) : Real cho giá trị là phần nguyên của x. VD: Int (5.75) = 5.00

Hàm Frac (X : Integer / Real) : Real cho giá trị là phần thập phân của x.
VD: Frac (5.75)=0.75
Thủ tục Inc (Var I : kiểu đếm được; [N : LongInt]) thủ tục tăng giá trị biến i:=i+ 1 [+n]
VD: n:=5; Inc (n); Write (n); {Viết ra màn hình số 6}
Thủ tục Dec (Var I : kiểu đếm được; [N : LongInt]) thủ tục giảm giá trị biến i:=i–1 [-n]
VD: n:=5; Dec (n,2); Write (n); {Viết ra màn hình số 3}
Hàm Odd (N : LongInt) : Boolean cho giá trị True nếu n là số lẻ. VD: Odd (5)=True
Hàm Cos (X : Real) : Real = Cos x (X tính theo Radian). VD: Cos ( (pi/180)*60)=0.5
Hàm Sin (X : Real) : Real = Sin x (X tính theo Radian). VD: Sin ( (pi/180)*30) = 0.5
Hàm Arctan (X : Real) : Real = Arctg x (Kết quả hàm tính theo Radian).
VD: Arctan (1)*180/pi=45.00
2 hàm Exp (x) = ex ; Ln (x) = ln x ⇒ An = Exp (n*LN (A)); n A = Exp (1/n*LN (A))
6. Ví dụ: Viết chương trình nhập 3 số thực x, y, z rồi in ra số có giá trị lớn nhất ?
Var x, y, z, Max: Real;
Begin
Readln (x, y, z);
Max:= x;
If y > Max then Max:= y;
If z > Max then Max:= z;
Writeln (Max:0:2); {dành “đủ” vị trí để in với 2 kí số thập phân}
Readln;
End.
{Lưu ý: Có thể tìm số nhỏ nhất bằng cách tương tự như trên}

15


 Tài liệu bồi dưỡng học sinh giỏi Tin 9

...................................  Văn Trọng-Tân Hội-ĐT


IV. KIỂU KÝ TỰ (CHAR):
1. Tập giá trị: Gồm tốt cả các ký tự trong bảng mã ASCII (American Standard Code for information
Interchange). Lưu ý: 65..90 ⇔ ‘A’.. ‘Z’, 97..122 ⇔ ‘a’.. ‘z’
2. Khai báo: VAR <DS biến>: Char;
3. Đọc / ghi biến kí tự: Ta có thể dùng lệnh Read, Write để đọc / ghi biến ký tự.
4. Các phép toán:
Phép toán so sánh: > ; < ; = ; <> ; >= ; <=
Lưu ý: ch1 > ch2 ⇔ Ord (ch1) > Ord (Ch2)
5. Một số hàm xử lý:
Hàm Ord (C : Char / kiểu đếm được) : LongInt cho thứ tự của kí tự C trong bảng ASCII.
VD: Ord (‘A’)=65
Hàm Chr (N : Byte) : Char cho kí tự có thứ tự là n trong bảng ASCII.
VD: Chr (65)=‘A’
Hàm Pred (C : Char / kiểu đếm được) : Char / kiểu đếm được
Cho ký tự đứng liền trước C trong bảng mã ASCII. VD: Pred (‘B’)=‘A’
Hàm Succ (C : Char / kiểu đếm được) : Char / kiểu đếm được
Cho ký tự đứng liền sau ch trong bảng mã ASCII. VD: Succ (‘B’)=‘C’
Hàm Upcase (C : Char) : Char cho giá trị là ký tự in hoa của ký tự ch.
VD: Upcase (‘a’)=‘A’
6. Ví dụ: Viết ra màn hình chữ “A” có 3 cách sau:
Write (‘A’);
hoặc Write (Chr (65));
hoặc Write (#65);
V. KIỂU CHUỖI KÝ TỰ (STRING):
1. Tập giá trị: Là dãy các ký tự có trong bảng mã ASCII (tối đa 255 ký tự).
2. Khai báo: Var <Biến chuỗi>: String; {Độ dài tối đa là 255}
Hoặc: Var <Biến chuỗi>: String [n]; {độ dài tối đa n kí tự}.VD: Var S:String[40];
3. Đọc / ghi: Ta có thể dùng lệnh Read, Write để đọc / ghi chuỗi ký tự.
4. Các phép toán:

- Phép cộng hai chuỗi: +
VD: S1:= ‘Tran Van’; S2: = ‘Nam’; S:=S1+S2; {S = ‘Tran Van Nam’}
- Phép toán so sánh: > ; < ; = ; <> ; >= ; <=
VD: S1:= ‘Tran Van’; S2: = ‘Nam’; f:=S1>S2; {f = True}
5. Truy xuất từng ký tự trong chuỗi: <Tên biến>[chỉ số]
Ví dụ: S:= ‘ABC’;
Write (S[2]); ⇔ viết ra màn hình chữ “B”
Write (S[0]); ⇔ viết ra số 3 (phần tử thứ 0 nhớ độ dài thật của chuỗi)
6. Một số hàm và thủ tục xử lý chuỗi:
Hàm Length (S : String) : Integer cho độ dài thật của chuỗi S.
VD: S:= ‘Tran Van Nam’;
For i:=1 to length (S) do
If (ord (S[i]) >= 97) and (ord (S[i]) <= 122) then S[i]:= chr (ord (S[i])-32);
Writeln (S); ⇔ viết ra màn hình “TRAN VAN NAM”
Hàm Copy (S : String; P, N : Integer) : String cho chuỗi con của chuỗi S kể từ vị trí p với độ dài n.
VD: Copy (‘ABCDEF’,3,2) = ‘CD’
Thủ tục Insert (S1 : String; Var S : String; P : Integer) chèn chuỗi S1 vào chuỗi S tại vị trí P.
VD: S:=‘ABCDEF’; Insert (‘XY’,S,3);Write (S);{Viết ra “ABXYCDEF}
Thủ tục Delete (Var S : String; P, N : Integer): xóa trong chuỗi S đi n ký tự kể từ vị trí P.
VD: S:=‘ABCDEF’; Delete (S,3,2); Write (S); {Viết ra màn hình “ABEF}

16


 Tài liệu bồi dưỡng học sinh giỏi Tin 9

...................................  Văn Trọng-Tân Hội-ĐT

Hàm Pos (S1, S : String) : Byte tìm chuỗi S1 trong chuỗi S.{Giá trị là vị trí đầu tiên}
VD: S:=‘ABCDEF’; n:=Pos (‘CD’,S); {Biến n có giá trị là 3}

Thủ tục Val (S : String; Var X : Integer / Real; E : Integer) đổi chuỗi S thành số và gán vào biến X,
gán mã lỗi vào biến E (nếu không có lỗi thì E = 0, ngược lại thì E = vị trí đầu tiên xuất hiện lỗi).
VD: S:=‘3.14’; Val (S,x,n); {Biến x có giá trị là 3.14; biến n có giá trị là 0}
S:=‘3.14ABC’; Val (S,x,n); {Biến x có giá trị là 0; biến n có giá trị là 5}
Thủ tục Str (X [quy cách] : Integer / Real; Var S : String) đổi một số thành chuỗi và lưu trong biến
S.
VD: Str (10/3:0:2,S); {Biến S có giá trị là chuỗi ‘3.33’}
Hàm Concat (S1,S2,...,Sn : String) : String cho xâu mới bằng cách nối các xâu S1, S2, … Sn.
VD: S1:= ‘ABC’; S2:= ‘XYZ’; S3:= Concat (S1,S2); ⇔ S3 = ‘ABCXYZ’
7. Một số phương pháp xử lý chuỗi:
 Đổi chuỗi bất kỳ thành chuỗi in hoa:
For i:=1 to length (S) do
If S[i] IN ['a'.. 'z'] then S[i]:= chr (ord (S[i])-32);
 Đổi chuỗi bất kỳ thành chuỗi in thường:
For i:=1 to length (S) do
If S[i] IN ['A'.. 'Z'] then S[i]:= chr (ord (S[i])+32);
 Đổi chuỗi bất kỳ thành chuỗi dạng tên riêng:
If (S[1] IN ['a'..'z']) then S[1]:= chr (ord (S[i+1])-32);
For i:=1 to length (S) do
If (S[i] = #32) and (S[i+1] IN ['a'..'z']) then S[i+1]:= chr (ord (S[i+1])-32);
 Cắt các khoảng trắng bên trái chuỗi:
While S[1] = #32 do Delete (S,1,1);
 Cắt các khoảng trắng bên phải chuỗi:
While S[Length (S)] = #32 do Delete (S,Length (S),1);
Hoặc: While S[Length (S)] = #32 do S:= Copy (S,1,Length (S) - 1);
 Cắt các khoảng trắng vô nghĩa ở giữa chuỗi:
While Pos (#32#32,S) > 0 do Delete (S,Pos (#32#32,S),1);
 In ra từng từ trong chuỗi:
Var S,S1:string;
Begin

Write('Nhap chuoi : '); Readln(s);
S1:='';
While length (S) > 0 do
Begin
If S[1] <> #32 then
Begin
S1:= S1 + Copy (S,1,1);
Delete (S,1,1);
End
Else
Begin
If S1 <> '' then Writeln (S1);
Delete (S,1,1);
S1:= '';
End;
End;
Writeln(S1);
Readln;
End.

17


 Tài liệu bồi dưỡng học sinh giỏi Tin 9

...................................  Văn Trọng-Tân Hội-ĐT

VI. KIỂU KHOẢNG CON:
1. Khai báo:
Cách 1: TYPE <Tên kiểu khoảng con> = <cận dưới> . . <cận trên>;

VAR <DS biến>: <Tên kiểu khoảng con>;
VD: Type Kieutuoi = 0..120;
Var Tuoi: Kieutuoi;
Cách 2: VAR <DS biến>: <cận dưới> . . <cận trên>;
VD: Var Chu_cai_hoa: ‘A’..’Z’;
Lưu ý: <cận dưới>, <cận trên> thuộc kiểu đếm được.
2. Sử dụng: Tùy theo <cận dưới>, <cận trên> thuộc kiểu dữ liệu nào, ta có thể sử dụng khoảng con như
kiểu dữ liệu đó.
VII. KIỂU LIỆT KÊ:
Là một tập hợp các giá trị được sắp xếp theo thứ tự.
1. Khai báo:
Cách 1: TYPE <Tên kiểu liệt kê>: (liệt kê các giá trị);
VAR <DS biến>: <Tên kiểu liệt kê>;
VD: Type Mau = (Xanh, Do, Tim, Vang);
Var Mau_ao: Mau;
Cách 2: VAR <DS biến>: (liệt kê các giá trị);
VD: Var Mau_ao: (Xanh, Do, Tim, Vang);
Khi đã khai báo như trên, trong chương trình ta có thể dùng lệnh:
Mau_ao:=Xanh;
2. Đọc / ghi: Ta không thể dùng lệnh Read, Write để đọc / ghi trực tiếp kiểu liệt kê, mà phải thông qua
cách chuyển đổi như sau:
Readln (i); Mau_ao:= Mau (i);
If mau_ao = Xanh then Write (‘Xanh’);
3. Một số hàm xử lý:
Hàm Ord (X : kiểu liệt kê / kiểu đếm được) : LongInt cho thứ tự trong danh sách liệt kê đã được
khai báo.
(VD: Ord (Mau_ao)=0)
Hàm <Tên kiểu liệu kê> (N : LongInt) : Kiểu liệt kê cho giá trị kiểu liệt kê có thứ tự là n.

BÀI TẬP CHƯƠNG 3

1. Viết chương trình nhập 4 số tự nhiên a,b,c,d rồi cho biết số lớn nhất? Số nhỏ nhất?
2. Viết chương trình nhập số tự nhiên n từ bàn phím (0 < n ≤ 65355).
a) Hãy cho biết n có bao nhiêu chữ số
b) Hãy cho biết chữ số lớn nhất, chữ số nhỏ nhất của n
c) Tính tổng các chữ số, tích các chữ số của n
d) So sánh tổng các chữ số của n với tính các chữ số của n
e) Hãy cho biết số đảo ngược của n có phải là số nguyên tố hay không ?
3. Viết chương trình nhập 2 số tự nhiên m, n từ bàn phím (0a) Tính tổng m chữ số cuối cùng của n
b) Hoán đổi giá trị của m và n rồi in ra kết quả (Yêu cầu: không dùng biến trung gian).
4. Viết chương trình nhập ba số dương a, b và c từ bàn phím, kiểm tra và in ra màn hình kết quả kiểm tra
ba số đó có thể là độ dài các cạnh của một tam giác hay không ? Nếu là 3 cạnh của tam giác thì hãy
cho biết tam giác đó là tam giác gì (Vuông, Cân, Đều, Thường) và tính diện tích tam giác đó theo
công thức Hê-rông:
S=

p ( p − a)( p − b)( p − c )

Trong đó p là nửa chu vi: p =

18

a +b +c
2


 Tài liệu bồi dưỡng học sinh giỏi Tin 9

...................................  Văn Trọng-Tân Hội-ĐT


5. Viết chương trình giải phương trình bậc nhất dạng tổng quát ax + b = 0 (a, b là các số thực tùy ý nhập
vào từ bàn phím).
6. Viết chương trình giải phương trình bậc hai dạng tổng quát ax 2 + bx + c = 0 (a,b,c là các số thực nhập
vào từ bàn phím, a ≠ 0).
7. Viết chương trình giải phương trình bậc hai dạng tổng quát ax 2 + bx + c = 0 (a,b,c là các số thực tùy ý
nhập vào từ bàn phím).
8. Viết chương trình giải phương trình trùng phương ax 4 + bx2 + c = 0 (a,b,c là các số thực nhập vào từ
bàn phím, a ≠ 0).

ax + b = c
(a, b, c, d, e, f là số thực tùy ý nhập từ bàn phím).
dx
+
e
=
f


9. Giải hệ phương trình bậc nhất hai ẩn: 

10. Giải bất phương trình bậc nhất ax + b > 0 (a, b là số thực tùy ý nhập từ bàn phím).
11. Viết chương trình nhập vào một ký tự rồi cho biết mã ASCII của ký tự vừa nhập?
12. Viết chương trình nhập vào mã ASCII một ký tự rồi cho biết ký tự tương ứng?
13. Viết chương trình in ra màn hình bảng mã ASCII gồm 255 mã và ký tự tương ứng?
14. Viết chương trình nhập vào chuỗi S. Sau đó:
a) Cắt tất cả các khoảng trắng vô nghĩa trong chuỗi S.
b) Đổi chuỗi S thành chuỗi in hoa, in thường, in dạng tên riêng.
c) In ra màn hình từng từ trong chuỗi S.
d) Cho biết chuỗi vừa nhập có đối xứng hay không? (các chuỗi happyyppah, catac là các chuỗi đối
xứng).

e) Cho biết chuỗi vừa nhập có tuần hoàn hay không? Nếu là chuỗi tuần hoàn thì cho biết chu kỳ
tuần hoàn (chuỗi abcabc tuần hoàn với chu kỳ là 3).
15. Viết chương trình nhập vào chuỗi ngày, tháng, năm theo dạng dd/mm/yy hoặc dd/mm/yyyy, sau đó
cho biết ngày đó là thứ mấy trong tuần.
Hướng dẫn cách tính thứ trong tuần:
• Nam:= 1900 + (Nam MOD 1900); {Quy đổi Nam về dạng yyyy}
• Nếu Thang <3 thì Thang:= Thang + 12; và Nam:= Nam -1;
• Thu=ABS (Ngay+2*Thang+3* (Thang+1) DIV 5+Nam+Nam DIV 4) MOD 7
(Khi đó Thu = 0 ⇔ Chủ nhật; Thu = 1 ⇔ Thứ hai; …)
Lưu ý: Công thức tính trên chỉ đúng từ ngày 01/03/1900 trở đi.

19


 Tài liệu bồi dưỡng học sinh giỏi Tin 9

...................................  Văn Trọng-Tân Hội-ĐT

Đức hơn tài là quân tử,
Tài hơn đức là tiểu nhân.

(Sách

Cảnh hành)
Chương 4: CHƯƠNG TRÌNH CON - THỦ TỤC VÀ HÀM
I. THỦ TỤC (PROCEDURE) VÀ HÀM (FUNCTION):
1. Ví dụ:
Xét ví dụ sau đây: Chương trình tính tổ hợp chập k của n phần tử (1 ≤ k ≤ n).
Program Tinh_To_Hop_Chap_K_Cua_N_Phan_Tu;
Uses Crt;

Var n,k: Byte; Tohop: Real;
Procedure Nhap; {Thu tuc nhap du lieu}
Begin
Clrscr;
Write ('Nhap n: '); Readln (n);
Write ('Nhap k: '); Readln (k);
If (k<1) or (n<1) or (nBegin
Write ('Du lieu khong hop le.');
Readln;
Halt;
End;
End;
Function GT (x: Byte): Longint; {Ham tinh giai thua}
Var i: Byte; k: Longint;
Begin
i:=0;
k:=1;
While iBegin
i:=i+1;
k:=k*i;
End;
GT:=k;
End;
Begin {Main Program}
Nhap; {Goi thu tuc nhap}
Tohop:= GT (n)/ (GT (k)*GT (n-k)); {Sử dụng hàm GT}
Write ('To hop chap ',k,' cua ',n,' phan tu la: ',Tohop:0:0);
Readln;

End. {Main Program}
Ta nhận thấy trong chương trình có 2 chương trình con là: Thủ tục Nhap và hàm GT. Các chương
trình con này có thể gọi nhiều lần trong chương trình chính. Nếu không có hàm GT thì chương trình chính
sẽ rất rườm rà vì phải viết 3 lần đoạn chương trình tính giai thừa rồi mới gán giá trị cho biến Tohop.

2. Cách viết thủ tục và hàm:

20


 Tài liệu bồi dưỡng học sinh giỏi Tin 9

...................................  Văn Trọng-Tân Hội-ĐT

Cách viết các chương trình con cũng gần giống như chương trình chính, cũng có thể có các phần khai
báo, thân thủ tục cũng trong cặp từ khóa Begin … End nhưng kết thúc bằng dấu chấm phẩy. Thủ tục và
hàm phải viết trước BEGIN của chương trình chính.
3. Sự khác nhau giữa thủ tục và hàm:
Sự khác nhau cơ bản giũa thủ tục và hàm là ở chỗ: Hàm cho ta kết quả là một giá trị thông qua tên của
nó, còn thủ tục thì chỉ thực hiện một khối thao tác mà không cho kết quả thông qua tên thủ tục.
II. TRUYỀN THAM SỐ CHO CHƯƠNG TRÌNH CON:

1. Ví dụ:
Xét ví dụ sau đây:
Var a,b: Integer;
Procedure thamso (x: Integer; var y: Integer);
{x và y là hai tham số hình thức: x là tham trị, y là tham biến}
Begin
x:= x + 1;
y:= y + 1;

Writeln (x:3,y:3);
End;
Begin {Main profram}
a:= 3;
b:= 3;
Thamso (a,b); {a và b là hai tham số thực sự được truyền vào chương trình con}
Writeln (a:3,b:3);
Readln;
end.
Kết quả trên màn hình là:
4 4
3 4

2. Truyền tham biến:
Tham biến là tham số hình thức trong phần khai báo chương trình con đặt sau từ khóa VAR.
Các tham số thực sự ứng với tham biến có thể bị thay đổi giá trị trong chương trình con và khi ra khỏi
chương trình con nó vẫn giữ giá trị đã thay đổi đó. Với tham biến, các tham số thực sự truyền vào phải
là biến chứ không được là giá trị. Về thực chất, khi ta truyền tham biến cho chương trình con, chương
trình con sẽ thao tác trực tiếp trên biến (ô nhớ) được truyền vào.

3. Truyền tham trị:
Tham trị là tham số hình thức trong phần khai báo chương trình con không có từ khóa VAR.
Các tham số thực sự ứng với tham trị nếu là biến vẫn có thể bị thay đổi giá trị trong chương trình con
nhưng sau khi ra khỏi chương trình con nó vẫn giữ nguyên giá trị ban đầu trước khi truyền vào
chương trình con. Khi truyền tham số cho tham trị, ta có thể truyền biến hoặc giá trị cụ thể đều được.
Về thực chất, khi ta truyền tham trị cho chương trình con, chương trình con sẽ sao chép biến (ô nhớ) được
truyền vào thành một biến tạm và thao tác trên biến tạm đó.
III. BIẾN TOÀN CỤC VÀ BIẾN ĐỊA PHƯƠNG:
Các biến được khai báo trong chương trình chính được gọi là biến toàn cục. Các biến này có thể
dùng ở mọi nơi trong chương trình (kể cả trong các chương trình con).

Các biến được khai báo trong chương trình con được gọi là biến địa phương. Các biến này chỉ có
tác dụng trong chương trình con khai báo nó và trong các chương trình con bên trong nó
IV. TÍNH ĐỆ QUY CỦA CHƯƠNG TRÌNH CON:
1. Khái niệm: Một đối tượng gọi là đệ quy nếu nó bao gồm chính nó như một bộ phận hoặc nó được
định nghĩa dưới dạng chính nó.
Ví dụ: 0! = 1
Nếu n > 0 thì n! = n (n-1)!
Một thủ tục được gọi là đệ quy nếu trong quá trình thực hiện nó có phần phải gọi đến chính nó

21


 Tài liệu bồi dưỡng học sinh giỏi Tin 9

...................................  Văn Trọng-Tân Hội-ĐT

nhưng với kích thước nhỏ hơn của tham số.
2. Cấu trúc của một thủ tục đệ quy:
- Phần neo: chứa các tác động của hàm hoặc thủ tục với một giá trị ban đầu.
- Phần hạ bậc: tác động cần được thực hiện cho giá trị hiện thời của các tham số được định nghĩa bằng
các tác động đã được định nghĩa trước đây.
VD: Function GT (n: word): longint;
Begin
If n = 0 then
GT:= 1 {Phần neo}
Else
GT:= n * GT (n - 1); {Phần hạ bậc}
End;
V. THAM KHẢO TRƯỚC (FORWARD):
Thông thường khi gọi một chương trình con thì chương trình con đó phải được viết trước khi gọi.

Nhưng trong thực tế đôi khi cần gọi một chương trình con trước khi viết chúng. Khi đó ta cần khai báo
chương trình con cần gọi đó theo kiểu tham khảo trước (Forward).
VD: Function MuN (A,n : Real) : Real; Forward; {Khai báo Forward cho hàm MuN}
Function CanN (A,n : Real) : Real;
Begin
CanN := MuN (A,1/n); {Dùng hàm MuN trước}
End;
Function MuN; {Không cần khai báo tham số vì đã khai báo trong phần Forward}
Begin
MuN := Exp (n*LN (A));
End;
VI. TỆP BAO HÀM VÀ CHỈ THỊ DỊCH:
Để sử dụng lại những chương trình con ở nhiều chương trình chính khác nhau, ta có thể để các
chương trình con ở những tệp riêng biệt gọi là tệp bao hàm. Khi đó trong bất kỳ chương trình chính nào
ta cũng có thể sử dụng tệp bao hàm đó bằng cách dùng một chỉ thị dịch:
{$I <Tên tệp bao hàm>}. VD: {$I Thutuc.pas}
Ngoài chỉ thị dịch bao hàm như trên còn có các chỉ thị dịch khác là:
{$A+} hoặc {$A–}: Bật hoặc tắt chế độ bố trí theo word để máy chạy nhanh.
{$B+} hoặc {$B–}: Bật hoặc tắt định trị cho kiểu logic phức.
{$D+} hoặc {$D–}: Thiết lập hoặc không thiết lập các thông tin gỡ rối.
{$E+} hoặc {$E–}: Thiết lập hoặc không thiết lập việc kết nối thời gian thực.
{$F+} hoặc {$F–}: Bật hoặc tắt trạng thái chỉ gọi thủ tục và hàm xa (Unit).
{$G+} hoặc {$G–}: Bật hoặc tắt trạng thái tạo mã cho 80266.
{$I+} hoặc {$I–}: Kiểm tra hoặc không kiểm tra lỗi vào / ra.
{$L+} hoặc {$L–}: Bật hoặc tắt việc tạo các thông tin ký hiệu cục bộ.
{$M Stacksize,HeapMin,HeapMax}: Định độ lớn Stack và giới hạn Heap.
{$N+} hoặc {$N–}: Bật hoặc tắt chế độ sinh mã dấu chấm động.
{$O+} hoặc {$O–}: Bật hoặc tắt việc tạo mã phủ
{$P+} hoặc {$P–}: Bật hoặc tắt chế độ tham biến String mở.
{$Q+} hoặc {$Q–}: Bật hoặc tắt việc tạo mã để kiểm tra tràn.

{$R+} hoặc {$R–}: Kiểm tra hoặc không kiểm tra phạm vi biến mảng.

22


 Tài liệu bồi dưỡng học sinh giỏi Tin 9

...................................  Văn Trọng-Tân Hội-ĐT

{$S+} hoặc {$S–}: Kiểm tra hoặc không kiểm tra việc tràn bộ nhớ Stack.
{$T+} hoặc {$T–}: Bật hoặc tắt điều khiển kiểu dữ liệu con trỏ tạo ra từ toán tử @.
{$V+} hoặc {$V–}: Bật hoặc tắt việc kiểm tra tham số String của thủ tục, hàm.
{$X+} hoặc {$X–}: Bật hoặc tắt cú pháp mở rộng của Turbo Pascal.
{$Y+} hoặc {$Y–}: Bật hoặc tắt việc tạo ra thông tin tham khảo các ký hiệu.
Trong chương trình ta cũng có thể dùng một lúc nhiều chỉ thị dịch như sau:
{$A+,$B–,D+,E+,F–,G–,I+,L+,N–,O–,P–,Q–,R–,S+,T–,V+,X+}
VII. UNIT VÀ CÁCH TẠO UNIT:
1. Khái niệm Unit:
Unit là thư viện con của Turbo Pascal. Đó là các tập tin chứa các hằng, biến, kiểu, thủ tục và hàm có
cùng một liên quan nào đó. Các Unit chuẩn của Turbo Pascal chứa chung trong tệp TURBO.TPL gồm:
CRT,SYSTEM,DOS,PRINTER, OVERLAY. Các thư viện trên là thư viện nội trú. Ngoài ra, Turbo Pascal
còn cung cấp thêm một số thư viện ngoại trú như GRAPH.TPU, GRAPH3.TPU,…
Ngoài các thư viện có sẵn, người lập trình có thể tạo những Unit dùng riêng.
2. Cách tạo Unit:
Cấu trúc chung của một Unit như sau:
UNIT <Tên Unit>;
INTERFACE {Phần này gọi là phần giao diện dùng để khai báo các hằng, biến, hàm và thủ tục
có giao diện với bên ngoài, có nghĩa là các chương trình sử dụng Unit này có thể gọi chúng}
Uses <Các Unit khác>;
Const <Các hằng được giao diện>;

Var <Các biến được giao diện>;
Procedure <Tên thủ tục được giao diện>; {Chỉ khai báo tên và tham số}
Function <Tên hàm được giao diện>: <Kiểu hàm>; {Chỉ khai báo tên và tham số}
IMPLEMENTATION {Phần này gọi là phần thực hiện}
Const <Các hằng không giao diện>;
Var <Các biến không giao diện>;
Procedure <Tên thủ tục>; {Viết chi tiết thủ tục cần dùng}
Function <Tên hàm>: <Kiểu hàm>; {Viết chi tiết hàm cần dùng}
BEGIN
{Các lệnh nếu cần. Nếu không có lệnh nào thì có thể bỏ BEGIN}
END.
Sau khi tạo xong Unit phải lưu lại với tên tập tin trùng với tên Unit, phần mở rộng của file là
.PAS. Dịch Unit ra mã máy ta được một tập tin mới (Unit mới) có tên trùng với tên tập tin ban đầu nhưng
có phần mở rộng là .TPU.

3. Ví dụ: Viết chương trình tính giai thừa có dùng Unit Giaithua.
 Bước 1: Tạo tập tin Giaithua.pas như sau:
Unit Giaithua;
Interface
Function GT (n: word): longint;
Implementation
Function GT (n: word): longint;
Begin If n = 0 then GT:= 1 Else GT:= n * GT (n - 1); End;
END.

23


 Tài liệu bồi dưỡng học sinh giỏi Tin 9


...................................  Văn Trọng-Tân Hội-ĐT

 Bước 2: Dịch tập tin Giaithua.pas thành tập tin Giaithua.tpu. (Nên chép tập tin Giaithua.tpu
vào thư mục chứa tập tin Turbo.exe của chương trình Pascal)

 Bước 3: Tạo tập tin Tinhgt.pas như sau:
Uses Crt, Giaithua; {Khai báo sử dụng Unit Giaithua.tpu}
Var n: word;
Begin
Clrscr;
Write ('Nhap N: '); Readln (n);
Write ('N! = ', GT (n)); {Sử dụng hàm GT trong Unit Giaithua.tpu}
Readln;
End.
VIII. MỘT SỐ GIẢI THUẬT XỬ LÝ SỐ:
1. Tính n!:
Function GT (n: word): longint;
Begin
If n = 0 then
GT:= 1
Else
GT:= n * GT (n - 1);
End;
Gọi hàm: GT (4) = 24
2. Hàm cho số Fibonacci thứ n:
Function Fibo (n : byte): longint;
Begin
If n<=0 then
Begin
Writeln ('Du lieu khong hop le.');

Readln;
Halt;
End;
If (n =1) or (n=2) then
Fibo:= 1
Else
Fibo:= Fibo (n - 1) + Fibo (n - 2);
End;
Gọi hàm: Fibo (7) = 13
VD: For i:=1 to 40 do Writeln (Fibo (i));
Khuyến cáo: Không nên lạm dụng đệ quy để viết chương trình con vì khi gọi chương trình con
với tham số lớn máy sẽ khởi tạo một loạt biến cục bộ và chúng chỉ được giải phóng khi thoát khỏi
chương trình con.
Để in 40 số Fibonacci, ta nên dùng cách như sau (chạy thử và tự so sánh):
F1:=1; F2:=1; Writeln (F1); Writeln (F2);
For i:=3 to 40 do Begin F3:=F1+F2; Writeln (F3); F1:=F2; F2:=F3; End;

3. Tính An:
Function MuN (A,n : Real) : Real;
Begin MuN := Exp (n*LN (A)); End;
Gọi hàm: MuN (3,4) = 81

4. Tính

n

m:

Function CanN (A,n : Real) : Real;
Begin CanN := Exp (1/n*LN (A)); End;


24


 Tài liệu bồi dưỡng học sinh giỏi Tin 9

...................................  Văn Trọng-Tân Hội-ĐT

Gọi hàm: CanN (16,4) = 2

5. Tìm UCLN (a,b):
Function UCLN (a,b: Integer): Integer; {Tìm UCLN bằng cách trừ số lớn cho số nhỏ}
Begin
a:= Abs (a); b:= Abs (b);
If (a=0) and (b<>0) then Begin UCLN:=b; Exit; End;
If (a<>0) and (b=0) then Begin UCLN:=a; Exit; End;
While a<>b do
If a>b then
a:=a-b
Else
b:=b-a;
UCLN:=a;
End;
Gọi hàm: UCLN (12,9) = 3
Function UCLN (a,b: Integer): Integer; {Tìm UCLN bằng cách chia lấy phần dư}
Var r: Integer;
Begin
a:= Abs (a); b:= Abs (b);
While b<>0 do
Begin

r:=a mod b;
a:=b;
b:=r;
End;
UCLN:=a;
End;
Function UCLN (a,b: Integer): Integer; {Tìm UCLN bằng đệ quy}
Begin
a:= Abs (a); b:= Abs (b);
If b=0 then
UCLN:=a
Else
UCLN:=UCLN (b,a mod b);
End;
Lưu ý: Tính BCNN (a,b) theo công thức: BCNN (a,b) = a*b div UCLN (a,b))

6. Kiểm tra số nguyên tố:
Function SNT (x: Word): Boolean; {Hàm kiểm tra số nguyên tố theo định lý}
Var p: Integer; f: Boolean;
Begin
If x < 2 then
Begin
SNT:= False;
Exit;

25


×