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

CHUYEN DE BDHSG TIN CẤP THCS

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 (459.57 KB, 62 trang )

Chuyên đề Bồi dưỡng học sinh giỏi môn Tin học Năm học 20172018

BÀI THAM LUẬN VỀ CHUN ĐỀ TIN HỌC
“ĐỊNH HƯỚNG CHƯƠNG TRÌNH BỒI DƯỠNG HỌC SINH GIỎI
MƠN TIN HỌC CẤP THCS”
A. ĐẶT VẤN ĐỀ:
I. Cơ sở lý luận thực tiễn:
Hiện nay hầu hết các trường THCS đã dạy mơn Tin học và cơ sở vật chất phục vụ cho việc
dạy học mơn học này đã được trang bị ngày càng tốt hơn. Rất nhiều học sinh, phụ huynh học sinh,
lãnh đạo ngành, các trường rất mong muốn con mình, bản thân mình, học sinh mình tham gia các kỳ
thi học sinh giỏi mơn Tin học (Kỳ thi tin học trẻ, Kỳ thi học sinh giỏi lớp 9...) bởi tính mới mẻ, hấp
dẫn, thiết thực của bộ mơn. Mặc khác chúng ta nhìn vào phòng trào Tin học của ngành giáo dục Tuy
phước so với các Huyện khác trong Tỉnh thì còn rất yếu và thua xa các huyện bạn. Đó khơng phải vì
học sinh huyện Tuy Phước khơng thích học Tin học, hay đội ngũ giáo viên Tin học của Huyện chưa
thật sự quan tâm đến phong trào mũi nhọn này. Mà ở đây ngành giáo dục Huyện chúng ta thiếu đi
một phong trào, một sân chơi Tin học dành cho các em có niềm đam mê thật sự với bộ mơn Tin học.
Với tâm huyết cộng với sự đam mê của mình, phần vì học sinh và vì bộ mặt Tin học của ngành giáo
dục Tuy Phước, tơi và đồng nghiệp đã đưa ra chun đề “Định hướng về nội dung bồi dưỡng học sinh
giỏi mơn Tin học cấp THCS” để các trường thành lập ra đội tuyển và bồi dưỡng đến tháng 7 hàng
năm chọn ra những học sinh xuất sắc Tin học của trường mình tham gia dự thi học sinh giỏi Tin học
do ngành giáo dục Tuy phước tổ chức . Từ đó thành lập được đội tuyển cấp Huyện và xa hơn học sinh
tham dự các cuộc thi Tin học khác như Tin học trẻ, học sinh giỏi Tin học lớp 9…). Qua đó tạo cho
các em có sân chơi Tin học lành mạnh, khoa học, một phong trào hấp dẫn thường niên có tiếng vang
cho các khối học sinh. Tơi tin tưởng với cách làm đó thì phong trào Tin học ngành giáo dục Tuy
Phước sẽ mạnh lên qua từng năm!
II. Thực trạng dạy học sinh giỏi mơn Tin học hiện nay trong nhà trường:
a) Về phía học sinh:
Một bộ phận học sinh rất đam mê lĩnh vực Tin học này. Đa số là các em có kiến thức tốt về mơn
Tốn.
Các em rất mong muốn có một phong trào để các em thể hiện niềm đam mê của mình.
b) Về phía giáo viên:


- Đa số là giáo viên trẻ, nhiệt tình trong cơng tác.
- Vì chưa có phòng trào nên đa số giáo viên Tin học chưa thật sự đầu tư nghiên cứu về lĩnh vực học
sinh giỏi Tin học.
c) Về phía nhà trường:
- Lãnh đạo nhà trường chưa thật sự quan tâm đến đội ngũ học sinh giỏi Tin học. Do đó cần có phong
trào thường niên để thay đổi cách nhìn đối với phong trào này.

B. GIẢI QUYẾT VẤN ĐỀ:
Tập tài liệu được biên soạn với nội dung bồi dưỡng được chia làm 3 phần.
- Phần 1: Lý thuyết và bài tập cơ bản theo từng chương NNLT Pascal
- Phần 2: Phần bài tập theo chủ đề
- Phần 3: Các dạng đề thi HSG Tin học và Tin học trẻ tham khảo
Mỗi chương gồm tóm tắt lý thuyết và bài tập xoay quanh nội dung của chương. Mỗi bài tập được
trình bày theo cấu trúc:
a. Đề bài.
b. Hướng dẫn, thuật tốn.
c. Mã chương trình.
d. Nhận xét: Nhấn mạnh nội dung mới, quan trọng cần nắm sau khi thực hiện bài tập, giải
quyết bài tốn theo thuật tốn khác, điểm được và chưa được của thuật tốn ...
GV: Lê Văn Lại

Trang 1


Chuyên đề Bồi dưỡng học sinh giỏi môn Tin học Năm học 20172018
Nội dung các bài tập ở các chương đã được lựa chọn theo hướng kế thừa, tăng dần độ khó.
Nhiều bài tốn cần giải quyết trong thực tế được đưa vào các bài tập nhằm tăng hướng thú học tập ....
Hầu hết các bài tập có độ khó vừa phải, phù hợp với nội dung bồi dưỡng ở cấp trường. Nội
dung liên quan với mơn tốn và các mơn khác cấp THCS. Nội dung bồi dưỡng được chia thành
chương như sau:


Phần 1: Lý thuyết và bài tập cơ bản theo từng chương
NNLT Pascal
CHƯƠNG 1: MỘT SỐ VẤN ĐỀ TỐN HỌC
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 qt: 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 qt: 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 chia
1 1 2
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 qt: 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 qt:
-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. Phép hợp (Union): A ∪B = {x | x ∈ A hoặc x ∈ B}
GV: Lê Văn Lại

Trang 2


Chuyên đề Bồi dưỡng học sinh giỏi môn Tin học Năm học 20172018
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ố ngun) ,
Q (số hữu tỉ), I (số vơ tỉ), R (số thực), P (số ngun tố).
III. SỐ NGUN TỐ - ƯỚC SỐ CHUNG LỚN NHẤT - BỘI SỐ CHUNG NHỎ NHẤT:
1. Số ngun tố:
Khái niệm: Số ngun 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 ngun tố khơng vuợt q n .
2. Ước số chung lớn nhất – Bội số chung nhỏ nhất:
- Thuật tố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.
a.b

- UCLN (a,b)·BCNN (a,b)=a·b⇔BCNN (a,b)= UCLN(a, b) ⇔UCLN (a,b)=

a.b
BCNN(a,b)

3. Số ngun tố cùng nhau: Hai số có UCLN bằng 1 gọi là hai số ngun tố cùng nhau.
IV. PHÂN SỐ:


1. Phân số bằng nhau:

a
c
= ⇔ 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
Phương trình có nghiệm là x = a
Lưu ý: Nếu a = 0 thì ax + b = 0 ⇔ b = 0. Khi đó:
b ≠ 0 thì phương trình vơ nghiệm;
b = 0 thì PT có vơ số nghiệm.
2
2. Phương trình bậc hai: ax + 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
+ 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) Dạng đầy đủ: ax2 + bx + c = 0
GV: Lê Văn Lại


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

a
c
x = − −
a


Trang 3


Chuyên đề Bồi dưỡng học sinh giỏi môn Tin học Năm học 20172018
+ Ta tính ∆ = b2 – 4ac

+ Nếu ∆ < 0: phương trình vơ nghiệm.
b
+ Nếu ∆ = 0: phương trình có 1 nghiệm x = –
2a
−b + ∆
−b − ∆
+ Nếu ∆ > 0: phương trình có 2 nghiệm phân biệt: x1=
; 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 tố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 tố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.
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:
GV: Lê Văn Lại

Trang 4


