Download as doc, pdf, or txt
Download as doc, pdf, or txt
You are on page 1of 39

PHÒNG GIÁO DỤC TÂN THÀNH

TRƯỜNG THCS TÓC TIÊN

Tài liệu
BỒI DƯỠNG HỌC SINH GIỎI

MÔN TIN HỌC (THCS)


(Tài liệu lưu hành nội bộ)

Người biên soạn : Lê Đắc Ước


ĐT : 0907090779 – E-mail : ledacuoc@yahoo.com
Tài liệu bồi dưỡng học sinh giỏi tin học bậc THCS ..............................Trang 1
Tháng 2 năm 2010

Giáo dục có rễ đắng mà trái ngọt.


Aristote (384-322 T.C.N)

Phần 1 : LÝ THUYẾT
Chương I : MỘT SỐ VẤN ĐỀ TOÁN HỌC
I. HỆ ĐẾM :
1. Hệ đếm thập phân (Decimal): Gồm 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) : Gồm 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 chia
1 1 2
1 0
Kết quả : 6 = 1102
3. Hệ đếm thập lục phân (Hexa) :
Gồm 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)

 Lê Đắc Ước.................................. Tân Thành - ĐT: 0907090779


Tài liệu bồi dưỡng học sinh giỏi tin học bậc THCS ..............................Trang 2
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.
II. TẬP HỢP :
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 A i 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 và Ai = X.
6. Hiệu đối xứng (Symmetric difference) : A  B = (A \ B)  (B \ A)
III. 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á .
IV. ƯỚ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 (hoặc chia liên tiếp tới khi số d ư bằng
0), 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)= UCLN(a,b)=

V. PHƯƠNG TRÌNH - BẤT PHƯƠNG TRÌNH :


1. Phương trình bậc nhất : ax + b = 0 (1)
Nếu a = 0 thì (1)  b = 0. Khi đó : b ≠ 0 thì phương trình vô nghiệm;
b = 0 thì PT có vô số nghiệm.
Nếu a ≠ 0 thì phương trình có nghiệm là x = -
2. Phương trình bậc hai : ax2 + bx + c = 0 (a ≠ 0). Ta tính  = b2 – 4ac
Nếu  < 0 thì phương trình vô nghiệm.
Nếu  = 0 thì phương trình có 1 nghiệm x = -
Nếu  > 0 thì phương trình có 2 nghiệm phân biệt : x1= ;x2 =

3. Bất phương trình bậc nhất : ax + b > 0 (2)


Nếu a = 0 thì (2)  b > 0. Khi đó : b ≤ 0 thì bất PT vô nghiệm;
b > 0 thì bất PT có vô số nghiệm.
 Lê Đắc Ước.................................. Tân Thành - ĐT: 0907090779
Tài liệu bồi dưỡng học sinh giỏi tin học bậc THCS ..............................Trang 3

Nếu a > 0 thì bất phương trình có nghiệm là x > -


Nếu a < 0 thì bất phương trình có nghiệm là x < -
4. Hệ phương trình bậc nhất 2 ẩn số (Giải bằng định thức) :

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.
Nếu D ≠ 0 thì hệ PT có nghiệm duy nhất : và
VI. SỐ GẦN ĐÚNG – SAI SỐ :
- Sai số là hiệu số giữa trị số đúng và trị số gần đúng.
- 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 thì hay , ta nói a là số gần
đúng của với độ chính xác d, và qui ước viết gọn là
VII. 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
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ử ( ) là:

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ử ( ) là:

VIII. HÌNH HỌC :


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

 Lê Đắc Ước.................................. Tân Thành - ĐT: 0907090779


Tài liệu bồi dưỡng học sinh giỏi tin học bậc THCS ..............................Trang 4

Chương II : MỘT SỐ VẤN ĐỀ CƠ BẢN TRONG PASCAL


I. GIẢI THUẬT :
1. 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.
2. 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 - LỆNH GÁN :
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ư).
2. Các phép so sánh : > ; < ; = ; <> ; >= ; <=
3. Các phép Logic : AND (và); OR (hoặc); XOR (hoặc triệt tiêu); NOT (phủ định)
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
4. Phép gán (Lệnh gán) : V := E; {V là 1 biến, E là biểu thức. VD : X := -b/a; }
III. CÁC KHAI BÁO : (Thường theo thứ tự như sau)
1. Khai báo tên chương trình : PROGRAM <Tên chương trình>;
2. Khai báo sử dụng đơn vị chương trình : USES <DS đơn vị chương trình>;
3. Khai báo nhãn : LABEL <Tên nhãn>;
4. Khai báo hằng : CONST <tên hằng> = <Giá trị>; VD : Const Pi=3.14;
5. Khai báo kiểu dữ liệu mới : TYPE <Tên kiểu DL mới>=Định nghĩa kiểu;
6. Khai báo biến : VAR <DS biến 1> : <Kiểu DL 1>; <DS biến 2> : <Kiểu DL 2>;
7. Khai báo thủ tục (một dạng chương trình con) :
PROCEDURE <Tên thủ tục> (Các tham số nếu cần);
8. Khai báo hàm (một dạng chương trình con) :
FUNCTION <Tên hàm> (Các tham số nếu cần) : <Kiểu DL của hàm>;

 Lê Đắc Ước.................................. Tân Thành - ĐT: 0907090779


Tài liệu bồi dưỡng học sinh giỏi tin học bậc THCS ..............................Trang 5
IV. CÁC KIỂU DỮ LIỆU ĐƠN GIẢN :
Integer, Real, Char, String, Boolean, String, String [k], đoạn con, liệt kê...
 Mở rộng kiểu số nguyên :
Từ khai báo Phạm vi biểu diễn Kích thước (Byte)
BYTE 0 .. 255 1
SHORTINT -128 .. +128 1
INTEGER -32768 .. 32767 2
WORD 0 .. 65535 2
LONGINT -2147483648 .. 2147483647 4
 Mở rộng kiểu số thực :
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
(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 dùng hướng dẫn dịch {N+} ở đầu chương trình)
V. CÁC THỦ TỤC CƠ BẢN CỦA TP :
1. Thủ tục nhập : READ
- Read (DS biến); hoặc Readln (DS biến); {Nhập vào biến giá trị từ bàn phím}
- 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; {Cho kí tự khi gõ phím mà không cần nhấn Enter}
Hàm KeyPressed cho giá trị True nếu bàn phím có kí tự gõ, ngược lại có giá trị False.
2. Thủ tục xuất : WRITE
- 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}
- Write (x:d:d1); hoặc Writeln (x:d:d1);
{Dành d vị trí để xuất biến thực với d1 kí số thập phân}
- Write (F, DSDL xuất); hoặc Writeln (F, DSDL xuất);{Ghi dữ liệu vào tệp F}
- Write (LST, DSDL xuất); hoặc Writeln (LST, DSDL 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}
3. Các thủ tục điều khiển màn hình :
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); {Chuyển tới tọa độ cột, dòng}
Hàm WhreX cho giá trị cột hiện thời. Hàm WhreY cho giá trị dòng hiện thời.
Textbackground (color) hoặc Textbackground (0 tới 15); {định màu nền}
TextColor (color) hoặc TextColor (số từ 0 tới 15); {định màu chữ}

 Lê Đắc Ước.................................. Tân Thành - ĐT: 0907090779


Tài liệu bồi dưỡng học sinh giỏi tin học bậc THCS ..............................Trang 6
4. Một số thủ tục khác :
Goto Nhãn; {Nhảy vô điều kiện tới Nhãn trong chương trình}
Exit; {Ngừng thủ tục (thoát khỏi thủ tục)}
Halt; {Ngừng chương trình}
VI. 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 :
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ị đầu> DOWNTO <Trị cuối> 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 3>;

