You are on page 1of 166

A1 ĐẠI HỌC QUỐC GIA TP HỒ CHÍ MINH

TRUNG TÂM PT CNTT – TRUNG TÂM ĐÀO TẠO TRÍ ĐỨC


************************************

ĐẠI CƯƠNG A 1
Thời lượng: 33 tiết LT + 33 tiết TH

Tài liệu tham khảo:


1. Ngôn ngữ lập trình Pascal 7.0 - Phạm Văn Ất
2. Ngôn ngữ lập trình Pascal – Quách Tuấn Ngọc
3. Giáo trình tin học đại cương – ĐH QG TPHCM
1/169
A1
NỘI DUNG CHƯƠNG TRÌNH

•Phần I: Tổng quan về máy tính


•Phần II: Tổng quan giải quyết vấn đề-bài
toán trên máy tính
•Phần III: Lập trình bằng ngôn ngữ Pascal

2/169
A1
Phần I: TỔNG QUAN VỀ MÁY TÍNH

I.Giới thiệu
•Máy tính là công cụ xử lý thông tin.
•Các thao tác chính:
–Nhận thông tin(Receive input): thu nhận thông tin từ
bên ngoài vào máy tính  chuyển đổi thông tin từ
thế giới thực sang dạng biểu diễn trong máy thông
qua các thiết bị nhập
–Xử lý thông tin( process information): thực hiện biến
đổi, phân tích, tổng hợp, tra cứu,… thông tin ban
đầu để có thông tin mong muốn

3/169
A1

•Các thao tác chính:


–Xuất thông tin(procedure output): đưa các thông tin
đã được xử lý ra trở lại thế giới bên ngoài, thực hiện
qua các thiết bị đầu ra
–Lưu trữ thông tin(store information): ghi lại các
thông tin đã được xử lý để có thể sử dụng lại trong
các lần sau

4/169
A1
II. Thông tin – biểu diễn thông tin

•Thông tin trong tin học được hiểu là các con số có thể rời
rạc hay liên tục  Thông tin được mã hóa dưới dạng số
•Các thông tin khi đưa vào máy tính đều được số hoá
thành từng bít(binary digit)
•Bít có 2 giá trị on- off tương ứng với sự tắt mở của các
mạch điện trong máy tính. Bít là đơn vị đo thông tin nhỏ
nhất trong tin học
•Bít được xây dựng dựa trên trạng thái chuyển mạch của
thiết bị và đại diện cho số theo hệ đếm nhị phân biểu diễn
bằng 2 ký tự 0 và 1
•Đơn vị lưu trữ thông tin là Bit (B)  là đơn vị nhỏ nhất lưu
trữ một giá trị 0 hoặc 1
5/169
A1

•Các đơn vị đo bội số khác:


1 Byte = 8 bits
1 KB (KiloByte) = 2 10 Bytes = 1024 Bytes
1 MB (MegaByte) = 2 10 KB = 1.048.576 Bytes
1 GB (GigaByte) = 2 10 MB = 1.073.741.824 Bytes

6/169
A1
III. Hệ đếm và các phép tính

•Hệ đếm là một tập hợp các chữ số và chữ cái để


có thể biểu diễn được mọi số trong hệ đếm đó
•Khái niệm: Các chữ số cơ bản của một hệ đếm là
các chữ số tối thiểu để biểu diễn mọi số trong hệ
đếm đó
•ví dụ:
–hệ đếm thập phân  cơ số 10: 0,1,2,3,4,5,6,7,8,9
–Hệ nhị phân  cơ số 2: 0 và 1
–Hệ thập lục phân  cơ số 16: 0,1,2,3,4,5,6,7,8,9, A,
B, C, D, E, F
–…
7/169
A1

•Cách biểu diễn giá trị trong hệ đếm


–tất cả mọi giá trị thông tin được biểu diễn dưới dạng
sau Xb=an an-1 … a1a0 = anbn + an-1bn-1+…+ a1b1 + a0.b0
–trong đó: b là hệ đếm cơ số cần biểu diễn và a0,a1,a2,
…, an là các chữ số cơ bản trong hệ đếm biểu diễn
giá trị
–Ví dụ:
Hệ thập phân X=123= 1*102+2*101+3*100
Hệ nhị phân X=110= 1*22+1*21+0*20

8/169
A1

•Quy tắc 1: để chuyển đổi một số từ hệ thập


phân sang hệ có cơ số b (b ≠ 10) thực hiện
theo các sau: lấy số thập phân lần lượt chia
cho cơ số b cho đến khi phần thương của
phép chia bằng 0 => kết quả chính là các
phần dư của phép chia theo thứ tự ngược
lại.
•Ví dụ: cho X=610

9/169
A1

•Quy tắc 2: để chuyển đổi một số từ hệ cơ số


b về hệ thập phân ta sử dụng công thức
Xb=an an-1 … a1a0 = anbn + an-1bn-1+…+ a1b1 + a0b0
•Ví dụ: cho X=1102 => chuyển X sang hệ thập
phân

10/169
A1

•Quy tắc 3: Để chuyển đổi từ hệ nhị phân về


hệ thập lục phân ta thực hiện như sau: nhóm
lần lượt 4 bít từ phải sang trái, sau đó thay
thế các nhóm 4 bit bằng giá trị tương ứng với
hệ thập lục phân
•ví dụ: chuyển X=11 10112 sang hệ cơ số
thập lục phân

11/169
A1

•Quy tắc 4: Để chuyển đổi từ hệ thập lục


phân sang hệ nhị phân ta thực hiện như sau:
ứng với mỗi chữ số thập lục phân sẽ được
biểu diễn dưới dạng 4 bít  mỗi chữ số thập
lục phân sẽ được biểu diễn về cơ số nhị
phân tương ứng
•ví dụ: chuyển X=3B16 sang hệ cơ số nhị phân

12/169
A1

•Bảng chuyển đổi giữa các hệ số


Hệ thập phân Hệ nhị phân Thập lục phân
0 0 0
1 1 1
2 10 2
3 11 3
4 100 4
5 101 5
6 110 6
7 111 7
13/169
A1

•Bảng chuyển đổi giữa các hệ số


Hệ thập phân Hệ nhị phân Thập lục phân
8 1000 8
9 1001 9
10 1010 A
11 1011 B
12 1100 C
13 1101 D
14 1110 E
15 1111 F
14/169
A1
IV. Cấu trúc tổng quan của máy tính

Bộ nhớ ngoài

Bộ xử lý trung tâm

Bộ điều khiển Bộ số học logic


Thiết bị vào Thiết bị ra

Bộ nhớ trong

15/169
A1

2.Bộ xử lý trung tâm


• được gọi là CPU – Central Processing Unit
• là đầu não của máy tính, tại đó diễn ra việc
xử lý thông tin và điều khiển toàn bộ mọi
hoạt động của máy tính

16/169
A1
2. Bộ xử lý trung tâm
•CPU gồm các bộ phận sau:
–Bộ điều khiển(CU- control Unit): điều khiển
các bộ phận khác của máy tính thực hiện
chương trình
–Bộ số học và logic(ALU- Arithmetic/ Logic
Unit): thiết bị thực hiện các phép toán số học
và logic
–Thanh ghi(register): là vùng nhớ đặc biệt
được CPU sử dụng để lưu trữ tạm thời các
lệnh và dữ liệu đang được xử lý
17/169
A1
3. Bộ nhớ chính
•Bộ nhớ chính (Bộ nhớ trong) dùng để
lưu trữ chương trình và dữ liệu đưa vào
cũng như dữ liệu thu được trong quá
trình thực hiện chương trình.

18/169
A1

•Bộ nhớ trong gồm hai phần:


–ROM (Read Only Memory - Bộ nhớ
chỉ đọc): là bộ nhớ chứa chương
trình và dữ liệu của nhà sản xuất
máy tính  không thay đổi và không
mất khi tắt máy
–RAM (Random Access Memory -
Bộ nhớ truy nhập ngẫu nhiên): chứa
các chương trình và dữ liệu của
người sử dụng khi máy đang hoạt
động  thông tin có thể đọc, ghi vào
và sẽ mất ngay khi tắt máy 19/169
A1
4. Bộ nhớ ngoài
•Bộ nhớ ngoài dùng để lưu giữ lâu dài các
thông tin và hỗ trợ cho bộ nhớ trong
•Bộ nhớ ngoài thường dùng là:
–Đĩa mềm
–Đĩa cứng
–Đĩa compact
–Đĩa USB