Chuyên đề Bồi dưỡng học sinh giỏi môn Tin học Năm học 20172018
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
ax1 + b = y1
hệ 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 +
ax2 + b = y2
b.
- Để xét xem 3 điểm A (x 1,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
2. Hàm số: y = ax (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 = ax2 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 hồnh Ox; nếu a<0 thì đồ thị nằm phía dưới trục hồnh Ox.
- Cách vẽ đồ thị của hàm số y = ax2:
+ Lập bảng giá trị tương ứng:
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 hồ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
,−
2 a 4a

).

2

Giữa (P) y = ax + bx + c và đường thẳng (D) y = mx + n cũng có quan hệ như trên,
nhưng phương trình hồ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Ố:
- Nếu a là số gần đúng của số đúng ā thì ∆ a = ā – a đượ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.

GV: Lê Văn Lại

Trang 5


Chuyên đề Bồi dưỡng học sinh giỏi môn Tin học Năm học 20172018
VIII. GIẢI TÍCH TỔ HỢP:
1. Hố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 hốn vị
các phần tử của tập A.
- Số các hố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à:
n!
k
A n = n(n − 1)...(n − k + 1) = (n − k)! (Lưu ý: 0! = 1)
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)!

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 (U n) 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 =

m
n

Am-n =

Am
(A≠0) ;
An

(Am)n = Am.n ;

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

a = n am

n