<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, do đó muốn lặp nhiều phát biểu ta phải dùng phát biểu 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 3>;

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

 Lê Đắc Ước.................................. Tân Thành - ĐT: 0907090779


Tài liệu bồi dưỡng học sinh giỏi tin học bậc THCS ..............................Trang 7
VII. CÁCH ĐẶT TÊN TRONG PASCAL - TỪ KHÓA:
1. Cách đặt tên trong Pascal (chương trình, biến, hằng, nhãn, thủ tục, hàm… ) :
Tên có thể được đặt bằng một dãy bao gồm chữ cái, chữ số, dấu “_” (gạch
nối dưới) nhưng bắt đầu của tên bắt buộc phải là một chữ cái. Tên không được có
khoảng trắng và tên không được trùng với từ khóa.
2. Từ khóa trong Pascal (Phải học thuộc lòng) :
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.
VIII. MỘT SỐ THỦ TỤC VÀ HÀM :
1. Hàm xử lý số :
ABS (x) : .
2
SQR (x) : x .
SQRT (x) : .
SUCC (n) : n+1.
PRED (n) : n-1.
TRUNC (x) : Lấy phần nguyên của x (bỏ phần thập phân).
ROUND (x) : Làm tròn x.
COS (x) : Cos x.
SIN (x) : Sin x.
ARTAN (x) : Arctg x.
EXP (b*LN(A)) : Ab.
INC(i) : i:=i+1;
DEC(i) : i:=i-1;
ORD (ch) : Cho thứ tự của kí tự ch trong bảng ASCII (VD : ORD (‘A’)=65, ORD (‘a’)=97).
CHR (i) : Cho kí tự có thứ tự là i trong bảng ASCII (VD : CHR (65) = ‘A’).
ODD (n) : Cho giá trị True nếu n là số lẻ.
SOUND(F) : tạo âm thanh tần số F tính theo Hz cho đến khi gặp lệnh OSOUND.
NOSOUND; : Ngừng thực hiện hàm SOUND.
DELAY (T) : tạo thời gian trể T tính theo đơn vị Mili giây (T là số nguyên).
READKEY; : Nhận một kí tự từ bàn phím không đưa ra màn hình và không cần
gõ phím Enter. (VD : Ch := Readkey;)
WHEREX : Cho giá trị cột hiện thời của con trỏ.
WHEREY : Cho giá trị dòng hiện thời của con trỏ.
LENGTH (Chuỗi) : Cho độ dài thật của chuỗi.
<Chuỗi>[k] : cho kí tự thứ k trong chuỗi. Đặc biệt : Chuỗi [0]=Length(chuỗi).
VD : For i:=1 to length(st) do
If ord(st[i]) >= 97 then st[i] := chr(ord(st)-32);
{Duyệt chuỗi st để đổi chuỗi st bất kỳ thành chuỗi gồm toàn chữ in hoa}
LENGTH (S,P,N) : xóa trong chuỗi S đi N ký tự kể từ vị trí P.
POS (S1,S) : Tìm kiếm chuỗi S1 trong chuỗi S. (Hàm cho giá trị là vị trí đầu tiên)

 Lê Đắc Ước.................................. Tân Thành - ĐT: 0907090779


Tài liệu bồi dưỡng học sinh giỏi tin học bậc THCS ..............................Trang 8

Chương III : CHƯƠNG TRÌNH CON : THỦ TỤC VÀ HÀM


I. THỦ TỤC (PROCEDURE) VÀ HÀM (FUNCTION) :
1. Xét ví dụ sau đây : Chương trình tính tổ hợp chập k của n phần tử.
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);
End;
Function GT (x : Byte) : Longint; {Ham tinh giai thua}
Var i : Byte; k : Longint;
Begin
i:=0;
k:=1;
While i<x do
Begin
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));
{Dung ham GT(n) nhieu lan de tinh to hop chap k cua n phan tu}
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 :
 Lê Đắc Ước.................................. Tân Thành - ĐT: 0907090779
Tài liệu bồi dưỡng học sinh giỏi tin học bậc THCS ..............................Trang 9
- 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 (biến, hằng,…), 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.
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ả qua tên thủ tục.
II. TRUYỀN THAM SỐ CHO CHƯƠNG TRÌNH CON :

III. BIẾN TOÀN CỤC VÀ BIẾN ĐỊA PHƯƠNG :

IV. TÍNH ĐỆ QUY CỦA CHƯƠNG TRÌNH CON :

 Lê Đắc Ước.................................. Tân Thành - ĐT: 0907090779


Tài liệu bồi dưỡng học sinh giỏi tin học bậc THCS ............................Trang 10

Chương IV : KIỂU DỮ LIỆU CÓ CẤU TRÚC


I. KIỂU MẢNG :
1. Khai báo :
- Cách 1 : TYPE <Kiểu mảng> = ARRAY [Chỉ số đầu .. Chỉ số cuối] OF
<Kiểu phần tử>;
VAR <Biến mảng> : <Kiểu mảng>;
VD : TYPE mangnguyen = ARRAY [1..10] OF Integer;
VAR A,B,C : mangnguyen;
- Cách 2 : VAR <Biến mảng> : ARRAY [Kiểu chỉ dẫn] OF <Kiểu phần tử>;
VD : VAR A,B,C : ARRAY [1..10] OF Integer;
2. Truy nhập vào phần tử mảng :
<Tên mảng> [Chỉ số] {VD: Viết A[5] là truy nhập vào phần tử thứ 5 của mảng A;
3. Duyệt mảng :
Dùng lệnh FOR duyệt qua từng phần tử của mảng để thao tác với phần tử.
VD : For i:=1 to 10 do {Nhập dữ liệu vào mảng A}
Begin
Writeln (‘A[‘,i,’]=’);
Readln (A[i]);
End;
For i:=1 to 10 do Writeln {‘A[‘,i,’]=’,A[i]); {Viết mảng A ra màn hình}
For i:=1 to 10 do C[i]:=A[i]+B[i]; {Gán giá trị cho mảng C}
4. Mảng nhiều chiều (còn gọi là ma trận) :
- Mảng 2 chiều :
Var X,Y,Z : Array [1..3,1..5] Of Integer; {Mảng X,Y,Z gồm 3 hàng, 5 cột}
- Duyệt để truy nhập vào phần tử mảng 2 chiều : Dùng 2 vòng FOR lồng nhau.
For i:=1 to 3 do
For j:=1 to 5 do
Z[I,J]:=X[I,J]+Y[I,J];
- Căn cứ vào cách khai báo và sử dụng mảng 1 chiều, mảng 2 chiếu, chúng ta
có thể xây dựng mảng n chiều.
II. KIỂU TẬP HỢP :
1. Khai báo :
III. KIỂU BẢN GHI :
1. Khai báo :
IV. KIỂU TỆP (FILE) :
1. Khai báo :

 Lê Đắc Ước.................................. Tân Thành - ĐT: 0907090779


Tài liệu bồi dưỡng học sinh giỏi tin học bậc THCS ............................Trang 11

Chương V : MỘT SỐ GIẢI THUẬT THÔNG DỤNG


I. GIẢI THUẬT XỬ LÝ SỐ :
1. Kiểm tra số nguyên tố :
Function SNT (x: Word) : Boolean; {Ham kiem tra so nguyen to theo dinh ly}
Var p: Integer; f : Boolean;
Begin
If x < 2 then
Begin
SNT := False;
Exit;
End;
p:=2;
f:= True;
While (p <= Sqrt(x)) and f do
If x mod p = 0 then
f := false
Else
p := p+1;
If f then
SNT:=True
Else
SNT:=False;
End;
2. Sàng số nguyên tố :
Procedure SSNT (n: Byte); {Thu tuc sang so nguyen to}
Var TapNT,Sang : Set of Byte;
p,i : Byte;
Begin
TapNT := []; {Tap chua so nguyen to. Khoi tao bang rong}
Sang := [2..n]; {Cai sang}
p := 2;
Repeat
While not(p in Sang) do p := p + 1;
TapNT := TapNT + [p];
i := p;
While i <= n do
Begin
Sang := Sang -[i];
i := i + p;
End;
Until Sang = [];
For i:=1 to n do
If i in TapNT then Write(i:5);
End;

 Lê Đắc Ước.................................. Tân Thành - ĐT: 0907090779


Tài liệu bồi dưỡng học sinh giỏi tin học bậc THCS ............................Trang 12
3. Tìm ƯCLN(a,b) :

Function UCLN (a,b : Integer) : Integer; {Thu tuc tim UCLN}


Begin
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;

Function UCLN (a,b : Integer) : Integer; {Tim UCLN bang chia lay phan du}
Var r : Integer;
Begin
While b<>0 do
Begin
r:=a mod b;
a:=b;
b:=r;
End;
UCLN:=a;
End;

Function UCLN (a,b : Integer) : Integer; {Tim UCLN bang de quy}


Begin
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))
Function UCLN (a,b : Integer) : Integer; {Thu tuc tim UCLN bang de quy}
Begin
If b=0 then
UCLN:=a
Else
UCLN:=UCLN(b,a mod b);
End;

 Lê Đắc Ước.................................. Tân Thành - ĐT: 0907090779