20/169
A1
a. Đĩa mềm
-Kích thước 3,5 inch với dung
lượng 1,44Mb
-Phần ghi thông tin của một đĩa
mềm là một tấm nhựa mỏng, được
tráng từ, hình vành khăn.
-Để định vị thông tin trên đĩa, đĩa
được chia thành những hình quạt
bằng nhau (sector)
-Trên mỗi sector, thông tin được ghi
trên các rãnh tròn đồng tâm gọi là
các track.
21/169
A1
b. Đĩa cứng
-Đĩa cứng có dung lượng rất lớn
và tốc độ đọc ghi rất nhanh
-Phức tạp hơn đĩa mềm về mặt
vật lý
-Cách định vị thông tin tương tự
như đĩa mềm
c. Đĩa Compact
-có mật độ ghi thông tin rất các và
khối lượng lớn
-để ghi dữ liệu vào đĩa cần phải có
ổ ghi và chương trình ghi đĩa 22/169
A1
5. Thiết bị vào
- là các thiết bị cho phép đưa
thông tin vào máy tính
a.Bàn phím
- gồm các phím được phân
hai loại: phím ký tự và phím
chức năng
- khi gõ một phím thì mã
tương ứng của phím được
truyền vào máy
23/169
A1

b.Chuột
- dùng để thực hiện một
lựa chọn nào đó  thay
thế một số thao tác trên
bàn phím
c.Máy quét
- là thiết bị đưa hình ảnh
vào máy tính
24/169
A1
6. Thiết bị ra

a.Màn hình
-cho thấy các kết quả được làm
việc trên màn hình, gồm văn
bản hay hình ảnh, hay các
đoạn phim.
b.máy in
-để in kết quả lên giấy. có nhiều
loại: in kim, in phun, in laser,…

25/169
A1
V. Tổng quan hệ điều hành
•Bất kỳ máy tính muốn hoạt động đều phải
thông qua các chương trình gọi là hệ điều
hành
•Hệ điều hành hiện nay gồm:
MS Dos
NC – Norton command
Window: Win 98, Win 2000, Win XP,..
•Hệ điều hành gồm tập các lệnh cơ sở điều
khiển hoạt động xuất nhập dữ liệu. một phần
sẽ được nạp ngay vào bộ nhớ khi máy khởi
động và phần còn lại được nạp khi nào cần
thiết 26/169
A1

•Hệ điều hành điều khiển và phối hợp việc sử


dụng phần cứng của các chương trình được
người dùng sử dụng => tạo môi trường cho các
phần mềm khác chạy trên đó
•Chức năng của hệ điều hành
khởi động máy tính
quản lý phân phối và thu hồi bộ nhớ
điều khiển việc thực thi các chương trình
điều khiển các thiết bị trong, thiết bị ngoại vi
quản lý thông tin và việc vào-ra thông tin
27/169
A1
VI. Tổng quan mạng máy tính
•mạng máy tính là hệ thống có thể liên kết hai
hoặc nhiều máy tính lại với nhau
•Các yêu tố của mạng máy tính
phần cứng: mạng máy tính cho phép chia sẻ
các phần cứng của máy tính => giảm giá thành
và cho phép nhiều người cùng sử dụng cùng
một thiết bị
phần mềm: cho phép chia sẻ các thông tin và
các chương trình phần mềm, tăng hiệu quả và
năng suất
con người: cho phép con người làm việc với
nhau dễ dàng hơn
28/169
A1

•mạng máy tính có nhiều dạng và với quy mô


khác nhau => chia thành hai loại: cục bộ và
diện rộng
•Mạng cục bộ - LAN: là mạng mang tính nội
bộ thường nằm trong phạm vi một tòa nhà.
Các máy tính nối với nhau theo nhiều cách
tùy theo người quản trị mạng
•mạng diện rộng – WAN: là mạng có phạm vi
rộng lớn

29/169
PHẦN
A1 II:TỔNG QUAN GIẢI QUYẾT VẤN ĐỀ-BÀI TÓAN TRÊN
MÁY TÍNH

I. Khái niệm về vấn đề và bài toán


• Vấn đề là tập hợp các điều cần giải quyết trong thực
tế
• Bài toán là vấn đề mà để giải quyết vấn đề phải liên
quan đến tính toán. Bài toán có: bài toán trong vật lý,
trong toán học, trong kinh tế,…
• Mọi vấn đề đều diễn tả bằng sơ đồ:
A →B
Trong đó:
A: là giả thiết, điều kiện ban đầu của bài toán
B: là kết luận hay mục tiêu cần đạt tới
→: là phương pháp suy luận, giải pháp cần xác định
30/169
A1
II. Các bước giải quyết vấn đề bài toán bằng máy tính điện tử

•việc giải một bài toán trên máy tính điện tử là một
quá trình phức tạp bao gồm nhiều giai đoạn và
lập trình chỉ là một trong các giai đoạn. Gồm các
bước
•bước 1: xác định vấn đề - bài toán
nhằm phát biểu chính xác vấn đề - bài toán => làm
rõ những yêu cầu mà người sử dụng đòi hỏi
•bước 2: lựa chọn phương pháp giải
có thể có nhiều cách khác nhau để giải quyết vấn
đề. Các phương pháp có thể khác nhau về thời gian
thực hiện, chi phí lưu trữ, độ chính xác,… => lựa
chọn phương pháp thích hợp giải bài toán 31/169
A1

•bước 3: xây dựng thuật toán hoặc thuật giải


xây dựng mô hình chặt chẽ, chính xác hơn và chi
tiết hóa hơn phương pháp đã lựa chọn.
xác định rõ ràng dữ liệu vào, ra cho các bước thực
hiện cơ bản, đồng thời xác định trật tự thực hiện
các bước tương ứng
•bước 4: cài đặt chương trình
mô tả thuật giải bằng chương trình, bằng một
ngôn ngữ cụ thể để có thể giải được bài toán

32/169
A1

•bước 5: hiệu chỉnh chương trình


tiến hành chạy thử để phát hiện và điều chỉnh các
sai sót của chương trình nếu tìm thấy
có hai loại lỗi:
lỗi cú pháp: do không tuân thủ đúng các nguyên tắc viết
chương trình trên một ngôn ngữ lập trình cụ thể
lỗi ngữ nghĩa: là lỗi làm sai lạc ý nghĩa hoặc dẫn đến bế
tắc của chương trình.
•bước 6: thực hiện chương trình
cho máy tính chạy chương trình đã được viết =>
phân tích kết quả thu được để khẳng định xem kết
quả đó có phù hợp không?
33/169
A1
III. Thuật toán và thuật giải

1.Thuật toán
• là một tập các lệnh hay chỉ thị nhằm hướng
dẫn việc thực hiện một công việc nào đó
• thuật toán bao gồm một dãy hữu hạn chỉ thị
rõ ràng và có thể thi hành được để hướng
dẫn thực hiện hành động nhằm đạt được
mục tiêu đặt ra
• => thuật toán là sự thể hiện của một
phương pháp để giải quyết một vấn đề
34/169
A1
1. Thuật toán
•ví dụ: xây dựng thuật toán giải phương trình bậc hai
1.nhập hệ số a,b,c
2.tính D=b2 - 4*a*c
3.xét dấu D:
nếu D>0: thực hiện tính nghiệm theo công thức
x1=(-b-sqrt(D))/(2*a);
x2=(-b+sqrt(D))/(2*a);
Thông báo lên màn hình phương trình có hai nghiệm
phân biệt
Nếu D=0: thì thông báo phương trình có nghiệm kép –
b/(2*a)
Nếu D<0: thông báo phương trình vô nghiệm 35/169
A1

•Các đặc trưng của thuật toán:


nhập: các thuật toán phải có các thông số đầu vào
từ một tập xác định nào đó
xuất: tương ứng với giá trị đầu vào sẽ có các giá trị
kết quả tương ứng của bài toán
tính xác định: các bước xác định phải chính xác rõ
ràng
tính hữu hạn: thuật giải phải cho ra lời giải sau một
số hữu hạn các bước thực hiện
tính hiệu quả: được đánh giá dựa trên khối lượng
tính toán, không gian và thời gian được sử dụng
tính tổng quát: thuật toán phải được áp dụng cho tất
cả các bài toán có dạng như mong muốn chứ không
chỉ áp dụng cho một trường hợp riêng lẻ 36/169
A1
2. Thuật giải
•khi giải các bài toán có một số tình huống sau:
–có một số bài toán chưa có lời giải theo kiểu thuật
toán và cũng không biết có tồn tại thuật toán hay
không
–có những bài toán được giải theo những cách vi
phạm thuật toán nhưng vẫn được chấp nhận
•thuật giải được hình thành là sự mở rộng của thuật
toán để giải một số bài toán trên.
•thuật giải mở rộng trên hai tiêu chuẩn:
–tính đúng đắn
–tính xác định
•các loại thuật giải: đệ quy, trí tuệ nhân tạo, ngẫu
nhiên
37/169
A1
IV. Biểu diễn thuật toán và thuật giải
•Để có thể mô tả một thuật toán cho người
khác hay chuyển thuật toán cho máy tính =>
phải tìm cách biểu diễn thuật toán
•Để biểu diễn thuật toán dùng ngôn ngữ, có
các loại ngôn ngữ sau:
ngôn ngữ tự nhiên
ngôn ngữ lưu đồ
ngôn ngữ tựa lập trình
ngôn ngữ lập trình

38/169
A1

• Bằng lưu đồ: dùng các hình cơ bản để xây dựng


lưu đồ để giải quyết bài toán

A A
Vào/Ra dữ liệu
Thực hiện Gọi Chương
công việc A trình con A

Phép Sai
thử B B Begin End

Đúng

39/169
A1

• Ví dụ: tính tổng của N số nguyên đầu tiên


Begin

Đọc N

S:=0; i:=0

S:=S+1
i:=i+1

Sai
i>N
Đúng

In S ra

End
40/169
A1
V. Một số thuật toán thông dụng
1.Thuật toán số học:
b.Thuật toán kiểm tra số nguyên tố:
•Vấn đề: cho một số nguyên dương p. kiểm
tra xem p có phải là một số nguyên tố
không?
•ý tưởng:
nếu p=1: thì p không là số nguyên tố
nếu p≠ 1: kiểm tra các giá trị k từ 2 đến p-1
nếu có k là ước của p thì kết luận p không là
nguyên tố. Còn ngược lại, nếu không tồn tại k
mà p chia kết cho k thì p là số nguyên tố
41/169
A1
a. Thuật toán kiểm tra số nguyên tố
• Nhập: số p nguyên dương
• Xuất: kết luận p có nguyên tố hay không
• Thuật toán:
1. if p=1 then
begin
xuất: p không là nguyên tố;
dừng thuật toán
end
2. co:=TRUE;
3. for k:=2 to p-1 do
if (k là ước của p) then
begin
co:=FALSE;
ngắt vòng lặp;
end
4. if co=TRUE then
xuất: p là số nguyên tố
else
xuất: p không là số nguyên tố
42/169
A1
b. Thuật toán tìm ước chung lớn nhất của hai số nguyên

•Vấn đề: cho hai số nguyên. tìm ước chung


lớn nhất của hai số đó  (a,b)=?
•ý tưởng: dựa vào mệnh đề sau;
a. nếu a là một ước của b thì (a,b)=a
b. (a,b)=(b,a)
c. giả sử a là một số nguyên bất kỳ, b là một số
nguyên khác 0. gọi r là số dư khi chia a cho b.
Khi đó: (a,b) = (b,r)  ước chung lớn nhất của a
và b bằng ước chung lớn nhất của b và r

43/169
A1

• nhập: hai số nguyên m và n


• điều kiện: m và n không đồng thời bằng không
• xuất: d là ước chung lớn nhất của m và n
• thuật toán:
1. if n=0 then
begin
d:=m;
dừng thuật toán
end
2. a:=m;
3. b:=n;
4. r:= a mod b;
5. while r <>0 do
begin
a:=b;
b:=r;
r:= a mod b;
end
6. d:=b;
44/169
A1
2. Một số thuật toán về dãy
a.Tìm phần tử lớn nhất trong một dãy số hữu hạn
• Có nhiều cách để giải bài toán này, có thể thực hiện
theo các bước sau đây:
1. trước hết đặt cho giá trị lớn nhất tạm thời bằng số
đầu tiên trong dãy
2. so sánh số kế tiếp trong dãy với giá trị lớn nhất tạm
thời và nếu nó lớn honư giá trị lớn nhất tạm thời thì
đặt giá trị lớn nhất tạm thời bằng giá trị này
3. lặp lại bước 2 nếu còn số phần tử trong dãy chưa
được xét tới
4. dừng nếu không còn số nào trong dãy chưa được
xét. giá trị lớn nhất tạm thời lúc này chính là giá trị lớn
nhất trong dãy số
45/169
A1
a. Tìm phần tử lớn nhất trong dãy số hữu hạn(t)
•Thuật toán:
–Nhập: dãy số a1, a2, …, an
–Xuất: max là giá trị lớn nhất trong dãy số a1,
a2, …, an
–Thuật toán:
1. max:=a1
2. for i:=2 to n do
if max<ai then max:=ai
3. max là giá trị lớn nhất của dãy số
46/169
A1
b. Thuật toán sắp xếp

•Cho một dãy số bất kỳ => sắp xếp


các phần tử của dãy số theo một thứ
tự nhất định: giảm dần hoặc tăng dần
•Để không mất tính tổng quát ta xét
bài toán như sau: cho dãy số gồm a1,
a2, …, an => thực hiện sắp xếp để
được dãy số tăng dần a1≤ a2 ≤ … ≤
an
47/169
A1

•Có nhiều phương pháp để thực hiện sắp xếp.


Chọn phương pháp “sắp xếp chọn” như sau:
– tiến hành tìm phần tử nhỏ nhất trong dãy a1,
a2, …, an rồi hoán vị với phần tử đầu tiên. Sau
bước này a1 trở thành phần tử nhỏ nhất trong
dãy
– kế tiếp xét các phần tử a2, …, an và thực hiện
giống như trên: tìm phần tử nhỏ nhất trong dãy
a2, a3, …, an và hoán vị với phần tử a2.
– cứ tiếp tục qúa trình trên thì sau n-1 ta có
một dãy các giá trị tăng dần
48/169
A1
• Thuật toán sắp xếp chọn:

• Nhập: dãy số a1, a2, …, an (tùy ý)


• xuất: dãy số a1, a2, …, an đã được sắp xếp tăng dần a1≤ a2 ≤ …
≤ an
• Thuật toán:
for i:= 1 to n-1 do
begin
{tìm vị trí j chứa phần tử nhỏ nhất trong dãy}
j:=i
for k:=i+1 to n do
if ak < aj then j:=k;
{thực hiện hoán đổi hai phần tử}
temp:=ai
ai:=aj
aj:=temp
end 49/169
A1

PHẦN III: LẬP TRÌNH BẰNG


NGÔN NGỮ PASCAL

50/169
A1
CHƯƠNG I: CÁC KHÁI NIỆM CƠ BẢN TRONG PASCAL

I.Giới thiệu về ngôn ngữ Pascal:


•Là ngôn ngữ lập trình cao cấp do GS
Niklaus Wirth công bố năm 1971
•Là ngôn ngữ có định kiểu mạnh mẽ
•Là ngôn ngữ có cấu trúc  một chương
trình lớn, phức tạp được chia thành nhiều
bài toán nhỏ, đơn giản hơn.
•Tính cấu trúc còn được thể hiện ở cách thức
tổ chức các câu lệnh  từ các câu lệnh đã
có => nhóm các câu lệnh lại với nhau và đặt
trong cặp từ khóa Begin và End
51/169
A1
II.Bộ chữ viết. Từ khóa. Tên

•Một ngôn ngữ bất kỳ đều có một bộ các chữ


viết(ký tự) và các ký tự kết hợp lại thành “từ
vựng”
•Bộ chữ cái của Pascal
–Chữ cái Latinh: 26 chữ cái hoa(A,B,…,Z) và
26 chữ cái thường(a,b,…,z)
–Ký tự gạch nối: _
–Các chữ số: 0,1,2,3,4,5,6,7,8,9
–Các ký hiệu toán học: + - * / = < > ()…
–Các ký tự đặc biệt: . , ; : [ ] ? % @ \ | ! & # $
52/169
A1