(n am = a

m
.n

n

n

= (a

A =1 (A = A
0

0

m
n

) n =a

m
n

(A.B)n = An. Bn ;
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
GV: Lê Văn Lại
Trang 6


Chuyên đề Bồi dưỡng học sinh giỏi môn Tin học Năm học 20172018
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 tố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
1
log A 1
ln A 1n 1n .ln A ⇒ n
A = Exp (1/n*LN (A))
- Tính n A : n A =A n = (e e ) n = (e
) =e

XI. HÌNH HỌC:
1. Định lí Py-ta-go: Tam giác ABC vng tại A ⇒ BC2 = AB2 + AC2
2. Hệ thức lượng trong tam giác vng:

A

c

1
1 1
b2=ab’ (c2=ac’); h2=b’c’; bc = ah; 2 = 2 + 2
h
b c

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

a

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 
=
÷
hun 
 BC 

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

cosα =

a +b +c
2
A

kỊ  AB 
=
÷
hun 
 BC  Cạnh kề


cotgα =

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

B

π

Cạnh đố
i

α

5. Một số hệ thức về cạnh và góc trong tam giác vng:

b = a.Sinα = a.Cos β
c = a.Sinβ = a.Cosα
b = c.tgα = c.Cotg β
c = b.tg β = b.Cotgα
6. Arcsin, Arccos, Arctan, Arccotg:
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.


C

H

+ Ta ln 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=

c'

b'

B

3. Trong một tam giác bất kỳ với 3 cạnh là a, b, c:

b

h

C
Cạnh huyề
n

B
α

a

c


β

A

b

C

0

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

÷
180
 π 
8. Một số cơng thức tính chu vi, diện tích:
- Chu vi hình vng: C = 4a (với a là cạnh hình vng)
- Diện tích hình vng: S = a 2 (với a là cạnh hình vng)
- 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
0

GV: Lê Văn Lại


Trang 7


Chuyên đề Bồi dưỡng học sinh giỏi môn Tin học Năm học 20172018
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)

CHƯƠNG 2: CÁC THÀNH PHẦN CƠ BẢN CỦA NGƠN NGỮ LẬP TRÌNH PASCAL
Pascal là một ngơn ngữ lập trình bậc cao do Niklaus Wirth, giáo sư điện tốn trường Đại học
kỹ thuật Zurich (Thụy Sĩ) đề xuất năm 1970. Ơng lấy tên Pascal để kỷ niệm nhà tốn học và nhà triết
học người Pháp nổi tiếng Blaise Pascal.
1. Các tập tin cần thiết khi lập trình với Turbo Pascal
Để lập trình được với Turbo Pascal, tối thiểu cần 2 file sau:
• TURBO.EXE: Dùng để soạn thảo và dịch chương trình.
• TURBO.TPL: Thư viện chứa các đơn vị chuẩn để chạy với TURBO.EXE.
Ngồi ra, muốn lập trình đồ hoạ thì phải cần thêm các tập tin:
• GRAPH.TPU: Thư viện đồ hoạ.
• *.BGI: Các file điều khiển các loại màn hình tương ứng khi dùng đồ hoạ.
• *.CHR: Các file chứa các font chữ đồ họa.
2. Các bước cơ bản khi lập một chương trình Pascal
Bước 1: Soạn thảo chương trình.
Bước 2: Dịch chương trình (nhấn phím F9), nếu có lỗi thì phải sửa lỗi.
Bước 3: Chạy chương trình (nhấn phím Ctrl + F9).
3. Cấu trúc chung của một chương trình Pascal
Program <Tên_Chương_Trình>;
Uses Crt; {Khai báo thư viện hàm}
Const <Hằng> = <Giá Trị>; {Khai báo hằng}

Var
<Biến 1>,<Biến 2> : <Kiểu Dữ Liệu>; {Khai báo biến}
Begin
Clrscr; { Lệnh xóa màn hình kết quả }
Write(‘<u cầu nhập liệu>’); Readln(<Biến>); { Nếu cần}
{Xử lĩ và hiện kết quả}
Writeln(‘<Thơng báo kết quả>’,<kết quả>); { Nếu cần}
Readln; {Giữ màn hình kết quả}
End.
Giải thích cấu trúc các khai báo trên:
Nếu có phần khai báo nào cần cho chương trình thì phải tn theo thứ tự trên, ví dụ: phần khai báo
thư viện (USES) khơng thể đặt sau phần khai báo hằng số (CONST) hoặc sau (VAR)... sau mỗi phần
khai báo phải có dấu ‘;’.
- Program: Từ khố này dùng để khai báo tên chương trình. Tên chương trình phải tn theo quy
tắc:
+ Khơng có ký tự trống xen giữa.
+ Khơng đặt số ở ký tự đầu tiên.
+ Trong phần tên khơng chứa các ký tự đặt biệt như: ‘!’, ‘@’, ‘#’, ‘$’, ‘%’, ‘^’,
‘&’, ‘* ’, ‘(‘, ‘)’, ‘-‘, ‘+’, ‘/’, ‘\’, ‘.’, ’,’,.v.v.
+ Kết thúc phải có dấu ‘;’.
+ Phần này có thể khơng có.
- Uses: Từ khố này dùng để khai báo việc sử dụng Unit (thư viện) cho chương trình

GV: Lê Văn Lại

Trang 8


Chuyên đề Bồi dưỡng học sinh giỏi môn Tin học Năm học 20172018
- Const: Từ khố này dùng để khai báo các hằng số sử dụng trong chương trình, khi báo hằng số

là việc cố định một vài giá trị nào đó trong chương trình thơng qua tên hằng, ví dụ cách khai báo
hằng:
- Var: Từ khố dùng để khai báo các biến số được sử dụng trong chương trình. Biến số là các giá
trị có thể thay đổi được trong suốt q trình chạy của chương trình. Khái niệm về biến số rất quan
trọng trong việc lập trình (khái niệm này được trình bày kỹ ở bài 3). Một ví dụ về cách khai báo biến:
Var HoDem, Ten : String;
N : Integer;
Ghi chú:
- Thứ tự các khai báo trên là điều bắt buộc, ta phải nắm thứ tự này cho dù một số khái niệm ta
chưa được biết. Trong chương trình Pascal, để tạo lời chú thích, ta sử dụng cặp dấu {...} hoặc (*...*)
lồng các câu chú thích vào bên trong nó.
- Trên một dòng có thể viết một hoặc nhiều câu lệnh. Các lệnh cách nhau bằng dấu chầm phẩy.
Ví dụ :
Program GioiThieu;
Begin
Writeln ( ‘Truong THCS Luong Tam‘ );
Write ( ‘Ap 3 – Luong Tam – Long My – Hau Giang‘ );
End.
4. Các thao tác cơ bản khi soạn thảo chương trình
- F2: Lưu chương trình trong khi soạn thảo.
- F3: Tạo một file mới hoặc mở một file cũ.
- F9: Dịch thử chương trình để kiểm tra lỗi.
- Ctrl - F9: Chạy chương trình.
- Alt - F5: Xem kết quả chạy chương trình.
- Alt - X: Thốt khỏi màn hình soạn thảo chương trình Pascal.
• Insert: Chuyển qua lại giữa chế độ đè và chế độ chèn.












Home: Đưa con trỏ về đầu dòng.
End: Đưa con trỏ về cuối dòng.
Page Up: Đưa con trỏ lên một trang màn hình.
Page Down: Đưa con trỏ xuống một trang màn hình.
Del: Xố ký tự ngay tại vị trí con trỏ.
Back Space (): Xóa ký tự bên trái con trỏ.
Ctrl-PgUp: Đưa con trỏ về đầu văn bản.
Ctrl-PgDn: Đưa con trỏ về cuối văn bản.

Ctrl-Y: Xóa dòng tại vị trí con trỏ.
5. Các thành phần cơ bản trong phần khai báo của chương trình
a. Từ khóa
Các từ khố là các từ dùng để khai báo, đặt tên cho đối tượng trong Pascal, khi ta đặt tên cho đối
tượng nào đó, khơng được đặt trùng tên với các từ khố.
Bảng từ khố trong ngơn ngữ Pascal gồm:
and, array, begin, case, const, div, do, downto, else, end, file, for, function, goto, if, in, label, mod,
nil, not, object, of, or, procedure, program, record, repeat, set, string, then, to, type, unit, until, uses,
var, while, with...
Turbo Pascal khơng phân biệt ký tự thường hoặc hoa. Ví dụ, các cách viết sau có ý nghĩa như
nhau: Begin, BEGIN, begin, beGIN, bEGIN,...
b. Tên (định danh)
GV: Lê Văn Lại


Trang 9


Chuyên đề Bồi dưỡng học sinh giỏi môn Tin học Năm học 20172018
Tên (định danh) là một dãy ký tự dùng để đặt tên cho các hằng, biến, kiểu, tên chương trình
con... Khi đặt tên, ta phải chú ý một số điểm sau:
 Khơng được đặt trùng tên với từ khố.

 Ký tự đầu tiên của tên khơng được bắt đầu bởi các ký tự đặc biệt hoặc chữ số. Khơng được
đặt tên với ký tự space, ‘!’, ‘@’, ‘#’, ‘$’, ‘%’, ‘^’,‘&’, ‘* ’, ‘(‘, ‘)’, ‘-‘, ‘+’, ‘/’, ‘\’, ‘.’,
’,’,.v.v
c. Hằng
- Hằng là một đại lượng có giá trị khơng thay đổi trong suốt chương trình.
- Cú pháp khai báo: CONST
<Tên hằng> = <Giá trị>;
Ví dụ: CONST
Max = 100;
Name = 'Tran Van Hung';
Continue = FALSE;
d. Biến
- Biến là một đại lượng mà giá trị của nó có thể thay đổi trong q trình thực hiện chương
trình.
- Cú pháp khai báo:VAR <Tên biến>,<Tên biến 2>,... : <Kiểu dữ liệu>;
Ví dụ:
VAR
x, y: Real; {Khai báo hai biến x, y có kiểu là Real}
a, b: Integer; {Khai báo hai biến a, b có kiểu integer}
6. Các thành phần cơ bản trong phần thân chương trình
a. Biểu thức: Biểu thức (expression) là cơng thức tính tốn mà trong đó bao gồm các phép tốn,
các hằng, các biến, các hàm và các dấu ngoặc đơn.

Ví dụ: (x +sin(y))/(5-2*x)
biểu thức số học
(x+4)*2 = (8+y)
biểu thức logic
Trong một biểu thức, thứ tự ưu tiên của các phép tốn được liệt kê theo thứ tự sau:
• Dấu ngoặc ( )
• Phép tốn một ngơi (NOT, -).
• Phép tốn *, /, DIV, MOD, AND.
• Phép tốn +, -, OR, XOR
• Phép tốn so sánh =, <, >, <=, >=, <>, IN
Chú ý: Một hăng, một biến, một hàm cũng được xem là biểu thức, đó là biểu thức đơn giản.
b. Câu lệnh
 Câu lệnh đơn giản
- Câu lệnh gán (:=): <Tên biến>:=<Biểu thức>;
- Các lệnh xuất nhập dữ liệu: READ/READLN, WRITE/WRITELN.
 Câu lệnh có cấu trúc
- Câu lệnh ghép: BEGIN ... END;
- Các cấu trúc điều khiển: IF.., CASE..., FOR..., REPEAT..., WHILE...
 Lệnh xuất dữ liệu: Để xuất dữ liệu ra màn hình, ta sử dụng ba dạng sau:
(1)
WRITE(<tham số 1> [, <tham số 2>,...]);
(2)
WRITELN(<tham số 1> [, <tham số 2>,...]);
(3)
WRITELN;
Các thủ tục trên có chức năng như sau:
(1) Sau khi xuất giá trị của các tham số ra màn hình thì con trỏ khơng xuống dòng.
(2) Sau khi xuất giá trị của các tham số ra màn hình thì con trỏ xuống đầu dòng tiếp theo.
(3) Xuất ra màn hình một dòng trống.
Các tham số có thể là các hằng, biến, biểu thức. Nếu có nhiều tham số trong câu lệnh thì

các tham số phải được phân cách nhau bởi dấu phẩy.
GV: Lê Văn Lại

Trang 10


Chuyên đề Bồi dưỡng học sinh giỏi môn Tin học Năm học 20172018
 Nhập dữ liệu: Để nhập dữ liệu từ bàn phím vào các biến có kiểu dữ liệu chuẩn (trừ các biến
kiểu BOOLEAN), ta sử dụng cú pháp sau đây:
READLN(<biến 1> [,<biến 2>,...,<biến n>]);
Chú ý: Khi gặp câu lệnh READLN; (khơng có tham số), chương trình sẽ dừng lại chờ người sử
dụng nhấn phím ENTER mới chạy tiếp.

7. BÀI TẬP:
7.1. Viết chương trình nhập 2 số ngun x,
tongluong := (bacluong + tigia +
y. Tính tổng, hiệu, tích, thương của chúng
phucap) / 26 * sonc * 0.98;
và xuất kết quả ra màn hình.
writeln('Tong luong nhan vien
program tong_hieu_tich_thuong;
la: ', tongluong:8:0);
uses crt;
readln
var x, y: integer;
end.
begin
7.3. Lớp em có n học sinh, số học sinh nam
clrscr;
nhiều hơn số học sinh nữ là k. Hỏi lớp em có

write('Nhap vao so nguyen x: ');
bao nhiêu học sinh nam, nữ. Viết chương
readln(x);
trình giải bài tốn trên với n, k được nhập
write('Nhap vao so nguyen y: ');
từ bàn phím.
readln(y);
program tinh_hoc_sinh_nam_nu;
writeln('Tong cua hai so ',x,' va
uses crt;
',y,' la: ', x+y);
var n, k, nam, nu: integer;
writeln('Hieu cua hai so ',x,' va
begin
',y,' la: ', x-y);
clrscr;
writeln('Tich cua hai so ',x,' va
write(Tong so hoc sinh: ');
',y,' la: ', x*y);
readln(n);
writeln('Thuong cua hai so ',x,'
write(So hs nam nhieu hon hs
va ',y,' la: ', x/y:5:2);
nu: ');
readln(k);
readln
nu := (n - k) div 2; nam := n end.
nu;
7.2. Viết chương trình tính tổng lương nhân
writeln('So hoc sinh nam: ',

viên theo cơng thức sau:
nam);
Bacluong + Tigia + Phucap
writeln('So hoc sinh nu : ', nu);
Tongluong =
* Songaycong − BHXH
readln
26
end.
Với BHXH là số tiền phải đóng bảo hiểm,
7.4.
Lớp
em
có n học sinh, số học sinh nam
bằng 2% lương thực lãnh và Tỉ giá bằng
nhiều hơn gấp k lần số học sinh nữ. Hỏi lớp
14600.
em có bao nhiêu học sinh nam, nữ. Viết
program
chương trình giải bài tốn trên với n, k
tinh_tong_luong_nhan_vien;
được nhập từ bàn phím.
uses crt;
const tigia = 14600;
program tinh_hoc_sinh_nam_nu;
var bacluong, phucap, sonc,
uses crt;
tongluong: real;
var n, k, nam, nu: integer;
begin

begin
clrscr;
clrscr;
write('Nhap bac luong: ');
write('Nhap tong so hoc sinh: ');
readln(bacluong);
readln(n);
write('Nhap phu cap: ');
write('Nhap so lan hs nam hon
readln(phucap);
hs nu: ');
readln(k);
write('Nhap so ngay cong: ');
nu
:=
n
div
(k
+ 1); nam := n readln(sonc);
nu;
GV: Lê Văn Lại

Trang 11


Chuyên đề Bồi dưỡng học sinh giỏi môn Tin học Năm học 20172018
writeln('So hoc sinh nam: ',
readln
nam);
end.

writeln('So hoc sinh nu : ', nu);

GV: Lê Văn Lại

Trang 12


Chuyên đề Bồi dưỡng học sinh giỏi môn Tin học Năm học 20172018

CHƯƠNG 3: CÁC KIỂU DỮ LIỆU CƠ BẢN
I. KIỂU LOGIC
- Kiểu logic là kiểu biểu diễn hai trạng thái là đúng (True) hoặc sai (False). Từ khố để khai
báo cho kiểu logic là BOOLEAN.
- Các phép tốn: phép so sánh (=, <, >) và các phép tốn logic: AND, OR, XOR, NOT.
Trong Pascal, khi so sánh các giá trị boolean ta tn theo qui tắc: FALSE < TRUE.
Giả sử A và B là hai giá trị kiểu Boolean. Kết quả của các phép tốn được thể hiện qua bảng
dưới đây:
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
Ví dụ:
Var Co : Boolean;
Co := True;
II. KIỂU SỐ NGUN
a. Các kiểu số ngun
Tên kiểu
Phạm vi
Dung lượng
Shortint
-128 → 127
1 byte
Byte
0 → 255

1 byte
Integer
-32768 → 32767
2 byte
Word
0 → 65535
2 byte
LongInt
-2147483648 → 2147483647
4 byte
b. Sử dụng hàm Random(n) để lấy số ngẫu nhiên:
Hàm Random(n) sẽ trả về một giá trị ngun mà máy lấy ngẫu nhiên có giá trị từ 0 đến n. Trong đó, n
là một số kiểu Word tức là trong khoản từ 0.. 65535. Trước khi sử dụng hàm Random ta phải gọi thủ
tục Randomize để khởi tạo bộ tạo số ngẫu nhiên.
Ví dụ:
Var so : Integer;

Randomize
so := Random(1000);
c. Các phép tốn trên kiểu số ngun
Các phép tốn số học: +, -, *, / (phép chia cho ra kết quả là số thực).
Phép chia lấy phần ngun: DIV (Ví dụ : 34 DIV 5 = 6).
Phép chia lấy số dư: MOD (Ví dụ: 34 MOD 5 = 4).
III. KIỂU SỐ THỰC
a. Các kiểu số thực
Tên kiểu
Phạm vi
Single
1.5× 10-45 → 3.4× 10+38
Real

2.9× 10-39 → 1.7× 10+38
Double
5.0× 10-324 → 1.7× 10+308
Extended
3.4× 10-4932 → 1.1× 10+4932
b. Các phép tốn trên kiểu số thực:
+, -, *, /
Chú ý:
GV: Lê Văn Lại

Dung lượng
4 byte
6 byte
8 byte
10 byte

Trang 13


Chuyên đề Bồi dưỡng học sinh giỏi môn Tin học Năm học 20172018
- Trên kiểu số thực khơng tồn tại các phép tốn DIV và MOD.
- Biến số thực có thể nhận giá trị ngun. Nhưng biến số ngun khơng nhận được giá trị
thực.
c. Các hàm số học sử dụng cho kiểu số ngun và số thực:
SQR(x):
Trả về x2
SQRT(x):
Trả về căn bậc hai của x (x≥ 0)
ABS(x):
Trả về |x|

SIN(x):
Trả về sin(x) theo radian
COS(x):
Trả về cos(x) theo radian
ARCTAN(x): Trả về arctang(x) theo radian
LN(x):
Trả về ln(x)
EXP(x):
Trả về ex
TRUNC(x):
Trả về số ngun gần với x nhất nhưng bé hơn x.
INT(x):
Trả về phần ngun của x
FRAC(x):
Trả về phần thập phân của x
ROUND(x):
Làm tròn số ngun x
PRED(n):
Trả về giá trị đứng trước n
SUCC(n):
Trả về giá trị đứng sau n
ODD(n):
Cho giá trị TRUE nếu n là số lẻ.
INC(n):
Tăng n thêm 1 đơn vị (n:=n+1).
DEC(n):
Giảm n đi 1 đơn vị (n:=n-1).

IV. KIỂU KÍ TỰ(Char)
* Bộ mã ASCII (American Standard Code for Information Interchange) là bộ mã ký tự được sử dụng

phổ biến, có 256 ký tự gồm các ký tự điều khiển, chữ số, chữ cái A..Z và những ký tự đặc biệt khác.
Hằng ký tự được biểu diễn bằng một ký tự nằm trong dấu nháy đơn (’). Ví dụ: ‘a’, ‘9’, ‘+’, …
Ký tự
Số TT
Ký tự
Số TT
Ký tự
Số TT
Ký tự
Số TT
Dấu cách
32
%
37
0
48
1
49
2
50
3
51
4
52
5
53
6
54
7
55

8
56
9
57
A
65
B
66
C
67
D
68
E
69
F
70
G
71
H
72
I
73
J
74
K
75
L
76
M
77

N
78
O
79
P
80
Q
81
R
82
S
83
T
84
U
85
V
86
W
87
X
88
Y
89
Z
90
a
97
b
98

c
99
d
100
E
101
f
102
g
103
H
104
I
105
j
106
k
107
L
108
M
109
n
110
o
111
P
112
Q
113

r
114
s
115
T
116
U
117
v
118
w
119
X
120
Y
121
z
122
{
123
}
124
/
/
/
/
* Các hàm trên kiểu ký tự:
- UPCASE(ch): Trả về ký tự in hoa tương ứng với ký tự ch. Ví dụ: UPCASE('a') = 'A'.
- ORD(ch): Trả về số thứ tự trong bảng mã ASCII của ký tự ch. Ví dụ ORD('A')=65.
- CHR(n): Trả về ký tự tương ứng trong bảng mã ASCII có số thứ tự là n. Ví dụ: CHR(65)='A'.

- PRED(ch): cho ký tự đứng trước ký tự ch. Ví dụ: PRED('B')='A'.
GV: Lê Văn Lại

Trang 14


Chuyên đề Bồi dưỡng học sinh giỏi môn Tin học Năm học 20172018
- SUCC(ch): cho ký tự đứng sau ký tự ch. Ví dụ: SUCC('A')='B'.
- SUCC(kytu)
:
Trả về ký tự nằm sau ký tự kytu trong bảng mã ASCII.

Ví dụ: ord(‘a’) = 97;
ord(‘9’) = 57;
pred(‘b’) = ‘a’;
succ(‘d’) = ‘e’;
Lưu ý: ‘A’ < ‘a’
- Tên kiểu: Char. (Kích thước: 1 byte)
- Để biểu diễn một ký tự, ta có thể sử dụng một trong số các cách sau đây:
• Đặt ký tự trong cặp dấu nháy đơn.
Ví dụ kt:='A';
Chuso:= '0';
• Dùng hàm CHR(n) (trong đó n là mã ASCII của ký tự cần biểu diễn, bảng mã ASCII có 255 kí
tự ). Ví dụ CHR(65) biễu diễn ký tự 'A'.
* Các phép tốn: =, >, >=, <, <=,<>.
V. KIỂU XÂU KÍ TỰ
- Tên kiểu: String
- Là kiểu dữ liệu chứa các giá trị là nhóm các ký tự hoặc chỉ một ký tự, kể cả chuỗi rỗng. Độ dài
tối đa của một biến kiểu String là 255, tức là nó có thể chứa tối đa một dãy gồm 255 ký tự.
Cú pháp khai báo:

Var Biến1, Biến2, Biếnn: String; (1)
Var Biến1, Biến2, Biếnn: String [30]; (2)
Cách khai báo (1) sẽ cho phép biến HoTen nhận tối đa 255 ký tự. Cách (2) cho phép biến HoTen
nhận tối đa 30 ký tự.
Ghi chú: Cách sử dụng kiểu dữ liệu String sẽ được trình bày chi tiết Chương 5.
VI: BÀI TẬP:
1. Viết chương trình nhập vào một ký tự.
và chữ cái tương ứng với nó trong bảng mã
Xuất ra màn hình ký tự vừa nhập và mã
ASCII.
ASCII của nó.
program in_ma_ASCII;
program in_ma_ASCII;
uses crt;
uses crt;
var so: byte;
var kytu: char;
begin
begin
clrscr;
clrscr;
write('Nhap vao so nguyen: ');
write('Nhap vao ky tu: ');
readln(so);
readln(kytu);
write('Ma ASCII cua so nguyen
write('Ma ASCII cua ky tu ',
', so ,' la: ', chr(so));
kytu, ' la: ', ord(kytu));
readln

readln
end.
end.
3. Viết chương trình in ra màn hình mã
2. Viết chương trình nhập vào một số
ASCII của những ký tự có số thứ tự từ 33
ngun dương. In ra màn hình số vừa nhập
đến 255.

CHƯƠNG 4: CÁC CÂU LỆNH CĨ CẤU TRÚC
I. LỆNH GHÉP:
Lệnh ghép là một nhóm các câu lệnh được đặt giữa hai từ khố BEGIN và END.
Lệnh ghép được thực hiện bằng cách thực hiện tuần tự các câu lệnh nằm giữa
BEGIN và END.
Cú pháp:
Begin
<câu lệnh 1>;
<câu lệnh 2>;
...
GV: Lê Văn Lại

Trang 15


Chuyên đề Bồi dưỡng học sinh giỏi môn Tin học Năm học 20172018
<câu lệnh n>;
End;
Sau <câu lệnh n> có thể có dấu ‘;‘ hoặc khơng. Lệnh ghép cũng là một dạng câu lệnh.
Ví dụ:
Begin

temp := x;
x := y;
y := temp;
End;
Chú ý: Sau từ khóa END có thể có dấu ‘;‘ hay khơng tùy thuộc vào các lệnh cấu trúc kế tiếp ta được
học.
II. CÂU LỆNH LỰA CHỌN (RẼ NHÁNH)
1. Lệnh IF
Cú pháp:
Dạng thiếu: IF <Điều kiện> THEN <Câu lệnh>
Dạng đủ: IF < Điều kiện> THEN < Câu lệnh 1> ELSE < Câu lệnh 2>;
Giải thích lệnh: Khi gặp lệnh này máy kiểm tra < Điều kiện> nếu biểu thức này có giá trị TRUE
(tức là đúng như điều kiện đặt ra) thì máy thực hiện <câu lệnh1> nếu ngược lại, tức logic> có giá trị FALSE thì <câu lệnh 2> được thực hiện. Trường hợp trong câu lệnh khơng có phần
ELSE và <biểu thức logic> có giá trị FALSE thì <câu lệnh> khơng được thực hiện và máy chuyển
đến câu lệnh kế sau lệnh IF đó.
Chú ý: Trước từ khóa ELSE khơng đựơc có dấu ‘;‘. Trường hợp có câu lệnh ghép đựơc đặt kế
trước ELSE thì từ khố END trước ELSE khơng được đặt dấu ‘;‘.
Ví dụ 1: Chương trình nhập từ bàn phím 2 số ngun a, b. Kiểm tra và cho biết số nào lớn hơn.
Var a, b : Integer;
Begin
Write( ‘ Nhap so a: ‘ ); Readln(a);
Write( ‘ Nhap so b: ‘ ); Readln(b);
If a > b then Write( ‘ So lon hon la ‘, a) { tại vị trí này khơng được đặt dấu; }
Else Write( ‘ So lon hon la ‘, b);
Readln;
End.
Ví dụ 2: Viết chương trình kiểm tra trong ba số a, b, c được nhập từ bàn phím, số nào là lớn nhất.
Var a, b, c, max : Integer;
Begin

Write( ‘ Nhap so a: ‘ ); Readln(a);
Write( ‘ Nhap so b: ‘ ); Readln(b);
Write( ‘ Nhap so c: ‘ ); Readln(c);
Max := a;
If max < b thenMax := b;
If max < c then Max := c;
Write( ‘ So lon hon la ‘, max);
Readln;
End.
2. Lệnh CASE
Cú pháp:
Dạng 1
Dạng 2

GV: Lê Văn Lại

Trang 16


Chuyên đề Bồi dưỡng học sinh giỏi môn Tin học Năm học 20172018
CASE B OF
CASE B OF
Hằng 1: S1;
Hằng 1: S1;
Hằng 2: S2;
Hằng 2: S2;
...
...
Hằng n: Sn;
Hằng: Sn;

END;
ELSE Sn+1;
END;
Trong đó:
 B: Biểu thức kiểu vơ hướng đếm được như kiểu ngun, kiểu logic, kiểu ký tự, kiểu liệt kê.
 Hằng i: có thể là một giá trị hằng, các giá trị hằng (phân cách nhau bởi dấu phẩy) hoặc các
đoạn hằng (dùng hai dấu chấm để phân cách giữa giá trị đầu và giá trị cuối).
 Giá trị của biểu thức và giá trị của tập hằng i (i=1¸n) phải có cùng kiểu.
Khi gặp lệnh CASE, chương trình sẽ kiểm tra:
- Nếu giá trị của biểu thức B nằm trong tập hằng Hằng i thì máy sẽ thực hiện lệnh Si tương ứng.
- Ngược lại:
+ Đối với dạng 1: Khơng làm gì cả.
+ Đối với dạng 2: thực hiện lệnh Sn+1.
Ví dụ: Viết chương trình nhập vào một điểm kiểm tra từ bàn phím và in kết quả xếp loại: loại Yếu
(dưới 5 điểm), loại Trung bình (5, 6 điểm), loại Khá (7, 8 điểm), loại Giỏi (9, 10 điểm).
Var Diem : Byte;
Begin
Write( ‘ Nhap diem : ’);
Readln(Diem);
Case Diem of
0.. 4 : Write( ‘ Xep loai yeu. ‘ );
5.. 6 : Write( ‘ Xep loai Trung binh. ‘ );
7.. 8 : Write( ‘ Xep loai Kha. ‘ );
9..10: Write( ‘ Xep loai Gioi. ‘ );
Else
Write( ‘ Diem nhap sai. ‘ );
End;
Readln;
End.
III. CÂU LỆNH LẶP

Trường hợp để giải quyết bài tốn nào đó mà ta cần phải lặp đi lặp lại một cơng việc nào đó thì ta
sẽ cần đến lệnh lặp. Số bước lặp có thể xác định hoặc khơng xác định. Trong ngơn ngữ Pascal có ba
câu lệnh lặp là FOR, REPEAT, WHILE. Nếu số vòng lặp xác định thì ta sử dụng lệnh FOR còn vòng
lặp khơng xác định thì ta sử dụng lệnh REPEAT hoặc WHILE. Tất cả các loại lệnh lặp phải có điểm
dừng, cho dù đó là loại xác định hay khơng xác định.
1. Vòng lặp xác định (For)
a. Dạng tiến:
Cú pháp: FOR <Biến> := <giá trin Min> TO <giá trị max> DO < Câu Lệnh >;
<Biến> trong cấu trúc FOR gọi là biến điều khiển. Kiểu của biến điều khiển là kiểu số ngun,
<giá trin Min>, <giá trị max> phải là kiểu vơ hướng đếm được (số ngun, kí tự…).
Giải thích sự hoạt động lệnh FOR dạng tiến:
B1: Đầu tiên, Biến nhận giá trị của biểu_ thức1.

B2: Máy kiểm tra Biến có nhỏ hơn hoặc bằng biểu_ thức2 hay khơng tức là xét điều kiện (Biến <=
Biểu_ thức2) ?

GV: Lê Văn Lại

Trang 17


Chuyên đề Bồi dưỡng học sinh giỏi môn Tin học Năm học 20172018
B3: Nếu điều kiện trên là sai thì máy thốt khỏi vòng lặp FOR để thực hiện các lệnh kế tiếp sau
vòng lặp FOR. Nếu điều kiện trên là đúng thì <Lệnh> được thực hiện, sau đó, Biến được tăng một
giá trị và quay trở lại bước (2).
Lưu ý: Số lần lặp tính bằng cơng thưc : <giá trị Max> - <giá trin Min> + 1
b. Dạng lùi:
Cú pháp: FOR <Biến> := <giá trin Max> DOWNTO <giá trin Min> DO <Câu lệnh>
Giải thích sự hoạt động lệnh FOR dạng lùi:
B1: Đầu tiên, Biến nhận giá trị của biểu thức1.

B2: Máy kiểm tra Biến có lớn hơn hoặc bằng biểu thức2 hay khơng tức là xét điều kiện (Biến >=
Biểu_ thức2) ?
B3: Nếu điều kiện trên là sai thì máy thốt khỏi vòng lặp FOR để thực hiện các lệnh kế tiếp sau
vòng lặp FOR. Nếu điều kiện trên là đúng thì <Lệnh> được thực hiện, sau đó, Biến được giảm một
giá trị và quay trở lại bước (2).
Lưu ý
- Khơng được thay đổi giá trị của biến điều khiển bằng một lệnh bất kỳ trong vòng lặp FOR. Điều
này có thể làm cho vòng lặp khơng có lối thốt và dân đến treomáy.
- Các Biểu thức1 và Biểu hức2 được ước lượng trước khi vào vòng lặp, do đó số vòng lặp khơng bị
thay đổi. Ta có thể lợi dụng tính tăng hoặc giảm của biến điều khiển để gán giá trị của nó cho bất kỳ
biến nào hoặc thực hiện cơng việc nào đó có tính chất tăng hoặc giảm.
2. Vòng lặp khơng xác định
Dạng REPEAT
Dạng WHILE
Repeat
While B Do S;
S;
Until B;
Ý nghĩa: Dạng REPEAT: Lặp lại cơng việc S cho đến khi biểu thức B=TRUE thì dừng.
Dạng WHILE: Trong khi biểu thức B=TRUE thì tiếp tục thực hiện cơng việc S.
a. Câu lệnh REPEAT
Cú pháp:
REPEAT
<Lệnh 1>;
<Lệnh 2>;
.........
<Lệnh n>;
UNTIL < Biểu thức logic >;
Giải thích sự hoạt động lệnh REPEAT:
Đầu tiên, thực hiện lần lượt các lệnh <Lệnh 1>, <Lệnh 2>,..., <Lệnh n>, sau đó kiểm tra < Biểu

thức logic >. Nếu < Biểu thức logic > nhận giá trị FALSE thì lại quay lên đầu vòng lặp thực hiện tiếp
<Lệnh 1>, <Lệnh 2>,..., <Lệnh n>. Nếu <Biểu thức logic > nhận giá trị TRUE thì máy thốt khỏi
vòng lặp. Như vậy, các lệnh nằm giữa REPEAT... UNTIL được thực hiện ít nhất một lần.
Chú ý:
- Các lệnh nằm giữa REPEAT và UNTIL khơng có từ khố Begin và End.
- Trong vòng lặp phải có lệnh nào đó làm thay đổi giá trị một biến trong <Biểu thức logic> nhằm
làm dừng vòng lặp, nếu khơng vòng lặp sẽ chạy mãi khơng ngừng dẫn đến treo máy.
Ví dụ: Chương trình u cầu nhập vào một mật khẩu là ‘ttthcn’ thì mới thốt khỏi chương trình.
Uses CRT;
Var Password : String[6];
Begin
Repeat
Write( ‘ Xin hay nhap mat khau : ‘ );
Readln(Password);
Until Password = ‘ttthcn’;
GV: Lê Văn Lại

Trang 18


Chuyên đề Bồi dưỡng học sinh giỏi môn Tin học Năm học 20172018
Write( ‘ Ban da nhap dung mat khau ! ‘ );
Delay(1000);
Readln;
End.
Giải thích lệnh: Delay(1000): Thủ tục Delay(n) là thủ tục của Unit CRT tức là dừng một khoản
thời gian là 1000 xung nhịp của máy, vì vậy, tùy theo tốc độ của máy mà có khoản thời gian thực
dừng lại khác nhau.
b. Câu lệnh While:
Cú pháp:

WHILE < Biểu thức logic > DO < Lệnh >;
Giải thích lệnh: Gặp lệnh này trước tiên máy kiểm tra < Biểu thức logic >, nếu nó có giá trị TRUE
thì thực hiện < Lệnh > và sau đó quay lại kiểm tra < Biểu thức logic > và q trình cứ tiếp tục như
vậy. Nếu < Biểu thức logic > nhận giá trị FALSE thì máy lập tức thốt khỏi vòng lặp. Như vậy lệnh
WHILE dùng để lặp đi lặp lại một cơng việc trong khi điều kiện còn được thỏa mãn.
Ghi chú: Nếu ngay từ khi mới vào vòng lặp mà thấy điều kiện khơng được thỏa mãn, máy tự động
thốt ngay mà khơng thực hiện < Lệnh > bên trong vòng lặp.
Ví dụ: Chương trình tìm ước số chung lớn nhất của hai số ngun.
Var a, b, r : Integer; tl : Char;
Begin
Repeat
Write( ‘ Nhap hai so a va b : ‘ );
Readln(a, b);
While b <> 0 do
Begin
r := a mod b;
a := b;
b := r;
End;
Writeln( ‘ Uoc so chung lon nhat la ‘ , a );
Write( ‘ Ban tim USCLN nua khong (C/K) ? );
Readln(tl);
Until Upcase(tl) = ‘K’;
End.
IV. BÀI TẬP:
1. Viết chương trình nhập số ngun dương
readln
X, in kết quả cho biết X có chia hết cho 3
end.
hoặc 7 hay khơng?

2. Viết chương trình nhập vào điểm trung
program kiem_tra;
bình. In kết quả xếp loại như sau:
uses crt;
10 ≥ Điểm trung bình ≥ 9: Xuất sắc.
var so: byte;
9 > Điểm trung bình ≥ 8 : Giỏi.
begin
clrscr;
8 > Điểm trung bình ≥ 7 : Khá.
write('Nhap so nguyen duong: ');
7 > Điểm trung bình ≥ 5 : Trung bình.
readln(so);
5 > Điểm trung bình ≥ 0 : Yếu.
if (so mod 3 = 0) or (so mod 7 =
Lưu ý: Cho phép nhập điểm trung bình ở
0) then
dạng số thực, điểm nhập vào phải thoả
write(so, ' chia het cho 3 hoac
[0..10] nếu nhập ngồi giới hạn thì thơng
7.')
báo “Điểm trung bình nhập khơng hợp lệ!”
else
và bỏ qua khơng so sánh.
write(so, ' khong chia het cho
program in_xep_loai;
3 hoac 7.');
uses crt;
GV: Lê Văn Lại
Trang 19



Chuyên đề Bồi dưỡng học sinh giỏi môn Tin học Năm học 20172018
var dtb: real; xeploai: String;
write('Nhap so nguyen duong: ');
begin
readln(n);
clrscr;
write('Cac so nguyen to tu 1 den
write('Nhap diem trung binh: ');
', n, ':');
readln(dtb);
for i := 2 to n do
if (dtb >= 0) and (dtb <= 10)
begin
then
j := 2;
begin
while (j <= sqrt(i)) and (i
if dtb >= 9 then xeploai :=
mod j <> 0) do inc(j);
'Xuat Sac'
if j>sqrt(i) then write(i:4);
else
end;
if dtb >= 8 then xeploai :=
readln
'Gioi'
end.
else

5. Viết chương trình nhập vào số ngun n.
if dtb >= 7 then
Sau đó tính tổng:
xeploai := 'Kha'
a. S = 1 + 2 3 + 33 + ... + n 3
b.
else
P = 1.2 + 2.3 + ... + (n − 1)n
if dtb >= 5 then
program tinh_tong_s;
xeploai := 'Trung binh'
uses crt;
else xeploai := 'Yeu';
var i, n, s: integer;
write('Xep loai: ', xeploai);
begin
end
clrscr;
else write('Diem trung binh
write('Nhap so so hang cua day: ');
khong hop le!');
readln(n);
readln
s := 0;
end.
for i := 1 to n do s := s + sqr(i) * i;
3. Viết chương trình nhập vào hai số x, y.
write('Tong :', s:4);
Tính xy.
readln

program tinh_x_mu_y;
end.
uses crt;
program tinh_tong_p;
var x,y,i,it: integer;
uses crt;
begin
var i, n, p: integer;
clrscr;
begin
write('Nhap vao so x: ');
clrscr;
readln(x);
write('Nhap so so hang cua day: ');
write('Nhap vao so mu:');
readln(n);
readln(y);
p := 0;
it := 1;
for i:=1 to n do p := p + i*(i+1);
for i:= 1 to y do it := it * x;
write('Tong :', p:4);
write(x, ' mu ', y, ' bang ', it);
readln
readln
end.
end.
4. Viết chương trình nhập vào số ngun
6. Viết chương trình tính tổng tới n số hạng:
dương n, tìm và in các số ngun tố từ 1 đến

3 5 7 9 11 13 15
S = 1 + + + + + + + + ...
n.
2 3 4 5 6 7 8
program in_so_nguyen_to;
Với n ngun dương được nhập vào khi
uses crt;
chạy chương trình và n < 11.
var n, i, j: byte;
program tinh_tong;
begin
uses crt;
clrscr;
var i, n:byte;
tong: real;
GV: Lê Văn Lại
Trang 20


Chuyên đề Bồi dưỡng học sinh giỏi môn Tin học Năm học 20172018
begin
for i := 1 to n do tong := tong +
repeat
(2*i-1)/i;
clrscr;
write('Tong cua ', n, ' so hang: ',
write('Nhap so so hang can
tong:5:2);
tinh tong: ');
readln(n);

readln
until (n<12) and (n>0);
end.
tong := 0;

CHƯƠNG 5: DỮ LIỆU KIỂU MẢNG (ARRAY)
I. KHÁI NIỆM
Mảng (Array) là một kiểu dữ liệu có cấu trúc bao gồm một số cố định các thành phần có cùng
kiểu, có cùng một tên chung. Các thành phần của mảng được truy xuất thơng qua các chỉ số.
Ví dụ: Mảng A gồm năm phần tử: A[1]=7, A[2]=9, A[3]=0, A[4]= -2, A[5]=3:
Cơng dụng của mảng là dùng để lưu trữ một dãy số liệu có cùng một tính chất nào đó. Ví dụ: các
điểm kiểm tra một mơn học nào đó của một học sinh, các giá trị của một dãy số được nhập từ bàn
phím.
II. KHAI BÁO MẢNG
1. Mảng Một chiều
a . Khai báo mảng một chiều:
Var
Tên_ biến_ mảng : ARRAY [1.. n] OF Kiểu phần Tử;
Trong đó:
- Kiểu phần tử là kiểu dữ liệu của mỗi phần tử trong mảng (Integer, real, string, …).
- 1.. n là danh sách các chỉ số để truy cập đến các thành phần của mảng.
Ví dụ:
Var ch : Array[0.. 25] of Char;
Th : Array[-2.. 4] of Real;
b. Truy cập câc phần tử của mảng:
Việc truy nhập vào một phần tử nào đó của biến mảng được thực hiệnh qua tên biến mảng, theo
sau là giá trị chỉ số đặt trong dấu [ ].
Ví dụ:
Ch[2] := ’B’;
Th[1] := 12.5;

c. Ví dụ :
Nhập n số thực từ bàn phím vào một mảng, tính trung bình cộng của các số này.
Uses CRT;
Var i,n : Integer;
s : Real;
a : Array[1.. 100] of Real;
Begin
ClrScr;
Write( ‘ Ban muon nhap bao nhieu PT cho mang : ‘ ); Readln(n);
For i := 1 to n do
Begin
Write( ‘A[ ‘ , i , ‘ ]= ’ );
Readln(a[i]);
End;
s := 0;
For i := 1 to n do s := s + a[i];
GV: Lê Văn Lại

Trang 21


Chuyên đề Bồi dưỡng học sinh giỏi môn Tin học Năm học 20172018
Write( ‘ Trung binh cong cua day so = ‘ , s / n : 0 : 4 );
Readln;
End.
2. Mảng Hai Chiều
a. Khai báo
Việc khai báo mảng hai chiều cũng giống như mảng một chiều, chỉ có điều khác là nó có hai tập
chỉ số được viết cách nhau bởi dấu ‘,’.
Ví dụ:

Var
A : Array[1.. 30, 1.. 50] of Integer;
B : Array[1.. 3, 1.. 3] of Real;
b. Truy cập câc phần tử của mảng:
Số phần tử của mảng số thực B là 3 x 3 = 9 (phần tử), sắp đặt trong bộ nhớ theo thứ tự như sau:
B[1, 1] B[1, 2] B[1 ,3]
B[2, 1] B[2, 2] B[2 ,3]
B[3, 1] B[3, 2] B[3 ,3]
Chú ý: Mảng hai chiều còn gọi là ma trận. Trong ví dụ trên, B là ma trận cấp 3x 3. Trong mảng
hai chiều, chỉ số sau truy cập nhanh hơn chỉ số trước. Để truy cập đến phần tử hàng thứ i, cột thứ j
của mảng hai chiều B ta dùng cách viết: B[ i ][ j ] hoặc B[ i , j ]
c. Ví dụ:
Nhập một ma trận m hàng, n cột từ bàn phím. Tính và in ra màn hình tổng của mỗi cột và tổng của
mỗi hàng.
Var
n, m, i, j : Integer;
sum : Real;
a : Array[1.. 30, 1.. 30] of Real;Begin
BEGIN
Write( ‘ Ban muon nhap ma tran bao nhieu hang va cot ? ‘ ); Readln( m, n );
For i := 1 to m do
For j := 1 to n do
Begin
Write( ' PT thu [ ' , i , ' , ‘ , j, ‘ ] = ' );
Readln( a[ i, j ] );
End;
For j := 1 to n do
Begin
sum := 0;
For i := 1 to m do Sum := sum + a[ i, j ];

Write( ‘ Tong cot ‘ , j ,’ = ‘ , sum : 0 : 5 );
End;
For i := 1 to m do
Begin
sum := 0;
For j := 1 to n do Sum := sum + a[ i, j ];
Write( ‘ Tong hang ‘ , i ,’ = ‘ , sum : 0 : 5 );
End;
Readln;
END.
3. BÀI TẬP:

GV: Lê Văn Lại

Trang 22


Chuyên đề Bồi dưỡng học sinh giỏi môn Tin học Năm học 20172018
1. Viết chương trình nhập vào một dãy số,
program day_so;
sau đó xuất ra màn hình dãy số được sắp
uses crt;
xếp tăng dần.
type arr = array[1..20] of integer;
program day_so;
var a: arr; n: byte;
uses crt;
procedure nhap_day_so (var a: arr; var n:
type arr = array [1..20] of integer;
byte);

var a: arr; n: byte;
var i: byte;
procedure nhap_day_so (var a: arr; var n:
begin
byte);
repeat
var i: byte;
write('Nhap so so nguyen cua day so: ');
begin
readln(n);
repeat
until n > 0;
write('Nhap so so nguyen cua day so: ');
for i := 1 to n do
readln(n);
begin
until n > 0;
write('a[', i, '] = ');
readln(a[i]);
for i := 1 to n do
end;
begin
end;
write('a[', i, '] = ');
readln(a[i]);
procedure in_day_so (a: arr; n: byte);
end;
var i: byte;
end;
begin

procedure in_day_so (a: arr; n: byte);
for i := 1 to n do write(a[i]:5);
var i: byte;
end;
begin
function so_lon_nhat (a: arr; n: byte): integer;
for i := 1 to n do write(a[i]:5);
var i: byte; max: integer;
end;
begin
procedure sap_xep_tang (var a: arr; n: byte);
max := a[1];
var i, j: byte;
for i := 2 to n do
begin
if max < a[i] then max := a[i];
for i := 1 to n - 1 do
so_lon_nhat := max;
for j := i+1 to n do
end;
if a[i] > a[j] then
function so_nho_nhat (a: arr; n: byte): integer;
begin
var i: byte; min: integer;
a[i] := a[i] + a[j];
begin
a[j] := a[i] - a[j];
min := a[1];
a[i] := a[i] - a[j];
for i := 2 to n do

end; end;
if min > a[i] then min := a[i];
begin
so_nho_nhat := min;
clrscr;
end;
nhap_day_so(a, n);
function trung_binh_cong (a: arr; n: byte): real;
write('Day so nguyen:
');
var i: byte; tong: real;
in_day_so(a, n);
begin
sap_xep_tang (a, n);
tong := 0;
writeln;
for i := 1 to n do tong := tong + a[i];
write('Day so sap xep tang: ');
trung_binh_cong := tong/n;
in_day_so(a, n);
end;
readln
begin
end.
clrscr;
2. Viết chương trình nhập vào một dãy số,
nhap_day_so(a, n);
sau đó xuất ra màn hình số lớn nhất, bé
write('Day so nguyen: ');
nhất và trung bình cộng của dãy số vừa

in_day_so(a, n);
nhập.
writeln;
GV: Lê Văn Lại

Trang 23


Chuyên đề Bồi dưỡng học sinh giỏi môn Tin học Năm học 20172018
writeln('So nguyen lon nhat la:
4. Viết chương trình:
',so_lon_nhat(a, n));
- Nhập ma trận vng An,n.
writeln('So nguyen nho nhat la:
- Kiểm tra A có phải là ma trận đối
',so_nho_nhat(a, n));
xứng khơng?
write('Trung binh cong cac so nguyen la:
- Kiểm tra A có phải là ma trận đơn
',trung_binh_cong(a, n):5:2);
vị khơng?
readln
Biết: - Ma trận đối xứng, nếu
end.
aij = a ji , ∀i, j = 1, n
3. Viết chương trình nhập vào một dãy số,
- Ma trận đơn vị, nếu tất cả các phần
kiểm tra xem dãy số đó có phải là dãy số
tử trên đường chéo chính bằng 1 và các
tăng dần hay khơng?

phần tử còn lại bằng 0.
program day_so;
program matran;
uses crt;
uses crt;
type arr = array[1..20] of integer;
type matrix = array [1..5,1..5] of byte;
var a: arr; n: byte;
var a: matrix; n: byte;
procedure nhap_day_so (var a: arr; var n:
procedure input_matrix (var a: matrix; var n:
byte);
byte);
var i: byte;
var i, j: byte;
begin
begin
repeat
write('Number of rows (columns): ');
write('Nhap so so nguyen cua day so: ');
readln(n);
readln(n);
writeln('Let`s input value of matrix`s
until n > 0;
elements:');
for i := 1 to n do
for i := 1 to n do
begin
for j := 1 to n do
write('a[',i,'] = ');

readln(a[i]);
begin
end;
write('a[', i, ', ', j, '] = '); readln(a[i][j]);
end;
end;
procedure in_day_so (a: arr; n: byte);
end;
var i: byte;
begin
procedure print_matrix (a: matrix; n: byte);
for i := 1 to n do write(a[i]:5);
var i, j: byte;
end;
begin
function kiem_tra (a: arr; n: byte): boolean;
for i := 1 to n do
var i: byte;
begin
begin
for j := 1 to n do write(a[i][j]:4);
i := 1;
writeln(#13,#10);
while a[i] <= a[i+1] do inc(i);
end;
if i = n then kiem_tra := true
end;
else kiem_tra := false;
function symmetrical_matrix (a: matrix; n:
end;

byte): boolean;
begin
var i, j: byte; test: boolean;
clrscr;
begin
nhap_day_so(a, n);
test := true;
write('Day so nguyen: ');
for i := 1 to n-1 do
in_day_so(a, n); writeln;
for j := i+1 to n do
if kiem_tra(a, n) then write('Day so tang
if a[i][j] <> a[j][i] then test := false;
dan.')
symmetrical_matrix := test;
else write('Day so khong tang dan.');
end;
readln
function unit_matrix (a: matrix; n: byte):
end.
boolean;
GV: Lê Văn Lại
Trang 24


Chuyên đề Bồi dưỡng học sinh giỏi môn Tin học Năm học 20172018
var i, j :byte; test: boolean;
input_matrix(a, n);
begin
writeln('The matrix performs as follows:');

test := true;
print_matrix(a, n);
for i := 1 to n-1 do
if symmetrical_matrix(a, n) then
for j := i+1 to n do
writeln('This is a symmetrical matrix.')
if (a[i][j] <> 0) or (a[j][i] <> 0) then
else writeln('This is not a symmetrical
test := false;
matrix.');
unit_matrix := test;
if unit_matrix(a, n) then
end;
write('This is a matrix unit.')
begin
else write('This is not a matrix unit.');
clrscr;
readln
writeln('Input square matrix:');
end.

GV: Lê Văn Lại

Trang 25


Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×