Tài liệu bồi dưỡng học sinh giỏi tin học bậc THCS ............................Trang 13
4. Đổi từ cơ số thập phân sang cơ số khác :
…………
5. Đổi từ cơ số khác sang cơ thập phân :
…………
6. Tính lũy thừa Xn :
…………
7. Tính giai thừa :
…………
II. GIẢI THUẬT XỬ LÝ CHUỖI :
1. Đổi chuỗi kí tự thường sang kí tự in hoa :
…………
2. Đổi chuỗi kí tự in hoa sang kí tự thường :
…………
3. Cắt các khoảng trắng bên trái chuỗi :
…………
4. Cắt các khoảng trắng bên phải chuỗi :
…………
5. Cắt các khoảng trắng bên phải chuỗi :
…………
6. Cắt các khoảng trắng ở cả hai bên chuỗi :
…………
7. Trích một số kí tự từ bên trái chuỗi :
…………
8. Trích một số kí tự từ bên phải chuỗi :
…………
9. Đổi chuỗi thành dạng tên riêng:
…………
III. GIẢI THUẬT XỬ LÝ TRÊN DÃY :
1. Tìm phần tử lớn nhất của 1 dãy :
…………
2. Sắp xếp :
…………
3. Tìm kiếm :
…………

 Lê Đắc Ước.................................. Tân Thành - ĐT: 0907090779


Tài liệu bồi dưỡng học sinh giỏi tin học bậc THCS ............................Trang 14

IV. MỘT SỐ PHƯƠNG PHÁP KHÁC :


1. Phương pháp Thử sai :
Phương pháp thử sai là phương pháp từng bước xem tính chất của đối
tượng, nếu đúng thì lưu lại và tiếp tục, nếu sai thì bỏ qua và lùi lại một bước
trước đó.
Ví dụ : Lập chương trình xây dựng một dãy gồm N chữ số (N là số nguyên
nhập từ bàn phím) từ 3 chữ số cho trước 1, 2, 3 sao cho không có hai dãy con chữ
số liên tiếp nào giống nhau. Chẳng hạn, với N=10, ta có dãy 1213123132 là chấp
nhận được, còn dãy 1213 121312 là không chấp nhận được; với N=20, ta có dãy
12131231321231213123 là chấp nhận được, còn dãy 121312313 12131231312 là
không chấp nhận được.
Để giải quyết bài toán này, ta dùng một biến chuỗi S lưu trữ dãy đang xây
dựng. Ta từng bước kiểm tra xem trong chuỗi S có 2 chuỗi con liên tiếp nào
giống nhau hay không. Giả sử độ dài chuỗi S (đến thời điểm hiện tại đang kiểm
tra) là m=Length(S) thì 2 chuỗi con liên tiếp cần kiểm tra có độ dài không vượt
quá L=m div 2.
 Hàm Copy :
Cú pháp : Copy (S : String, P : Integer, N : Integer)
Ý nghĩa : Hàm cho giá trị là xâu ký tự con có N ký tự được lấy ra từ xâu
ký tự S bắt đầu từ vị trí thứ P.
Ta tăng L từ 1 đến m div 2 để tách các chuỗi con có 1, 2, 3, …, L ký tự từ
chuỗi S và so sánh bằng biểu thức :
Copy(S,m-2*L+1,L)<>Copy(S,m-L+1,L)
Nếu chuỗi S tốt (Good) thì ta cho kéo đỗ dài chuỗi S bằng thủ tục Extend,
nếu chuỗi S là không tốt (có 2 chuỗi con liên tiếp giống nhau) thì ta thay đổi
chuỗi S bằng thủ tục change. Chương trình hoàn chỉnh như sau :
Program Taobangkyhieu;
Uses Crt;
Var S:String;
N:Integer;
Good:Boolean;
Procedure Extend;
Begin
S:=S+'1';
End;
Procedure Change;
Begin
While S[Length(S)]='3' do
S:= Copy(S,1,Length(S)-1);
S[Length(S)]:= Succ(S[Length(S)]);
End;

 Lê Đắc Ước.................................. Tân Thành - ĐT: 0907090779


Tài liệu bồi dưỡng học sinh giỏi tin học bậc THCS ............................Trang 15
Procedure Check;
Var L,m:Integer;
Begin
Good:=True; L:=0; m:=Length(S);
While Good and (L < m div 2) do
Begin
L:=L+1;
Good:= Good and (Copy(S,m-2*L+1,L)<>Copy(S,m-L+1,L));
End;
End;
Begin {Main program}
Clrscr;
Repeat Write('Nhap N : '); Readln(N); Until N>1;
S:='1';
Good:=True;
Repeat
If Good then Extend Else Change;
Check;
Until (Good and (Length(S)=N)) or (S='');
If Good then Writeln('S=',S) else Writeln('Vo nghiem');
Readln;
End.
2. Phương pháp Vét cạn :
Phương pháp vét cạn là phương pháp duyệt qua tất cả mọi trường hợp
có thể xảy ra và chọn lựa xem trường hợp đang xét có thỏa mãn yêu cầu của
đề bài hay không.
Ví dụ : Lập chương trình tìm tất cả các số có 3 chữ số abc sao cho tổng các
lập phương của các chử số thì bằng chính số đó. Có nghĩa là : abc = a3+b3+c3.
Trong trường hợp này, ta sẽ cho máy tính quét hết các khả năng các số có
3 chữ số và thử. Đó chính là “Vét cạn”.
Cách 1 : ta dùng 3 vòng lặp
Program Vetcan1;
Uses Crt;
Var a,b,c:Integer;
Begin
Clrscr;
For a:=1 to 9 do
For b:=0 to 9 do
For c:=0 to 9 do
If a*a*a+b*b*b+c*c*c = 100*a+10*b+c then
Writeln(a,b,c);
Readln;
End.
Cách 2 : ta dùng 1 vòng lặp
 Lê Đắc Ước.................................. Tân Thành - ĐT: 0907090779