• Từ khóa: là một số từ của riêng Pascal . Các từ


khóa phải dùng đúng với cú pháp và không được
dùng cho việc đặt tên mới.
• Các từ khóa
– Từ khóa chung: PROGRAM, BEGIN, END,
PROCEDURE, FUNCTION
– Từ khóa khai báo: TYPE, CONST, LABEL, VAR,
ARRAY, STRING, RECORD, FILE OF
– Từ khóa cấu trúc: IF…THEN..ELSE…, CASE…
OF…, FOR…TO...DO…, WHILE…DO…,
REPEAT…UNTIL…,
– Từ khóa toán tử: AND, OR, NOT, IN, DIV, MOD
– Từ khóa null: NULL
53/169
A1

•Tên(định danh): là dãy ký tự liền nhau để chỉ tên


của hằng(số, ký tự, ..), biến, kiểu, chương trình con,
…Được tạo từ các chữ cái và chữ số, bắt buộc phải
chữ cái đầu
–Tên đã được định nghĩa sẵn: tên chuẩn
–Người dùng có thể sử dụng và định nghĩa lại tên
chuẩn
–Một số tên chuẩn: boolean, char, integer, real,
byte, text, false, true, chr, ord, round, trunc, sqr,
sqrt, pred, succ, new, read, readln, write, writeln,
reset, rewrite.

54/169
A1

III.Lời chú thích


•Dùng để giải thích một đoạn mã trong chương
trình
•Được đặt giữa cặp dấu { } hay (* *)
•Chương trình khi chạy bỏ qua các câu này
III.Cấu trúc một chương trình Pascal
•Gồm ba phần:
–Phần tiêu đề chương trình
–Phần khai báo dữ liệu: biến, hằng, chương trình
con,…
–Phần thân chương trình: chứa các lệnh thực hiện
55/169
A1

1.Phần tiêu đề chương trình: có thể có


– Bắt đầu bằng từ khóa PROGRAM
– Tiếp đến là tên chương trình
– Kết thúc bằng dấu chấm phẩy (;)
2.Phần khai báo: có thể có
– Dùng để mô tả đối tượng bài toán, dữ liệu bài toán
– Gồm các thành phần: LABEL, CONST, TYPE,
VAR, PROCEDURE, FUNCTION
2.Phần thân chương trình: bắt buộc
– Nằm gọn giữa hai từ khóa BEGIN và END.
– Chứa các lệnh xử lý các đối tượng dữ liệu
56/169
A1
• Cấu trúc một chương trình Pascal

{Phần tiêu đề }
PROGRAM ten_chuong_trinh; { dòng tiêu đề}
{Phần khai báo }
USE CRT, PRINTER; {gọi sử dụng các đơn vị chương trình}
LABEL… {khai báo nhãn}
CONST… {khai báo hằng}
TYPE… {khai báo kiểu dữ liệu mới}
VAR… {khai báo biến cho toàn chương trình}

PROCEDURE… {khai báo thủ tục}

FUNCTION… {khai báo hàm}


{Phần thân chương trình }
BEGIN {bắt đầu thân chươn trình chính}

END. 57/169
A1

• Ví dụ một chương trình đơn giản


Program cong2so; {Phần tiêu đề}
uses crt; {Khai báo hàm thư viện}
var a,b,tong: real; {Khai báo biến}
Begin {Bắt đầu chương trình}
Clrscr; {Lệnh xoá màn hình}
Write('Nhap so thu nhat'); {Lệnh in lên màn hình thông báo}
readln(a); {Lệnh nhập dữ liệu cho biến a}
Write('Nhap so thu hai');
readln(b);
TONG:=a+b; {Lệnh tính tổng của hai biến a và b}
Writeln('Tong hai so la', tong:8:2); {Đưa kết quả lên ra màn hình}
readln; {Lệnh dừng màn hình để xem kết quả}
End. {Kết thúc chương trình}
58/169
A1
V. Môi trường làm việc của ngôn ngữ Pascal
1.Khởi động chương trình
a.Click đúp vào biểu tượng Borland Pascal trên màn hình
b.Khởi động máy vào môi trường MS Dos sau đó đánh đường
dẫn vào thư mục c:\BP\BIN\BP
Giao diện chương trình xuất hiện: Hệ thống Menu

Các phím tắt

59/169
A1

2. Các thao tác soạn thảo chương trình


- Bấm phím Alt + ký tự đầu của menu để mở
menu
- Mở một file mới chọn New trong menu File
- Mở file đã có: ấn F3 hoặc chọn file/Open =>
xuất hiện hộp thoại, tiến hành chọn thư mục
chứa chương trình cần mở
- đóng file: ấn Alt + F3

60/169
A1

- Ghi file vào đĩa cứng: bấm phím F2 và đặt tên bài theo quy tắc:
Tên gồm các chữ cái latinh và số dài không qua 8 ký
tự, không chứa dấu cách
Phần mở rộng mặc định là PAS(chương trình tự đặt)

61/169
A1
3. Chạy chương trình
- Bấm F9 để kiểm tra lỗi cú pháp
- Bấm Ctrl + F9 để chạy chương trình
- Bấm Alt + F5 để xem lại kết quả
- Để chạy được Turbo Pascal, cần hai tập tin sau là
đủ :
 TURBO.EXE : tập tin chính của TP
 TURBO.TPL : tập tin chứa các thư viện của TP
- Nếu muốn vẽ đồ họa thì phải có thêm các tập tin:
 GRAPH.TPU, tập tin chứa thư viện đồ họa
 *.BGI : các tập tin màn hình đồ họa
 *.CHR : các tập tin tạo kiểu chữ 62/169
A1

VI.Các kiểu dữ liệu cơ bản


1.Khái niệm chung:
•Dữ liệu: là tất cả những gì máy tính xử lý
•Kiểu dữ liệu được định nghĩa với hai điểm:
–Một tập hợp các giá trị mà một biến thuộc
kiểu đó có thể nhận được
–Trên đó xác định một số phép toán

63/169
A1

• Các kiểu dữ liệu cơ bản


Kiểu vô hướng Kiểu cơ sở Boolean

Integer

Real

Char

Kiểu do người Khoảng con


dùng định nghĩa
Liệt kê

Kiểu cấu trúc Array


Set
Kiểu xâu ký tự
Record
Kiểu con trỏ
File 64/169
A1

2.Kiểu Logic – Boolean


• Để mô tả đại lượng chỉ nhận hai giá trị logic
–True: đúng
–False: sai
–quan hệ giá trị: FALSE < TRUE
• mỗi giá trị boolean chiếm một byte bộ nhớ
• Các phép toán đối với kiểu Boolean
–Phép AND
–Phép OR
–Phép NOT
–Phép XOR
–Các biểu thức quan hệ: <>, =, >=, <=, <, >
65/169
A1
3. Kiểu số nguyên
•Mô tả giá trị các số nguyên
•Các kiểu số nguyên:
–integer  -32768…32767
–shortint  -128…127
–byte  0…255
–word  0..65535
–longint  -2147483648…2147483647
66/169
A1

•Các phép toán đối với kiểu


nguyên:
–Các phép toán số học: +, -,*,/,
DIV,MOD
–Các phép toán quan hệ: >, <, >=,
<=, <>, =  kết quả của phép
toán là giá trị logic TRUE hoặc
FALSE 67/169
A1

– Các phép toán logic trên số


nguyên: NOT, AND, OR, XOR xử
lý trên các bít nhị phân (0, 1) và
được xác định như sau:
NOT 1=0 NOT 0 = 1
1 AND 1 = 1 1 AND 0 =0
1 OR 1 = 1 1 OR 0 = 1
1 XOR 1 = 0 1 XOR 0 = 1
68/169
A1

–các phép toán dịch chuyển số học


SHR và SHL:
n SHR k : dịch các bít của số nguyên
n sang phải đi k bít  N div 2k
n SHL k : dịch các bít của số nguyên n
sang trái đi k bít  N * 2k

69/169
A1
4. Kiểu số thực
•để biểu diễn các giá trị có kiểu thực
•có các kiểu số thực thông dụng:
–real 2.9*10-39…1.7*1038
–single 1.5*10-45…3.4*1038
–double 5.0*10-324…1.7*10308

70/169
A1

•Các phép toán đối với kiểu thực:


–Các phép toán số học: +, -, *, /
–Các phép toán quan hệ: >, <, >=, <=, <>, =
•Các dạng biểu diễn số thực:
–Dạng bình thường: 3.14 623.12345
–Dạng mũ: “phần định trị” + “E” + “phần mũ”
6.2312345E+02

71/169
A1
5. Các hàm số học chuẩn

• ABS(x): trả lại giá trị tuyệt đối


của x
• EXP(x): hàm tính ex
• SQR(x): hàm tính x2
• SQRT(x): hàm tính căn bậc hai
của x
• SUCC(n): hàm trả lại giá trị
tương ứng với n+1 72/169
A1
5. Các hàm số học chuẩn

• PRED(n): hàm trả lại giá trị tương


ứng với n-1
• ODD(n): hàm kiểm tra số n có phải
là số lẻ hay không. Hàm trả lại giá
trị True nếu n là số lẻ và ngược lại
là giá trị False nếu n là số chẵn
• ROUND(x): hàm trả lại giá trị được
làm tròn đến số nguyên gần nhất
73/169
A1
6. Kiểu ký tự - char
•để mô tả 1 ký tự: chữ số, chữ cái, ký hiệu,…
•Hằng ký tự được đặt trong dấu ‘ ’
•các ký tự được mô tả trong bảng mã ASCII,
đánh số theo thứ tự từ 0 đến 255
–chữ số (0..9): mã ASCII là 48..57
–chữ cái hoa(A..Z): mã ASCII là 65..90
–chữ cái thường(a..z): mã ASCII là 97..122

74/169
A1

•Các hàm chuẩn liên quan đến ký tự


–ORD(ch): trả lại vị trí của ký tự ch trong bảng

–CHR(n): trả lại ký tự ở vị trí n trong bảng mã
–PRED(ch): trả lại ký tự nằm trước ký tự ch
trong bảng mã
–SUCC(ch): trả lại ký tự nằm sau ký tự ch
trong bảng mã
–UPCASE(ch): đổi ký tự ch thành chữ hoa

75/169
A1

•Ví dụ: viết chương trình đổi chữ hoa ra chữ thường và
ngược lại
PROGRAM VIDU;
Var ch, ch1: char;
begin
write(‘nhap ky tu:’); readln(ch);
if (ch>=‘A’) and (ch<=‘Z’) then
ch1:=Chr(ord(ch)+32)
else
ch1=Upcase(ch);
writeln(ch, ‘ duoc doi thanh ‘, ch1);
readln;
end.
76/169
A1

VII.Thủ tục vào/ ra:


1.Thủ tục viết ra màn hình
• Viết một nội dung ra màn hình
• Cú pháp:
write(item1, item2,…,itemN);
writeln(item1, item2,…, itemN);
writeln;
Item1, item2,…, itemN là các mục được viết ra màn
hình.

77/169
A1

2. Viết ra kiểu số nguyên:

Không quy cách: Có quy cách:


Var i,n:integer; Var i:integer;
Begin Begin
i:=5; n:=10; i:=5;
write(i,n); write(i:8,n:6);
End. End.
78/169
A1

3. Viết ra kiểu số thực


Không quy cách: Có quy cách:
Var x:real; Var x:real;
Begin Begin
x:=123.456; x:=123.456;
write(x); write(x:8:3);
End. End.

1.2345600000E+02 123.456
79/169
A1

VIII.Thủ tục nhập dữ liệu


1.Thủ tục Read và Readln:
• Cho phép nhập giá trị từ bàn phím vào
một biến
• Cú pháp:
read(biến 1, biến 2,…., biến N);
readln(biến 1, biến 2,…., biến N);
readln;
• Ví dụ:
80/169
A1

2.Kết hợp Write và Read để trao đổi


người - máy:
Var n,x :integer;
begin
write(‘Nhap gia tri cua n:’); readln(n);
x:= n+1;
write(‘Gia tri cua x la :’, x);
end.
81/169
A1

IX.Khai báo hằng, biến và kiểu


1.Khai báo hằng:
CONST tên_hằng = giá_trị_của_hằng;
•Ví dụ: const Pi=3.14, N=5;

82/169
A1
2.Khai báo biến:

VAR tên_biến : kiểu_dữ_liệu_của_biến;

•Ví dụ:

Var x,y:real;
i,n: integer;

83/169
A1

3.Định nghĩa kiểu dữ liệu mới:

TYPE
tên_kiểu_DL_mới= mô_tả_kiểu_DL_mới;
• Ví dụ:
type
color=(xanh,do,trang);
var c:color;

84/169
A1

4.Câu lệnh
• Xác định công việc chương trình thực hiện để
xử lý các dữ liệu.
• Các câu lệnh được phân cách nhau bởi dấu
(;)

85/169
A1

• Phân loại câu lệnh:


– Câu lệnh đơn giản
– Câu lệnh có cấu trúc
• Phép gán: dùng gán giá trị của một
biểu thức cho một biến
• tên_biến := biểu_thức;

86/169
A1
CHƯƠNG II: CÂU LỆNH RẼ NHÁNH VÀ LẶP

I.Câu lệnh rẽ nhánh:


2. Câu lệnh IF:
• Cho phép rẽ nhánh để thực hiện 1 trong hai
khả năng dựa vào giá trị đúng – sai của “biểu
thức điều kiện”
• Cú pháp:
Dạng (1): IF <btdk> THEN <câu lệnh 1>;

Dạng (2): IF <btdk> THEN <câu lệnh 1>


ELSE <câu lệnh 2>;
87/169
A1

• Thực hiện:
–tính giá trị của biểu thức <bt boolean>
–nếu biểu thức đúng (TRUE) thì thực hiện
<câu lệnh 1>, còn ngược lại thì bỏ qua
chuyển sang câu lệnh sau IF nếu ở dạng (1)
hoặc thực hiện <câu lệnh 2> nếu ở dạng
(2)

88/169
A1

• Sơ đồ thực hiện:

Sai Sai
bt boolean bt boolean

Đúng Đúng

câu lệnh 1 câu lệnh 1 câu lệnh 2

Câu lệnh kế tiếp Câu lệnh kế tiếp

Dạng 1 Dạng 2
89/169
A1

• Ví dụ 1: cho hai số a,b. In ra giá trị lớn nhất và nhỏ


nhất
Program lon_nho;
Var a,b,max,min:integer;
Begin
Write(‘nhap hai so a va b:’); readln(a,b);
If a>b then begin max:=a; min:=b end
else begin max:=b; min:=a; end;
Writeln(‘Gia tri lon nhat:’,max:5,‘Nho
nhat:’,min:5);
Readln;
End.
90/169
A1

2.Câu lệnh CASE

• Cho phép rẽ nhiều nhánh, thử và chọn một trong nhiều khả năng để
thực hiện

91/169
A1
Cú pháp:
Dạng 1: Dạng 2:
CASE <biểu thức> OF CASE <biểu thức> OF
Hằng 1: <câu lệnh 1>; Hằng 1: <câu lệnh 1>;
Hằng 2: <câu lệnh 2>; Hằng 2: <câu lệnh 2>;
…. ….
Hằng n: <câu lệnh n>; Hằng n: <câu lệnh n>
END; ELSE <câu lệnh n+1>;
END;

<biểu thức>: biểu thức trả lại giá trị kiểu vô hướng đếm
được
<hằng 1>, <hằng 2>,…: là các giá trị có thể nhận được
92/169
A1

•Thực hiện:
–Tính toán giá trị của <biểu thức>
–Tùy theo giá trị của biểu thức có
thể là <hằng 1>, <hằng 2>,… thì
sẽ thực hiện <câu lệnh 1>, <câu
lệnh 2>,… tương ứng

93/169
A1

• Ví dụ: nhập vào một tháng, sau đó in ra số ngày tương