Tài liệu bồi dưỡng học sinh giỏi tin học bậc THCS ............................Trang 16
Program Vetcan2;
Uses Crt;
Var a,b,c,i:Integer;
Begin
Clrscr;
For i:=100 to 999 do
Begin
a:= i div 100;
b:= (i div 10) mod 10;
c:= i mod 10;
If a*a*a+b*b*b+c*c*c = 100*a+10*b+c then
Writeln(a,b,c);
End;
Readln;
End.
BÀI TẬP
Bài 1 : Lập chương trình tìm tất cả các cách thay thế các dấu chấm hỏi (?)
bởi các dấu phép tính +, -, *, / trong biểu thức dưới dây :
(((((a1 ? a2) ? a3) ? a4) ? a5) ? a6) = a7
Trong đó a1, a2, a3, a4, a5, a6, a7 là số thực nhập từ bàn phím.
Bài 2 : Lập chương trình tìm cách điền 9 chữ số khác nhau 1, 2, 3, 4, 5, 6,
7, 8, 9 vào bảng vuông 3x3 sao cho a’b’c’=2a”b”c”=3abc (như hình vẽ dưới).
a b c
a’ b’ c’
a” b” c”
V. KỸ THUẬT DUYỆT ĐỆ QUY QUAY LUI (BACKTRACKING) :
Kỹ thuật quay lui (Backtracking) như tên gọi của nó, là một quá trình phân
tích đi xuống. Tại mỗi bước phân tích chúng ta chưa giải quyết được vấn đề do
còn thiếu cứ liệu nên cứ phải phân tích cho tới các điểm dừng, nơi chúng ta xác
định được lời giải của chúng hoặc là xác định được là không thể (hoặc không
nên) tiếp tục theo hướng này. Từ các điểm dừng này chúng ta quay ngược trở lại
theo con đường mà chúng ta đã đi qua để giải quyết các vấn đề còn tồn đọng và
cuối cùng ta sẽ giải quyết được vấn đề ban đầu.
Người ta thường sử dụng 3 kỹ thuật quay lui: “vét cạn” là kỹ thuật phải đi
tới tất cả các điểm dừng rồi mới quay lui. “Cắt tỉa Alpha-Beta” và “Nhánh-Cận”
là hai kỹ thuật cho phép chúng ta không cần thiết phải đi tới tất cả các điểm
dừng, mà chỉ cần đi đến một số điểm nào đó và dựa vào một số suy luận để có
thể quay lui sớm.
Về mặt lý luận, chúng ta có thể phân tích kỹ thuật Quay lui như sau :
Giả thiết một cấu hình cần tìm được mô tả bởi một bộ phận gồm n thành
phần a1, a2,... an. Giả sử tìm được i - 1 thành phần a1, a2, ai-1, ta tìm thành phần
thứ i bằng cách duyệt tất cả các khả năng có thể của ai. Với mỗi khả năng j kiểm
tra xem nó có chấp nhận được không. Xảy rahai trường hợp :

 Lê Đắc Ước.................................. Tân Thành - ĐT: 0907090779


Tài liệu bồi dưỡng học sinh giỏi tin học bậc THCS ............................Trang 17
Nhận được thì xác định ai theo j và kiểm tra xem i = n chưa, nếu i = n thì
ta ghi nhận một cấu hình, còn nếu i < ta gọi tiến hành xác định ai+1.
Nếu thử tất cả các khả năng mà không có khả năng nào chấp nhận được thì
quay lại bước trước xác định lại ai-1
Nội dung của thuật toán này rất phù hợp với việc gọi đệ quy. Ta có thủ tục
đệ quy sau đây:
Procedure Try(i: Integer);
Begin
for {mọi giá trị có thể gán cho xi} do
begin
<Thử cho xi := V>;
if (xi là phần tử cuối cùng trong cấu hình) then
<Thông báo cấu hình tìm được>
Else
Begin
<Ghi nhận việc cho xi nhận giá trị V (Nếu cần)>;
Try(i + 1); {Gọi đệ qui để chọn tiếp xi + 1}
<Nếu cần, bỏ ghi nhận việc thử xi := V, để thử giá trị khác>;
end;
end;
end;
Ví dụ : chương trình xếp n quân hậu trên bàn cờ có n*n ô sao cho không quân
nào ăn được quân nào. Chẳng hạn, với bàn cờ 8x8=64 ô, ta có một trong 92
cách xếp như sau :

Giả sử bàn cờ 4x4, ta làm như sau :

 Lê Đắc Ước.................................. Tân Thành - ĐT: 0907090779


Tài liệu bồi dưỡng học sinh giỏi tin học bậc THCS ............................Trang 18

Giải: Ta xếp n con hậu trên n dòng, theo nguyên lý nhân ta có n n cách sắp.
Để làm điều đó ta dùng thủ tục đệ quy mô tả ở trên để giải. Ta đánh ghi số cột và
dòng của bàn cờ từ 1 đến n, mỗi cách sắp xếp ứng với 1 bộ gồm a 1,a2,.....,an với ai
= j (j=1,2,...,n) có nghĩa là con hậu thứ i đặt vào cột j. Giả sử ta chọn được i-1
con hậu bằng cách duyệt tất cả các khả năng của nó.
Quan trọng nhất là ta tìm điều kiện chấp nhận j, một con hậu đứng ở một ô
trong bàn cờ nó có nhiều nhất bốn hướng đi(đường dọc, đường ngang và hai
đường chéo).
Vậy điều kiện chấp nhận thứ i thoả mãn không nằm trên đường đi của tất
cả i-1 con hậu đã xếp. Bởi vì n con hậu xếp ở hàng nên đường đi ngang của
chúng là không chiến nhau, do đó khi chọn con hậu thư i chỉ cần kiểm tra xem
trên 2 đường chéo và đường dọc của chúng có chiếu vào những con hậu đã xếp
không? Để kiểm tra điều này mỗi đường ta dùng một biến trạng thái.
* Đường dọc kiểm soát bằng biến b[j],(j=1,2,...,n).
* Một đường chéo kiểm soát bằng biến c[i+j],i+j={2,....,2n}.
* Còn đường chéo kia kiểm soát bằng biến d[i-j],i-j={1-n,....,n-1}.
Các biến trạng thái này khởi gán giá trị True trong thủ tục Init. Như vậy
con hậu thứ i được chấp nhận xếp vào cột j nếu nó thoả mãn cả ba biến
b[j],c[i+j],d[i-j] đều có giá trị true. Các biến này gán giá trị False khi xếp xong
con hậu thứ i, và trả lại giá trị true sau khi gọi Result hay Try(i+1). Ta có chương
trình Pascal sau :
Program Xep8hau;
Uses Crt;
Const Max=15;
Var x : Array [1..Max] of Integer;
a : Array [1..Max] of Boolean;
b : Array [1..Max*2] of Boolean;
c : Array [-Max..Max] of Boolean;

 Lê Đắc Ước.................................. Tân Thành - ĐT: 0907090779


Tài liệu bồi dưỡng học sinh giỏi tin học bậc THCS ............................Trang 19
n,i,dem : Integer;

Procedure Print;
Var j : Integer;
Begin
Dem:=Dem+1;
Write(dem,')');
For j:= 1 to n do Write(x[j]:3);
Writeln;
End;

Procedure Try (i : Integer);


Var j: Integer;
Begin
If i > n then
Print
Else
For j:=1 to n do
If Not(a[j]) and Not(b[i+j]) and Not(c[i-j]) then
Begin
x[i]:=j;
a[j]:=True;
b[i+j]:=True;
c[i-j]:=True;
Try(i+1);
a[j]:=False;
b[i+j]:=False;
c[i-j]:=False;
End;
End;

Procedure Init;
Var j : Integer;
Begin
Fillchar (a,sizeof(a),False);
Fillchar (b,sizeof(b),False);
Fillchar (c,sizeof(c),False);
End;

Begin {Main Program}


Clrscr;
Repeat
Write('Nhap n (n<=',Max,') : ');
Readln(n);

 Lê Đắc Ước.................................. Tân Thành - ĐT: 0907090779


Tài liệu bồi dưỡng học sinh giỏi tin học bậc THCS ............................Trang 20
Until n<=Max;
Dem:=0;
Writeln('Cac cach xep :');
Init;
Try(1);
Readln;
End. {Main Program}

Ta có thể dùng mảng 2 chiều để nhớ trạng thái bàn cờ, và cải tiến
chương trình như sau :
Program Xephau;
Uses Crt;
Label Xettiep;
Const Max = 8;
Var Songhiem : Integer;
Banco : Array [1..Max,1..Max] of Boolean;
Daxet : Array [1..Max] of Integer;
n,i,j,h,c : Integer;
Hang, Dangxet : Integer;
{****************************************}
Procedure HienKetqua; {Dung de hien mot ket qua}
Var h,c : Integer;
Begin
Songhiem := Songhiem + 1; writeln('Nghiem thu : ',Songhiem);
For h:=1 to n do
Begin
For i:=1 to n*2 do Write('Ä'); Writeln;
For c:=1 to n do if Banco[c,h] then Write('³x') else Write('³ ');
Writeln('³');
End;
For i:=1 to n*2 do write('Ä');
End;
{****************************************}
Function Deduoc(h,c: Integer) : Boolean; {Kiem tra xem co de duoc con hau o vi
tri h,c ? }
Begin
Deduoc := False;
{Kiem tra xem hang h da co con hau nao chua ?}
for i:= 1 to c do
if banco[h,i] then exit;
{ Kiem tra xem duong cheo tu tren trai xuong duoi phai }
{ xuyen qua vi tri h,c da co con hau nao chua ?}
i:= h-1; j:= c-1;
While (i>0) and (j>0) do

 Lê Đắc Ước.................................. Tân Thành - ĐT: 0907090779


Tài liệu bồi dưỡng học sinh giỏi tin học bậc THCS ............................Trang 21
Begin
If banco[i,j] then exit;
i:=i-1;
j:=j-1;
End;
{ Kiem tra xem duong cheo tu tren phai xuong duoi trai }
{ xuyen qua vi tri h,c da co con hau nao chua ?}
i:= h+1; j:= c-1;
While (i<=n) and (j>0) do
Begin
If banco[i,j] then exit;
i:=i+1;
j:=j-1;
End;
Deduoc := True
End;
{****************************************}
Begin {Main Program}
clrscr;
Write('Nhap n : ');
Readln(n);
{Xoa ban co}
for h:=1 to n do
for c:=1 to n do banco[h,c]:= False;
Songhiem := 0;
Dangxet := 0;
{Lap tim nghiem theo ky thuat backtracking}
Xettiep: {Dat nhan xet tiep}
Dangxet := Dangxet+1;
Hang:=1;
Repeat
While Hang <= n do
Begin
If Deduoc(Hang,Dangxet) then
Begin
Banco[Hang,Dangxet] := True;
If Dangxet = n then
Begin {tim duoc nghiem}
Hienketqua;
Readln;
Banco[hang,dangxet] := False;
End
Else
Begin

 Lê Đắc Ước.................................. Tân Thành - ĐT: 0907090779


Tài liệu bồi dưỡng học sinh giỏi tin học bậc THCS ............................Trang 22
Daxet[Dangxet] := Hang; {giu lai hang da xet}
goto Xettiep;
End;
End;
Hang := Hang+1;
End;
Dangxet := Dangxet - 1; {Lui lai con hau truoc}
if Dangxet = 0 then Exit; { da thu het cac kha nang }
Hang := Daxet[Dangxet]; {Lay lai hang da xet}
Banco[Hang,Dangxet] := False;
Hang := Hang + 1; {Tiep tuc xet tiep}
Until False;
End.

 Lê Đắc Ước.................................. Tân Thành - ĐT: 0907090779


Tài liệu bồi dưỡng học sinh giỏi tin học bậc THCS ............................Trang 23

3. Phương pháp Hướng đích :


…………
4. Phương pháp Quy hoạch động :
…………
5. Phương pháp Tham lam :
Giải thuật tham lam (Greedy algorithm) là một thuật toán giải quyết một
bài toán theo kiểu metaheuristic để tìm kiếm lựa chọn tối ưu địa phương ở mỗi
bước đi với hy vọng tìm được tối ưu toàn cục. Chẳng hạn áp dụng giải thuật tham
lam với bài toán hành trình của người bán hàng ta có giải thuật sau: "Ở mỗi bước
hãy đi đến thành phố gần thành phố hiện tại nhất".
Nói chung, giải thuật tham lam có năm thành phần:
Một tập hợp các ứng viên (candidate), để từ đó tạo ra lời giải
Một hàm lựa chọn, để theo đó lựa chọn ứng viên tốt nhất để bổ sung vào
lời giải
Một hàm khả thi (feasibility), dùng để quyết định nếu một ứng viên có thể
được dùng để xây dựng lời giải
Một hàm mục tiêu, ấn định giá trị của lời giải hoặc một lời giải chưa hoàn
chỉnh
Một hàm đánh giá, chỉ ra khi nào ta tìm ra một lời giải hoàn chỉnh.
Có hai thành phần quyết định nhất tới quyết định tham lam:
Tính chất lựa chọn tham lam
Chúng ta có thể lựa chọn giải pháp nào được cho là tốt nhất ở thời điểm
hiện tại và sau đó giải bài toán con nảy sinh từ việc thực hiện lựa chọn vừa rồi.
Lựa chọn của thuật toán tham lam có thể phụ thuộc vào các lựa chọn trước đó.
Nhưng nó không thể phụ thuộc vào một lựa chọn nào trong tương lai hay phụ
thuộc vào lời giải của các bài toán con. Thuật toán tiến triển theo kiểu thực hiện
các chọn lựa theo một vòng lặp, cùng lúc đó thu nhỏ bài toán đã cho về một bài
toán con nhỏ hơn. Đấy là khác biệt giữa thuật toán này và giải thuật quy hoạch
động. Giải thuật quy hoạch động duyệt hết và luôn đảm bảo tìm thấy lời giải. Tại
mỗi bước của thuật toán, quy hoạch động đưa ra quyết định dựa trên các quyết
định của bước trước, và có thể xét lại đường đi của bước trước hướng tới lời giải.
Giải thuật tham lam quyết định sớm và thay đổi đường đi thuật toán theo quyết
định đó, và không bao giờ xét lại các quyết định cũ. Đối với một số bài toán, đây
có thể là một thuật toán không chính xác.
Cấu trúc con tối ưu
Một bài toán được gọi là "có cấu trúc tối ưu", nếu một lời giải tối ưu của
bài toán con chứa lời giải tối ưu của bài toán lớn hơn.
Đối với nhiều bài toán, giải thuật tham lam hầu như không cho ra lời giải
tối ưu toàn cục (nhưng không phải luôn như vậy), vì chúng thường không chạy
trên tất cả các trường hợp. Chúng có thể bám chặt lấy một số lựa chọn nhất định
một cách quá sớm, điều này dẫn đến hậu quả là trong giai đoạn sau, các thuật
toán này không thể tìm ra các lời giải toàn cục tốt nhất. Ví dụ, đối với bài toán tô

 Lê Đắc Ước.................................. Tân Thành - ĐT: 0907090779