ứng của tháng đó
Program tinh_ngay;
Var ngay, thang: integer;
Begin
write(‘nhap thang:’); readln(thang);
case thang of
4,6,9,11: ngay:=30;
2: ngay:=28;
1,3,5,7,8,10,12: ngay:=31;
end;
write(‘So ngay cua thang ‘,thang,’
la:’,ngay);
readln;
End. 94/169
A1
Ví dụ: nhập vào hai giá trị x và y. Nhập vào phép toán =>
In kết quả tương ứng với phép toán
Program tinh;
Var x, y, kq: real; pheptoan:char ; kt: boolean;
Begin
Write(‘Nhap x = ’ ); readln(x);
Write(‘Nhap y = ’ ); readln(y); Write(‘Chọn phép toán’ ); readln(pheptoan);
kt : = true;
Case pheptoan of
‘+’ : kq : = x + y;
‘-’ : kq : = x - y;
‘* ’: kq : = x * y;
‘/’ : if (y<>0) then kq : = x / y else kt : = false;
End;
If kt then writeln(‘Ket qua = ’,kq:8:2) else writeln(‘Khong chia duoc’);
Readln;
End.
95/169
A1

II. Vòng lặp xác định và không xác định


1. Vòng lặp xác định:
• Là vòng lặp được thực hiện với số bước lặp đã
được xác định trước
• Cú pháp:
FOR <biến đk>:=gtđầu TO gtcuối DO <câu lệnh>;

FOR <biến đk>:=gtcuối DOWNTO gtđầu DO


<câu lệnh>;

96/169
A1

• Thực hiện
<biến đk> lần lượt nhận từng giá trị tại
từng vòng lặp từ <gtđầu> đến
<gtcuối>.
Tại mỗi bước lặp đều thực hiện
<câu lệnh> trong thân vòng FOR

97/169
A1

• Ví dụ: Tính tổng của n số đầu tiên


Var i,n,s :integer;
Begin
write(‘nhap n:’); readln(n);
s:=0;
for i:=1 to n do
s:=s+i;
writeln(‘Tong:’,s:6:2);
End.
98/169
A1

2.Vòng lặp không xác định:


Cú pháp1:
REPEAT
<câu lệnh>
UNTIL <bt boolean>;
•Ý nghĩa :
thực hiện <câu lệnh> cho đến khi <bt
boolean> nhận giá trị TRUE

99/169
A1

hoặc: WHILE <bt boolean> DO


<câu lệnh>;

–Ý nghĩa: chừng nào <bt boolean> có giá


trị TRUE thì thực hiện <câu lệnh>.

100/169
A1
• Ví dụ 1: tìm UCLN của hai số
program USCLN;
uses crt;
var a, b, r :integer;
Begin
clrscr;
writeln('Nhap hai so can tim USCLN');
write('a = '); readln(a);
write('b = '); readln(b);
while b<>0 do
begin
r:= a mod b;
a:=b;
b:=r;
end;
writeln('Uoc so chung lon nhat cua a va b la: ', a);
readln;
end. 101/169
A1

ví dụ 2: Hiện tại tuổi cha nhiều gấp hơn 2 lần


tuổi con. Hỏi sau bao nhiêu năm nữa thì tuổi
cha đúng bằng hai lần tuổi con.