Tài liệu bồi dưỡng học sinh giỏi tin học bậc THCS ............................Trang 24
màu đồ thị và tất cả các bài toán NP-đầy đủ khác, không một thuật toán tham lam
đã được biết nào đảm bảo tìm thấy các lời giải tối ưu. Tuy nhiên, các thuật toán
này vẫn hữu ích vì chúng dễ thiết kế và cho ra các ước lượng tốt về lời giải tối
ưu.
Nếu có thể chứng minh rằng một thuật toán tham lam cho ra kết quả tối ưu
toàn cục cho một lớp bài toán nào đó, thì thuật toán thường sẽ trở thành phương
pháp được chọn lựa, vì nó chạy nhanh hơn các phương pháp tối ưu hóa khác như
quy hoạch động. Các ví dụ cho giải thuật loại này là thuật toán Kruskal và thuật
toán Prim dành cho bài toán cây bao trùm nhỏ nhất, thuật toán Dijkstra dành cho
bài toán đường đi ngắn nhất nguồn đơn, và thuật toán tìm cây Huffman tối ưu.
Chương trình giải bài toán người bán hàng bằng phương pháp tham lam
(viết bằng ngôn ngữ c ++)với ma trận trọng số của đồ thị như sau:
0 15 30 50 20
15 0 10 35 32
30 10 0 15 40
50 35 15 0 43
20 32 40 43 0
chương trình :
#include "iostream"
#include "fstream"

using namespace std;


int n,a[25][25],b[25],k;
int NhapFile(char TenFile[], int &n)
{
ifstream iFile;
iFile.open(TenFile);
if (!iFile.is_open())
return 0;
while(iFile >> n)
{
for (int i = 0; i < n; i++)
{
for(int j = 0; j < n; j++)
{
iFile >> a[i][j];
}
}
}
iFile.close();
return 1;
}

int check(int x, int y[], int s)


{
for(int i=0;i<s;i++)
{
if(x==y[i])
return 0;
}
return 1;

 Lê Đắc Ước.................................. Tân Thành - ĐT: 0907090779


Tài liệu bồi dưỡng học sinh giỏi tin học bậc THCS ............................Trang 25
}

char ToChar(int n)
{
return 'A' + n;
}

int run(int n,int id)


{
int min;
int b[100];
int count = 0;
int temp;
int s=0;
b[0] = k;
while(count < n)
{
min=10000;
for(int i = 0;i < n; i++)
if(a[id][i] < min && a[id][i] > 0 && check (i,b,n) == 1)
{
min = a[id][i];
temp = i;
}
if(count<n-1)
s=s+min;
b[count + 1] = temp;
id = temp;
count ++;
}
s=s+a[id][k];
b[n] = k;
cout << "Duong di ngan nhat: ";
for(int i = 0; i < n; i++)
cout << ToChar(b[i]) << " -> ";
cout<<ToChar(b[n]);
cout<<"\n\n";
cout<<"quang duong ngan nhat nguoi giao hang phai di la: "<<s;
cout<<"\n\n";
return 0;
}

int main()
{
char c;
NhapFile("data.inp",n);
cout << "Ma tran ke:" << endl;
for(int i = 0; i < n; i++)
{ cout << ToChar(i) << ":\t";
for(int j = 0; j < n; j++)
cout<<" "<<a[i][j];
cout<<"\n\n";
}
cout<<"nhap thanh pho hien tai cua nguoi giao hang: ";
cin>>c;
if(c<='Z')
k=c-65;
else
k=c-97;
cout<<"\n";
run(n,k);
system("PAUSE");

 Lê Đắc Ước.................................. Tân Thành - ĐT: 0907090779


Tài liệu bồi dưỡng học sinh giỏi tin học bậc THCS ............................Trang 26
return 0;
}

 Lê Đắc Ước.................................. Tân Thành - ĐT: 0907090779


Tài liệu bồi dưỡng học sinh giỏi tin học bậc THCS ............................Trang 27

Phần 2 : BÀI TẬP THEO CHỦ ĐỀ


Chủ đề 1 : BÀI TẬP VỀ SỐ HỌC
1. Lập chương trình tính xem kim giờ và kim phút đồng hồ gặp nhao bao nhiêu
lần từ 0 giờ đến 24 giờ trong 1 ngày ?.
2. Viết chương trình hiển thị tất cả các số gồm 3 chữ số sao cho tổng tất cả các
chữ số bằng tích của chúng ?
3. 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 ?
4. 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 = 13+53+33. Viết chương trình tìm tất cả các số Amstrong có 3
chữ số.
5. 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 : Quý, Giáp, Ất, Bính, Đinh,
Mậu, Kỷ, Canh, Tân, Nhâm.
Có 12 Chi được lấy theo thứ tự như sau : Dần, Mão, Thìn, Tỵ, Ngọ, Mùi,
Thân, Dậu, Tuất, Hợi, Tí, Sửu. (Lưu ý : Viết Tí, Tỵ để khỏi nhần khi không có
dấu thanh tiếng Việt)
6. Nhập hai số nguyên a, b. Sau đó tính UCLN (a,b) và BCNN (a,b) ?
7. Nhập n, k nguyên đảm bảo phải dương và k<= n. Tính :

- Chỉnh hợp chập k của n phần tử theo công thức :

- Tổ hợp chập k của n phần tử theo công thức :

8. Cho dãy số Fibonaci được định nghĩa như sau :


1 (Nếu n=1 hoặc n=2)
F(n) =
F(n-1) + F(n-2) (Nếu n>2)
Hãy viết chương trình in ra màn hình dãy 20 số Fibonaci đầu tiên.
Yêu cầu : Trong chương trình có xây dựng hàm tính F(n) theo kiểu đệ quy.
9. Tuổi cha hiện nay là B và tuổi con là C (0<C<B; B và C là số nguyên và theo
luật hôn nhân gia đình B – 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

 Lê Đắc Ước.................................. Tân Thành - ĐT: 0907090779


Tài liệu bồi dưỡng học sinh giỏi tin học bậc THCS ............................Trang 28
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 nua 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”
10.Nhập vào một số tự nhiên N với (0<N65535).
Hãy cho biết chữ số lớn nhất của số tự nhiên vừa nhập.
Hãy in đảo ngược số N.
Ví dụ : N=6548
Chữ số lớn nhất là : 8
Số in ngược là : 8456

 Lê Đắc Ước.................................. Tân Thành - ĐT: 0907090779


Tài liệu bồi dưỡng học sinh giỏi tin học bậc THCS ............................Trang 29

Chủ đề 2 : BÀI TẬP VỀ DÃY SỐ


11.Nhập số nguyên dương n. Tính :
S = + + +…+
12.Nhập số nguyên dương n. Tính :
S = 1+ + + …+
13.Nhập số nguyên dương n. Tính :
S = + + +…+
14.Nhập số nguyên dương n. Tính :
S= + + + …+
15.Nhập số nguyên dương n. Tính :
S = . . .…
16.Nhập số nguyên dương n. Tính :
S = 1.2.3 + 2.3.4 + 3.4.5 + …+ n(n+1)(n+2)
17.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)
18.Nhập số nguyên dương n. Tính :
S=
19.Nhập số nguyên dương n. Tính :
S=
20. Nhập số nguyên dương n. Tính :

 Lê Đắc Ước.................................. Tân Thành - ĐT: 0907090779


Tài liệu bồi dưỡng học sinh giỏi tin học bậc THCS ............................Trang 30

Chủ đề 3 : ĐIỀU KHIỂN MÀN HÌNH


21.Lập chương trình in bảng cửu chương (từ 2 tới 9) ra màn hình ?
22.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 : Tam giác có đỉnh nằm tại dòng 2 và tam giác nằm ở giữa màn hình
theo chiều ngang.
23.Bạn hãy lập chương trình nhập 2 số nguyên dương a và b. Sau đó thực hiện
phép nhân (a x b) như cách nhân bằng tay thông thường. Ví dụ:

24.
25.
26.
27.
28.
29.
30.

 Lê Đắc Ước.................................. Tân Thành - ĐT: 0907090779


Tài liệu bồi dưỡng học sinh giỏi tin học bậc THCS ............................Trang 31

Chủ đề 4 : PHƯƠNG TRÌNH - BẤT PHƯƠNG TRÌNH


31. Giải phương trình bậc nhất ax + b = 0 với a,b là số thực nhập từ bàn phím ?
32. Giải và biện luận phương trình bậc hai ax2 + bx + c = 0 :
33. Giải và biện luận hệ phương trình bậc nhất hai ẩn :
34. Giải và biện luận bất phương trình bậc nhất ax + b > 0 :
35.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 ?.
36.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 (n>0) nhập từ bàn phím.
37.Viết chương trình nhập một số nguyên từ bàn phím và kiểm tra xem 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)
38.Tìm tất cả các số nguyên dương x,y,z thỏa mãn phương trình ax+by+cz=n;
trong đó a,b,c,n là các số nguyên dương (a,b,c  65535; n  2.147.483.647)
Yêu cầu kỹ thuật :
1) Kiểm tra việc nhập dữ liệu thỏa mãn yêu cầu của đề bài. Nếu người sử
dụng nhập sai thì thông báo nhập sai và hỏi người dùng có muốn nhập lại hay
không, nếu không thì kết thúc chương trình.
2) Không được dùng quá 2 vòng lặp lồng nhau và điều kiện dừng của mỗi
vòng lặp không được vượt quá ngưỡng mà từ đó ta biết chắc chắn phương
trình không có nghiệm.
3) Nếu phương trình có nghiệm thì liệt kê có thứ tự các bộ nghiệm của
phương trình theo dạng sau :
Giả sử phương trình có dạng 15x+28y+24z=454, in ra màn hình như sau:
STT x y z
1 2 4 13
2 2 10 6
3 6 1 14
4 6 7 7
5 10 4 8
6 10 10 1
7 14 1 9
8 14 7 2
9 18 4 3
10 22 1 4
Ngược lại thì thông báo phương trình không có nghiệm.
39.
40.

 Lê Đắc Ước.................................. Tân Thành - ĐT: 0907090779


Tài liệu bồi dưỡng học sinh giỏi tin học bậc THCS ............................Trang 32

Chủ đề 5 : TÍNH GẦN ĐÚNG VỚI ĐỘ CHÍNH XÁC CHO TRƯỚC


41.Hãy tính giá trị của biểu thức: + + …+ với n là một số nguyên dương
chưa biết trước và chương trình dừng lại khi 1/n nhỏ hơn một số đã cho trước
là 0,001.
42.Nhập số x thực và số n nguyên 1, tính gần đúng ex theo công thức :

43.Nhập số thực A đảm bảo 0<A< 2, tìm số n nhỏ nhất thỏa mãn :

44. Nhập x và n, tính gần đúng Sinx theo công thức:

45.Nhập x thực, n nguyên > 0 , tính gần đúng cosx :

46.Tính gần đúng giá trị của Ln(x) , 0 < x  2 , với sai số ss = 0.01, bằng cách bỏ
đi các số hạng có trị tuyệt đối < ss :

47.
48.
49.
50.

 Lê Đắc Ước.................................. Tân Thành - ĐT: 0907090779


Tài liệu bồi dưỡng học sinh giỏi tin học bậc THCS ............................Trang 33

Chủ đề 6 : MỘT SỐ BÀI TOÁN VỀ HÌNH HỌC


51.Lập chương trình nhập 3 số thực a, b, c rồi cho biết 3 số a, b, c vừa nhập có
phải là 3 cạnh của 1 tam giác hay không ? Nếu 3 số a, b, c vừa nhập là 3 cạnh
của tam giác thì tính diện tích tam giác đó theo công thức HêRông :
Trong đó :
52.
53.
54.
55.
BÀI 1 : BÀI TOÁN DIỆN TÍCH TAM GIÁC
Cho một hình chữ nhật ABCD, cạnh AB=a, cạnh BC=b. a,b là các số nguyên dương
trong khoảng [1, 100]
Một điểm M chạy trong đoạn BC với BM=x . x là số nguyên duơng trong khoảng [0, b],
một điểm N chạy trong đoạn CD với CN=x

Tính giá trị lớn nhất và giá trị nhỏ nhất của diện tích tam giác AMN khi M, N lưu động.

Dữ liệu vào: Được cho trong tập tin CHUNHAT.inp, gồm một dòng ghi hai số nguyên dương lần
lượt là a, b. Hai số cách nhau một khoảng trắng
Dữ liệu ra : Yêu cầu xuất ra tập tin CHUNHAT.out, gồm bốn dòng:
+ Dòng đầu là giá trị lớn nhất của diện tích tam giác AMN (một chữ số thập phân)
+ Dòng thứ hai là một giá trị của x để diện tích tam giác AMN đạt giá trị lớn nhất
+ Dòng thứ ba là giá trị nhỏ nhất của diện tích tam giác AMN (một chữ số thập phân)
+ Dòng thứ tư là một giá trị của x để diện tích tam giác AMN đạt giá trị nhỏ nhất
Ví dụ:
CHUNHAT.inp
10 6
CHUNHAT.out
30.0
0
17.5
5
Yêu cầu kỹ thuật :
+ Có kiểm tra dữ liệu nhập
+ Bài làm của thí sinh lưu trên tập tin Bailam1.pas
56.
57.
58.
59.
60.

 Lê Đắc Ước.................................. Tân Thành - ĐT: 0907090779


Tài liệu bồi dưỡng học sinh giỏi tin học bậc THCS ............................Trang 34

Chủ đề 7 : MỘT SỐ BÀI TOÁN TỔ HỢP


(Giải bằng phương pháp BackTracking)
61.Viết chương trình in ra tất cả những hoán vị của dãy số tự nhiên (1,2,3,…,n)
với n nhập từ bàn phím ?
62.Viết chương trình in ra tất cả các chỉnh hợp n chập r của n số tự nhiên đầu tiên
với n, r nhận từ bàn phím ?
63.Viết chương trình in ra tất cả các tổ hợp n chập r của n số tự nhiên đầu tiên
với n, r nhận từ bàn phím ?
64. Bài toán 8 hậu : Viết chương trình xếp n quân hậu trên bàn cờ vua có n*n ô
sao cho không quân nào ăn được quân nào ?
65. Bài toán “Mã đi tuần” : Một quân mã đặt tại vị trí bất kỳ trên bàn cờ. Hãy
chỉ ra đường sao cho quân mã đi hết bàn cờ và trở lại ô ban đầu với điều kiện
không được đi lại ô đã đi qua.
66.
67.
68.
69.
70.

 Lê Đắc Ước.................................. Tân Thành - ĐT: 0907090779


Tài liệu bồi dưỡng học sinh giỏi tin học bậc THCS ............................Trang 35

Chủ đề 8 : MỘT SỐ DẠNG BÀI TẬP KHÁC