102/169
A1
Program Timtuoicha_con;
uses crt;
var cha, con, nam:integer;
Begin
clrscr; nam:= 0;
repeat
write('Nhap tuoi cha = '); readln(cha);
write('Nhap tuoi con = '); readln(con);
until (cha>2*con);
repeat
begin
cha:=cha +1;
con:=con+1;
nam:=nam +1;
end;
until cha=2*con;
writeln('Tuoi cha gap 2 lan tuoi con sau ',nam, ' nam
nua.') ;
103/169
A1
CHƯƠNG V: KIỂU DỮ LIỆU MẢNG
I.Khái niệm và định nghĩa:
•Mảng là một tập hợp gồm nhiều phần tử có
cùng kiểu dữ liệu.
•Các phần tử của mảng được lưu trữ liên tiếp
nhau, vị trí của phần tử gọi là chỉ số.
•Các yếu tố để xác định mảng:
– Tên mảng
– Kiểu dữ liệu của các phần tử
– Kiểu dữ liệu và phạm vi của chỉ số
104/169
Định nghĩa mảng:
A1 •

Type
<kiểu mảng>=array[n1..n2] of <kiểu Dữ
liệu>
Var
a:<kiểu mảng>;
Hoặc:
Var
A:array[n1..n2] of <kiểu dữ liệu>
Trong đó:
n1, n2: là hai hằng xác định phạm vi chỉ số 105/169
A1

• Ví dụ:
TYPE
Mang=array[1..10] of
integer;
VAR
A,B,C: Mang;
X,Y: array[1..25] of char;
106/169
A1

• Để truy cập đến từng phần tử của


mảng thì thực hiện thông qua biến
mảng và giá trị chỉ dẫn, được đặt
trong ngoặc vuông:
Ví dụ: A[3], X[10]

107/169
A1 II.Ví dụ: Viết chương trình tính tổng hai mảng 10 pt.

Type mang=array[1..10] of integer;


Var A,B,C:mang;
i,x:integer;
Begin
Write(‘nhap cac phan tu mang A:’);
For i:=1 to 10 do read(A[i]);
Write(‘nhap cac phan tu mang B:’);
For i:=1 to 10 do read(B[i]);
For i:=1 to 10 do C[i]:=A[i]+B[i];
write(‘Mang ket qua:’);
For i:=1 to 10 do write(C[i]:5);
End. 108/169
A1

II. Mảng hai chiều

• Ngoài cách sử dụng mảng một chiều còn sử


dụng mảng nhiều chiều  mảng của mảng

109/169
A1

• Khai báo:
Type
tên-mảng=array[n1..n2,m1..m2] of
kiểu-dữ liệu
Var
tên-biến:tên-mảng;
• n1, n2,m1,m2: là các hằng số để xác
định số hàng và số cột của mảng
110/169
A1

• Để truy cập đến phần tử của mảng hai


chiều, ta viết:

–Tên mảng[i] [j]


–Tên mảng[i,j]

111/169
A1

Ví dụ:

A= [ 1 2 3
2 3 5 ]
A[1,1] = 1 A[2,1] = 2
A[1,2] = 2 A[2,2] = 3
A[1,3] = 3 A[2,3] = 5

112/169
A1

• Để nhập DL cho mảng hai chiều ta dùng hai vòng


lặp for để duyệt theo chỉ số hàng và chỉ số cột
For i:=1 to n do
For j:=1 to m do
Begin
write(‘A[ ’ , i, ',' , j, ‘]= ‘);
readln(A[i,j]);
End;
113/169
A1

• Để in DL của mảng hai chiều ta viết:


For i:=1 to n do
Begin
For j:=1 to m do write(A[i,j]:6);
writeln;
End;

114/169
A1
CHƯƠNG VI: DỮ LIỆU KIỂU XÂU

I.Khái niệm
•xâu ký tự là kiểu dữ liệu gồm một chuỗi
các ký tự trong bảng mã ASCII

115/169
A1

II. Khai báo biến kiểu xâu


1. Khái báo tường minh:
VAR
VAR
Tên_biến :: String
Tên_biến String [n];
[n];

Trong đó:
VAR, string: là các từ khoá
Tên_biến: dài tối đa 10 ký tự viết liền nhau, bắt đầu bằng
chữ, sau đó có thể là số, dấu gạch dưới
n: kích thước biến 116/169
A1

•Ví dụ
Var Hodem: string[17];
Ten: string[7];
Dia_chi: String;

117/169
A1

2. Khái báo kiểu không tường minh:


TYPE
TYPE
Tên_kiểu == String[n];
Tên_kiểu String[n];
VAR
VAR
Tên_biến: Tên_kiểu;
Tên_biến: Tên_kiểu;
Ví dụ:
Type
xau = string[24];
Var
Hodem, ten: xau;

118/169
A1

3. Truy cập vào phần tử của xâu ký tự:

biến [i];
biến [i];

119/169
A1

II.Các thao tác với xâu ký tự


•Phép gán “:=“ : cho phép gán một
xâu ký tự cho một biến kiểu xâu
Ví dụ:
Ho:=“Nguyễn”
Ten:=“Thắm”

120/169
A1

•Phép cộng xâu: cho phép ghép nhiều


xâu thành một xâu duy nhất  “+”
Ví dụ:
=> Ho+Ten=“NguyễnThắm”

121/169
A1

•So sánh xâu ký tự(=,<,>,<>, <=, >=): xâu ký tự có


thể dùng trong các biểu thức quan hệ để thực hiện
so sánh. Nguyên tắc so sánh được thực hiện:
–Các ký tự của hai xâu được so sánh từng cặp
một từ trái qua phải theo giá trị trong bảng mã
ASCII
–Hai xâu ký tự có độ dài khác nhau xong số ký tự
giống nhau đến độ dài xâu ký tự ngắn nhất thì xâu
có độ dài ngắn hơn được coi là bé hơn
–Hai xâu bằng nhau nếu như bằng nhau cả về nội
dung và độ dài
122/169
A1

•Ví dụ so sánh hai xâu:


‘AB’ = ‘AB’
‘AB’ < ‘BB’

123/169
A1

III. Các thủ tục và hàm kiểu xâu


1. Thủ tục DELETE

cú pháp: Delete(St, Pos, Num);

Trong đó St: là biến xâu ký tự


Pos: Vị trí bắt đầu xoá số nguyên
Num: số ký tự cần xoá

124/169
A1
Công dụng:
Thủ tục này dùng để xoá khỏi xâu St một xâu
con chứa Num ký tự kể từ vị trí Pos trở đi.
-Nếu Pos lớn hơn chiều dài xâu thì không có ký
tự nào bị xoá bỏ
-Nếu Pos + Num vượt quá chiều dài của xâu St
thì chỉ có các ký tự nằm trong phạm vi của xâu
kể từ vị trí Pos bị xoá bỏ.
-Nếu Pos nằm ngoài khoảng 1..255, hệ thống
sẽ báo lỗi

125/169
A1

2. Thủ tục INSERT


cú pháp: Insert(st2, st1, Pos);

Trong đó: st2: biểu thức xâu ký tự chèn


st1: biến xâu
pos: Vị trí cần chèn (số nguyên)

126/169
A1

Công dụng;
Dùng để chèn xâu st2 vào vị trí pos của xâu
st1.

-Nếu Pos lớn hơn chiều dài xâu St1 thì St2 được
phép gán vào cuối xâu St1
-Nếu sau khi chèn xâu mà chiều dài vượt quá
chiều dài của xâu St1 thì những ký tự thừa bị xoá
bỏ và St1 chỉ chứa các ký tự bên trái nhất.
-Nếu Pos nằm ngoài khoảng 1..255, hệ thống sẽ
báo lỗi

127/169
A1

3. Thủ tục STR


cú pháp: Str(Value, st);
Trong đó:
Value: giá trị số nguyên hoặc thực
St: biến xâu
Công dụng:
Biến đổi giá trị số của Value thành xâu
ký tự để lưu kết quả vào biến xâu St.
128/169
A1

4. Hàm Length:
cú pháp: length(st);
Trong đó St là biểu thức xâu ký tự
Công dụng
Cho kết quả là chiều dài thực của biểu
thức xâu St.
Ví dụ
St:=‘123456789’
=> length(St) = 9 129/169
A1

VD1:Nhập vào họ tên, địa chỉ của một người và thông


báo ra màn hình họ tên và ký tự đầu của địa chỉ
vừa nhập.
Program vd;
Var ho_ten: string[20];
dia_chi: string;

130/169
A1

Begin
Writeln(‘Nhap ho ten’);
Readln(ho_ten);
Writeln(‘Nhap dia chi’);
Readln(dia_chi);
writeln(‘Thong tin vua nhap la:’);
Writeln(‘Ho ten la :’,ho_ten);
Writeln(‘Ky tu dau cua dia chi la :’,dia_chi[1]);
Readln;
End.
131/169
A1
CHƯƠNG VII: CHƯƠNG TRÌNH CON

I.Giới thiệu
Viết chương trình tìm ước chung lớn nhất
của bốn số: a, b, c, d

132/169
A1

II.Khái niệm chương trình con:


 Chương trình con là một đoạn chương trình có
chức năng giải quyết một số vấn đề mà chương
trình chính phải thực hiện nhiều lần ở những chỗ
khác nhau trong một chương trình lớn
 Việc tổ chức chương trình con có tác dụng làm
cho chương trình chính bớt dài dòng, khó hiểu

133/169
A1

III.Phân loại chương trình con:


•Trong Pascal cung cấp hai loại chương trình con:
thủ tục và hàm
–Hàm: là đoạn CTC khi thực hiện trả lại một giá trị có
kiểu xác định (integer, real,…) thông qua tên của hàm
=> do đó “tên hàm” có thể được sử dụng trong biểu
thức để tính toán.
–Hàm được khai báo với từ FUNCTION
Ví dụ gọi hàm: max1= lonnhat(a,b);

134/169
A1

–Thủ tục: là đoạn CTC chỉ thực hiện các thao tác mà
không trả lại giá trị sau khi thực hiện  không thể
dùng trong biểu thức.
– Thủ tục được khai báo với từ PROCEDURE

Ví dụ gọi thủ tục: nhap(a);

135/169
A1

•Khai báo: Theo Pascal chuẩn thì


phần khai báo CTC được khai báo
trong phần sau phần Var và trước từ
khoá Begin của chương trình

136/169
•Cấu trúc của chương trình có CTC như sau:
A1

PROGRAM ten_CT;
USE CRT, PRINTER;

VAR… {khai báo biến cho toàn chương trình}
PROCEDURE tên-thủ-tục(khai báo tham số);
BEGIN

END;
FUNCTION tên-hàm(khai báo các tham số): kiểu dữ liệu
BEGIN

END;
BEGIN {bắt đầu thân chươn trình chính}

END.
137/169
A1
IV.Định nghĩa hàm
 Hàm được khai báo theo mẫu sau:
Function Tênhàm(tênthamsố: kiểuthamsố) : kiểugiátrị ;
{ Các khai báo dùng riêng trong hàm }
Const ...
Type ...
Var ...
Begin
Các lệnh của hàm  thân hàm
tênhàm := biểu thức;
End;

 Một hàm có đầy đủ các thành phần như một chương trình.
Thân của hàm là các lệnh được đặt giữa hai từ khóa Begin và
End, kết thúc bằng dấu chấm phẩy ";"
138/169
A1

IV.Định nghĩa thủ tục


 Thủ tục được khai báo theo mẫu sau:

Procedure Tênthủtục( tênthamsố : kiểuthamsố ) ;


{ Các khai báo Const, Type, Var dùng trong thủ tục }
Begin
{Các lệnh của thủ tục  thân thủ tục }
End;
 Một thủ tục thực chất là một nhóm các lệnh được sắp xếp theo
một trình tự nhất định có tác dụng giải quyết một nhiệm vụ cụ thể
139/169
A1

IV.Sử dụng hàm và thủ tục:


 Để sử dụng các hàm và thủ tục trong chương trình
chính => Thực hiện lời gọi hàm hay thủ tục:
Lời gọi hàm: là “lệnh gán” giá trị của hàm cho
một biến đã khai báo
Lời gọi thủ tục: là một lệnh đơn giản . Do thủ
tục không trả về gía trị thông qua tên gọi của thủ
tục nên “tên thủ tục không thể đứng trong các
biểu thức”
140/169
A1

VI.Khai báo tham số cho chương trình con


• Chương trình con có hai loại tham số:
–Tham số biến  tham biến: được đặt sau từ khóa
Var trong phần khai báo tham số của CTC. CTC sẽ
thực hiện thay đổi giá trị của các tham số này.
–Tham số giá trị  tham trị: các tham số của CTC
khi khai báo không có từ Var đi kèm. CTC không có
quyền thay đổi giá trị của các tham số này mà chỉ
dùng giá trị của các tham số đó.
• Danh sách các tham số khác kiểu được đặt cách
nhau bởi dấu (;), cùng kiểu cách nhau bởi dấu(,)
141/169
A1

VII.Truyền tham số cho CTC


• Truyền tham số cho CTC là cơ chế
thay thế tương ứng tham số của CTC
bằng một giá trị cụ thể khi có lời gọi
tới CTC.
• Việc truyền tham số được thực hiện
“lặp đi lặp lại” tại những vị trí cần thiết

142/169
A1

• Tham số dùng cho CTC phải có :


–Kiểu vô hướng đã có sẵn:
integer,real,char…
–Kiểu được định nghĩa sẵn trong TYPE
- Khi truyền tham số phải tương ứng và nhất
quán với danh sách tham số hình thức đã khai
báo của CTC.
Lưu ý: Để lấy kết quả do CTC đem lại thì dùng
tham biến. Để không thay đổi giá trị do CTC
thì dùng tham trị 143/169
A1

Program tham_so;
Var x, y : integer ;{biến toàn cục X }
Procedure CTC( a : integer; var b :integer ) ;
Begin
a : =10 +a ; b: = 5 +b;
Writeln(a:6, b:6);
end;
Begin
x : =20 ; y:=10 ;
CTC(x, y);
Writeln(x: 6, y:6); readln;
End.
144/169
A1

VIII.Function và cách lựa chọn


• Đoạn CTC là function khi thỏa mãn:
–muốn nhận lại một kết quả,
–kết quả đó có kiểu vô hướng,
–tên CTC có dùng để viết trong các biểu thức
 Trong hàm tránh dùng các lệnh nhập hay in dữ liệu

145/169
A1

IX.Ghi chú:
•Biến toàn cục và biến địa phương:
–Biến được khai báo trong chương trình chính
là biến toàn cục  được dùng ở mọi nơi trong
chương trình
–Biến được khai báo trong CTC là biến địa
phương  chỉ được sử dụng trong phạm vi
CTC mà biến được định nghĩa

146/169
A1
VD: tầm tác dụng của biến

Program bien;
Var X : integer ;{biến toàn cục X }
Procedure CTC ;
Var X : integer ; {biến địa phương}
Begin X:=10 ; end;
Begin
X:=20 ;
Writeln(X) ;
CTC;
Writeln(X);
End.
147/169
A1

• Đệ quy: là khả năng mà một chương trình


CTC có lời gọi đến chính CTC đang định
nghĩa
Tính đệ qui được dùng trong các bài toán có
tính lặp
VD: Tính S = n!
Ta biết n! = 1 khi n = 0
n! =n.(n-1).(n-2)....1, hay n! = n (n-1)!
148/169
A1

Program giaithua;
Var n : byte ;{biến toàn cục X }
Giaithua:real;
Function GT( k : byte) : real ;
Begin
if k=0 then GT :=1
else GT := k*GT(k-1);
end;
Begin
Writeln(‘Nhap vao n = ’);readln(n);
GIAITHUA:=GT(n);
Writeln(N,’! = ’, GIAITHUA:5:3); readln;
End.
149/169
A1
CHƯƠNG VIII: KIỂU RECORD - FILE

I.Khái niệm kiểu Record


• Để tạo ra một kiểu cấu trúc dữ liệu với các
phần tử có kiểu khác nhau nhưng liên kết lại
được với nhau ta dùng kiểu bản ghi (Record)
• Record: cho phép mô tả một đối tượng với
các phần tử có kiểu khác nhau
• Ví dụ: Sinh_viên

150/169
A1
II. Mô tả kiểu Record

• Cú pháp: Cách 1:
TYPE
•Chú thích:
Tenkieu=Record –tenkieu: tên kiểu của
S1: T1; bản ghi được định nghĩa
S2: T2; –S1, S2, …: tên danh
… sách các trường được
End; định nghĩa
–T1, T2,…: tương ứng là
Var tenbien: tenkieu; các kiểu dữ liệu của các
trường S1, S2,…
151/169
A1

Cách 2:
Var
tenbien : Record
S1: T1;
S2: T2;

end;

152/169
A1

VD :
Var
HS: Record
Hodem: string[20];
Ten: string[7];
DV, DT, Dtin: integer;
DTB: real;
end;
153/169
A1

•Ví dụ 1: Định nghĩa kiểu dữ liệu địa


chỉ bao gồm: số nhà, tên phố, tên
tỉnh.
•Ví dụ 2: Định nghĩa kiểu dữ liệu mô
tả ngày tháng năm
•Ví dụ 3: Định nghĩa kiểu dữ liệu mô
tả nhân sự bao gồm: họ tên, ngày
sinh, giới tính, địa chỉ, lương
154/169
A1
III. Sử dụng Record

•Để truy cập vào một trường của bản


ghi thông qua tên biến, dấu chấm(.),
tên trường bản ghi cần truy cập đến

155/169
A1

• Ví dụ:

Readln(HS.Hodem);
Readln(HS.Ten);
Readln(HS.DV, HS.DT, HS. DTin);
Hs.DTB:=(HS.DV+ HS.DT+ HS.
DTin)/3;

156/169
A1

• Pascal cho phép truy nhập đến tất cả các


trường của bản ghi bằng cách dùng lệnh:

WITH biến bản ghi DO Câu lệnh;

Trong câu lệnh sau từ khoá DO ta


muốn truy nhập đến trường nào của biến bản
ghi thì chỉ cần viết tên trường đó

157/169
A1

• Ví dụ:

With HS do
begin
Readln(Hodem, Ten);
Readln(DV, DT, Dtin);
DTB:= (DV+ DT+ Dtin)/3;
end;

158/169
A1

• Các phép toán đối với kiểu Record:

–Gán  (:=) : cho phép copy nội dung của hai biến
kiểu bản ghi với nhau

–So sánh bằng (=): so sánh xem hai bản ghi kiểu
Record có bằng nhau hay không

159/169
A1

• Các phép tóan không dùng với kiểu bản ghi:

–Viết ra màn hình hay đọc từ bàn phím cả một biến


kiểu bản ghi
–So sánh các bản ghi: >, <, >=, <=
–Các phép toán số học: +, -, *, /
–Các phép toán logic: And, or, not, xor

160/169
A1
CHƯƠNG III: KIỂU DỮ LIỆU LIỆT KÊ VÀ ĐOẠN CON

I.Kiểu liệt kê:


2.Khai báo kiểu liệt kê:
•liệt kê các giá trị của kiểu cần định nghĩa
theo mẫu:
Type
tênkiểu=(giá trị1, giá trị2,…,giá trị n);
•ví dụ:
Type
phai=(nam,nu);
mausac=(xanh, do, tim, vang,nau);
161/169
A1
2. Các hàm kiểu liệt kê
• hàm ORD(tên): trả về số thứ tự của “tên”
trong kiểu liệt kê, các giá trị liệt kê được
đánh số bắt đầu từ 0
• hàm PRED(tên): trả về giá trị đứng trước
“tên” trong kiểu liệt kê
• hàm SUCC(tên): trả về giá trị đứng sau
“tên” trong kiểu liệt kê
• ví dụ:
ord(nam)=? ord(do)=?
pred(nu)=? succ(do)=? 162/169
A1
3. Nhập xuất kiểu liệt kê
• các giá trị kiểu liệt kê không thể nhập xuất
trực tiếp bằng hàm write hay read được 
phải thông qua các biến trung gian
• ví dụ:
mau: mausac;
readln(st);
if st=“xanh” then mau:=xanh;
if mau=xanh then writeln(“xanh”);

163/169
A1
II. Kiểu đoạn con
• đoạn con là một tập hợp các giá trị liên
nhau theo một thứ tự nhất định.
• được khai báo bằng cách xác định phạm vi
mà giá trị có thể nhận
• cú pháp:
TYPE tênkiểu=hằng1..hằng2;
VAR tênbiến:tênkiểu;
• Ví dụ:
TYPE chuhoa=‘A’..’Z’;
VAR t:chuhoa; 164/169
A1
CHƯƠNG IV: KIỂU TẬP HỢP
1.Khai báo:
• tập hợp gồm nhiều giá trị có chung kiểu hợp
thành
• chỉ tạo được tập hợp các phần tử kiểu cơ
bản : byte, char, logic, liệt kê
• số phần tử tối đa của tập hợp: 256
• Khai báo :
TYPE Kkytu=SET OF char;
Kchuhoa=SET OF ‘A’..’Z’;
165/169
A1
2. Các phép toán trên kiểu tập hợp
• phép gán  := : thực hiện gán một tập hợp cho
một biến được định nghĩa kiểu tập hợp
• Ví dụ: TapA:Kkytu;
TapB:Kchuhoa;
=> TapA:=[‘a’,’b’,’0’,’3’];
TapB:=[‘A’,’B’,’D’];
• Phép hợp  + : hợp của tập A và B là tập hợp
gồm tất cả các phần tử hoặc thuộc A hoặc thuộc
B
• Phép giao  * : giao của tập A và B là tập hợp
gồm các phần tử vừa thuộc A vừa thuộc B
• Phép hiệu  - : hiệu của tập A cho tập B là tập
các phần tử thuộc A nhưng không thuộc B 166/169

You might also like