71.Lập chương trình in ra màn hình tất cả các số nguyên tố có 3 chữ số ? (Dùng
giải thuật Sàng)
72.Nhập vào một số tự nhiên N với (0<N65535), phân tích số vừa nhập thành
các thừa số nguyên tố, nếu số vừa nhập là số nguyên tố thì chỉ thông báo ra
màn hình đây là số nguyên tố.
Ví dụ :
- Nếu số vừa nhập là 300 thì in ra màn hình : 300=2.2.3.5.5
- Nếu số vừa nhập là 307 thì in ra màn hình : 307 là số nguyên tố.
73.Số nguyên tố tương đương :
Hai số tự nhiên được gọi là nguyên tố tương đương nếu chúng có chung
các ước số nguyên tố. Ví dụ các số 75 và 15 là nguyên tố tương đương vì cùng
có các ước nguyên tố là 3 và 5. Cho trước hai số tự nhiên N, M. Hãy viết
chương trình kiểm tra xem các số này có là nguyên tố tương đương với nhau
hay không.
74.Số siêu nguyên tố :
Số siêu nguyên tố là số nguyên tố mà khi bỏ một số tuỳ ý các chữ số bên
phải của nó thì phần còn lại vẫn tạo thành một số nguyên tố.
Ví dụ : 317 là số siêu nguyên tố có 3 chữ số vì 31, 3 cũng là các số
nguyên tố.
Yêu cầu : Hãy viết chương trình nhập dữ liệu vào là một số nguyên N
(3 N  9) và đưa ra kết quả là một số siêu nguyên tố có N chữ số cùng số
lượng của chúng.
Ví dụ khi chạy chương trình :
Nhap so N: 4
Cac so sieu nguyen to có 4 chu so la: 2333 2339 2393 2399 2939 3119
3137 3733 3739 3793 3797 5939 7193 7331 7333 7393
Tat ca co 16 so_
75.Cũng định nghĩa số Siêu nguyên tố như bài 9, nhưng với yêu cầu như sau :
Yêu cầu : Lập trình bằng ngôn ngữ Pascal, dựa vào các siêu nguyên tố có
2 chữ số để tìm các siêu nguyên tố có 3 chữ số, dựa vào các siêu nguyên tố có
n-1 chữ số để tìm các siêu nguyên tố có n chữ số (3 N  9). Kết quả ghi vào
file “Sngto.txt” theo quy định như sau :
Dòng thứ i ghi các thông tin về số siêu nguyên tố có i chữ số : trong đó số
nguyên đầu tiên ghi số lượng các siêu nguyên tố có i chữ số, các số tiếp theo
là các siêu nguyên tố có i chữ số từ nhỏ đến lớn.
Ví dụ cho 2 dòng đầu tiên :
4 2 3 5 7
9 23 29 31 37 53 59 71 73 79
……

 Lê Đắc Ước.................................. Tân Thành - ĐT: 0907090779


Tài liệu bồi dưỡng học sinh giỏi tin học bậc THCS ............................Trang 36
76.Số phản nguyên tố :
Một số n gọi là số phản nguyên tố nếu số ước số của nó là nhiều nhất
trong n số tự nhiên đầu tiên. Cho số K (K <= 2 tỷ). Hãy ghi ra số phản nguyên
tố lớn nhất nhỏ hơn hoặc bằng K.
Dữ liệu vào trong file PNT.INP nội dung gồm:
- Dòng đầu tiên là số M (1 < M <= 100) - số các số cần tìm số phản
nguyên tố lớn nhất của nó;
- M dòng tiếp theo lần lượt là các số K1, K2, K3, ..., Km;
Dữ liệu ra trong file PNT.OUT gồm M dòng: dòng thứ i là số phản
nguyên tố lớn nhất nhỏ hơn hoặc bằng Ki.
Ví dụ:
PNT.INP
1
1000
PNT.OUT
840
77.Nhập vào một một dãy số bất kỳ từ bàn phím. Viết chương trình in ra dãy con
liên tục đơn điệu tăng có độ dài lớn nhất ?
(Ví dụ : Nhập dãy 9,3,1,2,4,6,0,3. In ra dãy con : 1,2,4,6)

 Lê Đắc Ước.................................. Tân Thành - ĐT: 0907090779


Tài liệu bồi dưỡng học sinh giỏi tin học bậc THCS ............................Trang 37

Chủ đề 9 : MỘT SỐ ĐỀ THI HỌC SINH GIỎI TIN HỌC

 Lê Đắc Ước.................................. Tân Thành - ĐT: 0907090779



Núthiệu
đóngổ
đĩa mềm
Tài liệu bồi dưỡng học sinh giỏi tin học bậc THCS ............................Trang 38

MUÏC LUÏC
NỘI DUNG TRANG
Lời mở đầu.......................................................................................................................1
Bài 1 : NHẬP MÔN TIN HỌC......................................................................................2
I. CÔNG NGHỆ THÔNG TIN..............................................................................2
II. SƠ LƯỢC VỀ CẤU TẠO MÁY VI TÍNH........................................................3
III. MỘT SỐ THAO TÁC CƠ BẢN.......................................................................7
Bài đọc thêm : LỊCH SỬ MÁY VI TÍNH...................................................................11
Bài 2 : HỆ ĐIỀU HÀNH WIN DOWS XP..................................................................13
I. PHẦN MỀM TRÊN MÁY TÍNH....................................................................13
II. HỆ ĐIỀU HÀNH WINDOWS XP...................................................................13
III. TẬP TIN – NGĂN HỒ SƠ - LỐI TẮT...........................................................15
IV. CÁC THAO TÁC CHÍNH VỚI NGĂN HỒ SƠ, TẬP TIN, LỐI TẮT..........17
Bài đọc thêm : TRUY CẬP CHƯƠNG TRÌNH TRONG Ổ ĐĨA.............................23
Bài 3 : QUẢN LÝ HỆ THỐNG – ÔN TẬP................................................................24
I. QUẢN LÝ HỆ THỐNG...................................................................................24
II. MỘT SỐ CÁCH THỰC HIỆN LỆNH TRONG WINDOWS.........................27
III. ÔN TẬP VỀ WINDOWS...............................................................................27
Bài đọc thêm: THAY ĐỔI CỬA SỔ-THIẾT LẬP DESKTOP-CONTROL PANEL......30
Bài 4 : TRÌNH VẼ MICOROSOFT PAINT-TRÌNH VIẾT NHẠC ENCORE 4.5............33
I. TRÌNH VẼ MICROSOFT PAINT...................................................................33
II. TRÌNH VIẾT NHẠC ENCORE 4.5...............................................................36
III. CÁCH GÕ DẤU TIẾNG VIỆT TRONG WINDOWS..................................39
Bài đọc thêm : ĐỀ THI TIN HỌC KHÔNG CHUYÊN (TIỂU HỌC)....................42
Bài 5 : GIỚI THIỆU TRÌNH SOẠN THẢO MICROSOFT WORD.......................43
Bài đọc thêm : ĐỀ THI TIN HỌC KHÔNG CHUYÊN (THCS).............................49
Bài 6 : MỘT SỐ PHẦN MỀM TOÁN HỌC - XỬ LÝ ÂM THANH.......................52
I. MỘT SỐ PHẦN MỀM TOÁN HỌC...............................................................52
II. GIỚI THIỆU MỘT SỐ PHẦN MỀM XỬ LÝ ÂM THANH..........................57
Bài đọc thêm : AN TOÀN DỮ LIỆU VÀ CHƯƠNG TRÌNH..................................62
Bài 7 : VIRUS TIN HỌC – ÔN TẬP...........................................................................66
I. GIỚI THIỆU VIRUS TIN HỌC – CÁCH PHÒNG CHỐNG..........................66
II. ÔN TẬP TIN HỌC CƠ BẢN..........................................................................67
Bài đọc thêm : ĐỀ THI TIN HỌC KHÔNG CHUYÊN (THPT).............................71
Bài 8 : KIỂM TRA CUỐI KHÓA...............................................................................74
Phụ lục A : HỆ ĐIỀU HÀNH MS-DOS......................................................................75
Phụ lục B : TRÌNH TIỆN ÍCH NORTON COMMANDER.....................................79
MỤC LỤC.....................................................................................................83

 Lê Đắc Ước.................................. Tân Thành - ĐT: 0907090779

You might also like