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

Thuật Toán & Kỹ Thuật Lập Trình Pascal

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

Thuật Tốn & Kỹ Thuật Lập Trình Pascal
CHƯƠNG 1
CÁC VẤN ĐỀ CƠ BẢN CỦA THUẬT TỐN
TĨM TẮT LÝ THUYẾT
1. Định nghĩa
Thuật toán là một hệ thống chặt chẽ và rõ ràng các qui tắc nhằm xác định một dãy
các thao tác trên những đối tượng, sao cho sau một số hữu hạn bước thực hiện các thao
tác này, ta nhận được kết quả mong muốn.
2. Các đặc trưng của thuật tốn
Tính kết thúc: Một thuật tốn phải kết thúc sau một số hữu hạn thao tác.
Tính rõ ràng: Từng thao tác của thuật toán phải rõ ràng theo nghĩa: cùng thao
tác đó nếu nhiều người khác nhau thực hiện thì phải cho cùng một kết quả.
Tính phổ dụng: Cùng giải quyết một yêu câu, thuật toán nào sử dụng rộng rãi
hơn, tổng qt hơn thì tính phổ dụng cao hơn.
Tính hiệu quả: Cùng giải quyết một yêu cầu, thuật toán nào tốn kém ít hơn về số
lượng thao tác, về bộ nhớ, về thời gian thì tính hiệu quả cao hơn.
3. Biểu diễn thuật toán
Để biểu diễn thuật toán người ta thường dùng một trong hai phương pháp sau đây:
3.1. Phương pháp liệt kê các bước
Phương pháp này sử dụng một ngôn ngữ nào đấy, mô tả dãy thao tác thật cơ bản,
rõ ràng theo trình tự từ trên xuống dưới, từ trái qua phải, từ bắt đầu đến kết thúc đúng
theo giải thuật, nhằm đạt được yêu cầu đề ra.
Các thao tác cơ bản bao gồm:
- Bắt đầu
- Thông báo, yêu cầu
- Nhận giá trị ban đầu
- Gán giá trị (lưu giá trị vào một tên biến nào đấy)
- Thực hiện các phép toán số học, logic
- Kiểm tra điều kiện để khẳng định điều kiện đúng hay sai
- Chuyển khơng điều kiện, có điều kiện đến thao tác khác.
- Lặp lại thao tác nào đấy


1


Thuật Tốn & Kỹ Thuật Lập Trình Pascal
- Kết thúc
3.2. Phương pháp sơ đồ khối
Dùng các hình để thể hiện các thao tác, ghi thao tác vào giữa hình và dùng các
mũi tên để chỉ hướng thực hiện thao tác tiếp theo, tạo thành sơ đồ biểu diễn thuật toán,
thường dùng các hình sau:
Hình
Bắt đầu

i=1

False
a
Thao tác
Bắt đầu hay kết thúc thuật tốn

Thao tác tính tốn hoặc một phép gán

Rẽ nhán theo điều kiện

True

Đưa ra S

Nhập, xuất dữ liêu cho thuật toán


4. Một số thuật toán thường gặp
4.1.Hoán vị giá trị của X, Y
Bước 1: Dùng một tên biến trung gian TG và lưu X vào TG (Gán TG = X)
Bước 2: Gán X = Y (lưu giá trị Y vào X)
Bước 3: Gán Y = TG (lưu TG tức là X cũ vào Y)
Bước 4: Kết thúc
4.2.Tìm phần tử lớn nhất trong dãy A1, A2, .....AN
Dùng một biến Max lưu phần tử lớn nhất.
Bước 1: Nhập các giá trị N, A1, A2, .. ..., AN
Bước 2: Gán i = 1, gán Max = A1
Bước 3 : Gán i = i + 1 ( tăng giá trị của i lên 1)
2


Thuật Tốn & Kỹ Thuật Lập Trình Pascal
Bước 4: Nếu i > N thì Max là lớn nhất và đến bước 7, trái lại đến bước 5
Bước 5: Nếu Ai > Max thì Max = Ai
Bước 6: Quay lại bước 3
Bước 7: Kết thúc
4.3. Kiểm tra xem A có thuộc dãy X1, X2,.....,XN hay khơng?
(Thuật tốn tìm kiếm tuần tự)
Bước 1: Nhận các giá trị N, X1, X2, .. ..., XN
Bước 2: Gán i = 1
Bước 3: Nếu i > N thì sang bước bước 5, trái lại đến bước 4
Bước 4: Nếu A = Xi thì đến bước 5, trái lại tăng i lên 1 và quay lại bước 3
Bước 5: Nếu i > N thì thơng báo A không thuộc dãy X1, X2,.....,XN, trái lại
thông báo A là phần tử thứ i trong dãy.
Bước 6: Kết thúc
4.4. Tính tổng của dãy số X1, X2, ....., XN
Bước 1: Nhận các giá trị N, X1, X2, ....., XN

Bước 2: Gán S = 0
Bước 3: Gán i = 1
Bước 4: Nếu i > N thì sang bước 8, trái lại đến bước 5
Bước 5: Thực hiện S = S + Xi (cộng Xi vào S)
Bước 6: Gán i = i +1
Bước 7: Quay lại bước 4
Bước 8: Đưa ra tổng S
Bước 9: Kết thúc
4.5. Tìm ước số chung lớn nhất (ƯSCLN) của 2 số nguyên dương M và N
Bước 1: Nhập M, N
Bước 2: Nếu M = N thì sang bước 5, trái lại đến bước 3
Bước 3: Nếu M > N thì M = M - N, trái lại N = N - M
Bước 4: Quay lại bước 2
Bước 5: ƯSCLN của M và N là M
Bước 6: Kết thúc

3


Thuật Tốn & Kỹ Thuật Lập Trình Pascal
Biều diễn thuật toán ƯSCLN bằng sơ đồ khối
Begin
Nhập a, b

a == b

True

False
b=b-a


False

a>b
True

ƯSCLN
là a

a=a-b

End

5. Bài tập chương 1
5.1. Hãy biểu diễn các thuật toán trong mục 4.1 đến 4.3 bằng sơ đồ khối
5.2. Hãy trình bày thuật tốn tìm phần tử nhỏ nhất trong dãy số A1, A2,.. An
dưới dạng liệt kê và sơ đồ khối
5.3. Hãy trình bày thuật tốn tính tổng các số chẵn trong dãy số A1,A2,.. An
dưới dạng liệt kê và sơ đồ.
5.4. Hãy đề xuất một thuật toán để kiểm tra một số nguyên dương có phải là
một số nguyên tố hay không?
Gợi ý: N được gọi là số nguyên tố nếu nó chỉ chia hết cho 1 và chính nó. Nếu ta
tìm được một số k (2 <= k <= N-1) bất kỳ mà N chia hết cho k thì ta kết luận N khơng
phải là số nguyên tố, trái lại N là số nguyên tố.

4


Thuật Tốn & Kỹ Thuật Lập Trình Pascal
5.5. Hãy đề xuất một thuật toán kiểm tra một số nguyên dương có phải là số

chính phương hay khơng?
Gợi ý: Theo định nghĩa, N đươc gọi là số chính phương nếu căn bậc hai của N là
một số nguyên <=> N = k2 (k là một số nguyên). Như vậy ta đi tìm số k nếu tìm được k
thì N là chính phương, trái lại N khơng phải là chính phương.
5.6. Thiết kế thuật tốn kiểm tra một số ngun dương có phải là số đối xứng
hay không?
Gợi ý: Thực hiện đảo ngược số cần kiểm tra, sau đó so sánh số đảo ngược với số
cần kiểm tra, nếu bằng nhau thì kết luật số đó là số đối xứng, trái lại kết luận không phải
là đối xứng.
VD: 2435 số đảo ngược là 5342
5.7. Thiết kế thuật tốn tính tổng các chữ số của một số nguyên dương.
Gợi ý: Tách từng chữ số của số nguyên, mỗi lần tách được ta cộng số tách được vào
biến tổng TG, xuất phát TG = 0.
- Để tách được chữ số cuối cùng của số nguyên ta chia số nguyên đó cho 10 lấy phần dư.
- Để loại bỏ chữ số cuối cùng của số nguyên ta chia số nguyên đó 10 lấy phần nguyên.
VD: 124 mod 10 = 4, 124 div 10 = 12;
5.8. Cho dãy số A1, A2, ...., An, Trình bày thuật tốn sắp xếp lại dãy này theo
thứ tự khơng giảm.
Gợi ý:
Bước 1: Nhập dãy A1, A2, ...., An
Bước 2: Gán i = 1
Bước 3: Nếu i >= N thì dãy đã được sắp xếp, đến bước 7, trái lại sang bước 4
Bước 4: Tìm phần tử nhỏ nhất trong dãy từ Ai đến An giả sử đó là Ak
Bước 5: Hoán vị giá trị giữa Ai và Ak
Bước 6: i = i+1, quay lại bước 3
Bước 7: Kết thúc
5.9. Trình bày thuật toán kiểm tra số lần xuất hiện của số A trong dãy số X1, X2......Xn
Gợi ý: Nếu A = Xi (i =1 đến N) thì tăng số lần xuất hiện của A lên 1

5



Thuật Tốn & Kỹ Thuật Lập Trình Pascal
CHƯƠNG 2
CÁC KIỂU DỮ LIỆU CƠ BẢN & CÁC PHÉP TOÁN TRÊN CÁC DỮ LIỆU
TÓM TẮT LÝ THUYẾT
1. Các kiểu dữ liệu cơ bản:
Đó là các kiểu dữ liệu mà trên cơ sở các kiểu này ta xây dựng các kiểu phức tạp hơn.
1.1. Kiểu số nguyên:
Gồm các số nguyên nằm trong phạm vi nào đấy tuỳ theo tên kiểu:
Tên kiểu DL trong Pascal

Byte
ShortInt
Integer
Word
LongInt

Số byte
1
1
2
2
4

Từ
Từ
Từ
Từ
Từ


Miền giá trị
0 đến 255
-128 đến + 127
- 32768 đến + 32767
0 đến 65535
-2147483648 đến 2147483647

1.2. Kiểu số thập phân
Gồm các số thập phân hữu hạn nằm trong phạm vi nào đấy tuỳ theo tên kiểu
Tên kiểu DL trong Pascal

Single
Real
Double
Extended
Comp

Số byte
4
6
8
10
8

Miền giá trị
Từ 1.5E-45 đến 3.4E+38
Từ 2.9E-39 đến 1.7E+38
Từ 5.0E-324 đến 1.7E+308
Từ 3.4E-4932 đến 1.1E+4932

Từ -9.2E+18 đến 9.2E+18

Chú ý: Trong Pascal thường dùng kiểu Real: là kiểu số thực 6 byte có giá trị
tuyệt đối nằm trong khoảng từ 2.9E-39 đến 1.7E+38, với phần định trị 11 đến 12 chữ số
có nghĩa.
Có hai cách viết số thập phân:
- Viết dạng dấu phẩy tĩnh: viết như thông thường nhưng thay dấu phảy bằng dấu chấm.
- Viết dạng dấu phẩy động: viết số thập phân dưới dạng luỹ thừa 10: m × 10n, trong đó m
là số thập phân, n là số nguyên. Sau đó viết m ở dạng dấu phẩy tĩnh, cịn 10n được thay
bằng En.
Ví dụ: số -102,4567 được viết ở dạng dấu phẩy tĩnh là -102.4567, được viết ở dạng
dấu phẩy động là -1.024567E+2 hoặc -1024.567E-1.

6


Thuật Tốn & Kỹ Thuật Lập Trình Pascal
1.3.Kiểu ký tự
- Tên kiểu: Char(một ký tự 1 byte), trong Pascal có 256 ký tự, mỗi ký tự được mã hoá
bởi một số nguyên từ 0 đến 255.
- Cách viết hằng ký tự: Hằng ký tự là một ký tự được viết giữa cặp dấu nháy đơn. VD: 'A'
1.4.Kiểu Logic
- Tên kiểu Boolean, gồm 1 byte và chỉ nhận giá trị TRUE hoặc giá trị FALSE
2. Các phép toán
2.1.Phép toán số học
Trên các toán hạng kiểu số (nguyên hoặc thực) bao gồm 4 phép toán cơ bản như:
Phép toán

Viết theo PASCAL


Cộng

+

Trừ

-

Nhân

*

Chia

/

Chú ý: -Trong Pascal phép chia (/) trả lại kết quả thuộc kiểu Real.
- Đối với số nguyên, phép toán div chia lấy phần nguyên và phép mod chia lấy phần dư.
2.2.Các phép toán so sánh
Phép toán

Viết theo PASCAL

Bằng
=
Khác
<>
Nhỏ hơn
<
Lớn hơn

>
Nhỏ hơn hoặc bằng
<=
Lớn hơn hoặc bằng
>=
2.3.Các phép tốn logic
Có 4 phép toán Logic trên kiểu dữ liệu Boolean
Phép toán
Viết theo PASCAL
Phủ định
Not
Hội, và
And
Tuyển, hoặc
Or
Tuyển loại trừ
Xor
Kết quả các phép toán logic theo bảng sau (X, Y là hai dữ liệu logic)
X

Y

Not X

X And Y
7

X Or Y

X xor Y



Thuật Tốn & Kỹ Thuật Lập Trình Pascal
TRUE
TRUE
FALSE
FALSE

TRUE
FALSE
TRUE
FALSE

FALSE

TRUE
FALSE
FALSE
FALSE

TRUE

TRUE
TRUE
TRUE
FALSE

FALSE
TRUE
TRUE

FALSE

3. Biểu thức
3.1.Định nghĩa
Biểu thức là một cơng thức tính tốn, trả lại 1 kết quả thuộc về một kiểu dữ liệu chuẩn nào đó.
3.2.Cách viết biểu thức
Trong các ngơn ngữ lập trình, qui định mỗi biểu thức chỉ được viết trên một dịng,
ngồi các dữ liệu và dấu phép tốn viết theo qui định, chỉ được dùng cặp dấu () để ưu
tiên tính các biểu thức trong ngoặc trước.
Ví dụ:Biểu thức số viết theo toán học

( x + y )[ ( x − 2) + ( y + 3)]
2x + y

được viết theo NNLT ((x + y) *((x - 2) + (y +3))) / (2 *x +y)
Biểu thức logic y < x < 100 viết là (y < x) and (100 > x)
4. Bài tập chương 2
4.1.Hãy viết các số sau ở dạng dấu phẩy tĩnh và động
a/
-12,345
b/
0,1231
c/
-234,021345
4.2. Hãy xác định kết quả của các phép tính sau
a/
145 div 10 = ?
b/
215 mod 10 =?
c/

(120 +1 * 10 ) / 10 * 2 = ?
d/
-30.2E-1 * 0.1E+1 = ?
e/
( 7 > 6) and ( 10 <= 10) and ( 6 > 6 ) = ?
f/
((10- 2 > 7 ) or ( 4 > 5)) and ( TRUE = TRUE) = ?
4.3. Hãy viết các biểu thức sau đây theo qui định của Pascal
a/ ( 12+x2 )[ (y+1)+ x2 ]
b/ a ≤ b ≤ c ; a = b = c ; a ≥ b + c ≥ a - d
c/

CÁC KHÁI

( x + y )2 z [ (12 − z ) + x ]
( x + 1) y
z − 3y

CHƯƠNG 3
NIỆM CƠ BẢN CỦA NGƠN NGỮ

PASCAL
TĨM TẮT LÝ THUYẾT
8


Thuật Tốn & Kỹ Thuật Lập Trình Pascal
1. Từ khố
Pascal có một số từ vững riêng được gọi là từ khoá (key word). Với những từ
khoá này người dùng phải viết đúng cú pháp, khơng được dùng nó vào việc khác, khơng

được đặt tên biến trùng với từ khố.
Chú ý: Trong Pascal không phân biệt chữ thường và chữ hoa(In), các từ khố có
thể viết bằng chữ thường và hoa điều được.
2. Các tên chuẩn
Các tên chuẩn là tên một số đối tượng (biến, hằng, kiểu, hàm, thủ tục) mà ngơn
ngữ lập trình đã định nghĩa trước. Khi dùng chúng khơng cần phải khai báo. Các tên
chuẩn có thể định nghĩa lại, tuy nhiên nên để chúng như đã được đặt để tránh nhầm lẫn.
VD: Integer, Char, Read, Writeln, PI, Cos.....
3. Tên tự đặt
Các tên tự đặt là các tên mà người dùng đặt cho các đối tượng (hằng, biến, kiểu,
chương trình con) trong chương trình của mình. Chúng phải được khai báo trước khi
dùng. Các tên tự đặt phải tuân theo các qui tắc sau:
- Chỉ được dùng 3 loại ký tự là chữ cái, chữ số và dấu nối chân
- Ký tự đầu tiên phải là ký tự chữ cái
- Khơng được trùng với các từ khố
- Độ dài của tên không vượt quá 127 ký tự
4. Chương trình mẫu
Trong Pascal đã có sẵn một số chương trình con thường gặp được gọi là các
chương trình mẫu. Các chương trình mẫu được quản lý trong các thư viện, trước khi
dụng các chương trình mẫu phải khai báo sử dụng thư viện chứa chúng.
Dưới đây là một số chương trình mẫu thường dùng:
Tên chương trình mẫu

Nhiệm vụ chươngtrình

Abs(y)

Lấy giá trị tuyệt đối của y

Sqr(y)


Tính bình phương của y

Sqrt(y)

Tính căn bậc hai của y

Chr(n)

Trả lại ký tự có mã ASCII bằng n

Ord(ch)

Trả lại mã ASCII của ký tự ch

Upcase(c)

Trả lại chữ cái in hoa của ký tự c
9


Thuật Tốn & Kỹ Thuật Lập Trình Pascal
Clrscr

Xố màn hính

GotoXY( x, y)

Đưa con trỏ Dos đến toạ độ x, y


TextColor (mode )

Thiết lập mầu và chế độ hiển thị ký tự

TextBackground ( col )

Thiết lập màu nên của ký tự

Readkey

Đọc một ký tự từ bàn phím

KeyPressed

Kiểm tra bàn phím có nhấn hay không

Delay(ms)

Làm CPU ngừng làm việc trong ms

5. Lời giải thích và dấu chấm phẩy
Các lời giải thích được đưa vào bất kỳ vị trí nào trong chương trình để cho
chương trình dễ đọc, dễ hiểu hơn mà khơng ảnh hưởng đến phần khác. Lời giải thích
được đặt giữa hai dấu ngoặc móc { } hoặc giữa hai cụm dấu (* noi dung *).
Dấu chấm phẩy ( ; ) để làm dấu ngăn cách giữa các câu lệnh trong chương trình
6. Cấu trúc chung của chương trình Pascal
Một chương trình Pascal đầy đủ sẽ gồm các phần như sau:
6.1.Tiêu đề của chương trình
Phần này bao giờ cũng bắt đầu bằng từ khoá PROGRAM, tiếp theo sau là tên do
người lập trình đặt sao cho nó có một ý nghĩa nào đó đối với cơng việc của chương

trình,cuối cùng kết thúc bằng dấu chấm phẩy;
VD:

Program

Giai_Phuong_Trinh_Bac_Hai;

Phần tiêu đề có thể có hoặc khơng phụ thuộc vào người lập trình.
6.2.Phần khai báo
Phần này có nhiệm vụ khai báo thư viện, hằng, kiểu dữ liệu, biến, chương trình
con. Mỗi mục khai báo ứng với một từ khoá.
Uses CRT; { khai báo thư viện }
Const ........{ khai báo hằng }
Type...........{ mô tả kiểu dữ liệu }
Var ..........{ khai báo chung }
Procedure ............... { khai báo thủ tục }
Function ..................{ khai bào hàm }
Các mục khai báo trên có thể có hoặc khơng tuỳ thuộc vào từng bài toán cụ thể.

10


Thuật Tốn & Kỹ Thuật Lập Trình Pascal
6.3.Phần thân chương trình
Phần này bao giờ nằm gọn trong cặp từ khố BEGIN ................ END sau từ
khoá End là dấu chấm báo hiệu kết thúc chương trình. Khác với các phần khác phần này
bắt buộc phải có đối với mọi chương trình.
Cấu trúc chung của một chương trình viết bằng Pascal như sau:
Program .............
Uses ..............

Const ...............
Type .............
Var ................
Procedure .......................
Function ....................
BEGIN
Các câu lệnh
END.
7. Khai báo biến, lệnh gán
a. Biến
Biến là đại lượng có thể thay đổi giá trị trong quá trình chương trình chạy. Mỗi
biến được khai báo với một tên ( tên biến ) và kiểu dữ liệu xác định. Các biến được khai
báo trong phần khai báo và sau từ khoá Var
Cú pháp:
Var
Ten_Bien : Kieu_du_lieu ;
- Dấu hai chấm bắt buộc phải có để ngăn cách giữa phần tên biến và phần kiểu dữ
liệu, cuối dòng kết thúc bằng dấu chấm phẩy.
- Nếu có nhiều biến cùng kiểu dữ liệu thì có thể khai báo cùng một dịng bằng
cách thêm vào dấu phẩy để ngăn cách giữa hai tên biến.
VD:

Var

X1, X2 : Real ;

A, B, C : Integer ;

b. Lệnh gán
Lệnh gán dùng để gán giá trị của một hằng, một biểu thức cho một biến. Phép gán

được ký hiệu :=
Cú pháp: Tên_Biên := Biểu_thức ;
11


Thuật Tốn & Kỹ Thuật Lập Trình Pascal
VD:

d := 12; X := d * 3 /1.5 ;

Chú ý: Bên trái của lệnh gán chỉ có thể là biên, bên phải của phép tốn gán có thể là
hằng, là biên, là biểu thức.
Khi thực hiện lệnh gán thì kiểu dữ liệu của biến bên vế trái phải giống hoặc bao
được kiểu dữ liệu bên vế phải.
8. Bai tập chương 3
8.1.Hãy viết 15 từ khoá trong Pascal
8.2.Hãy đưa ra 5 tên chuẩn trong Pascal và ý nghĩa của chúng
8.3.Hãy cho biết trong các tên sau, tên nào không đúng qui tắc trong Pascal và
giải thích tại sao ?
a
d.
g.
8.4.Hãy viết

Toi_Thu
b. Ten-bien
c.
Bien1
2Bien
e.

BeGin
f.
_Bien1
Bien*a
h.
Bien@
i.
Day LaBien
chương trình in ra giữa màn hình dịng chữ Well come to Pascal

với màu đỏ và nhấp nháy.
Gợi ý: Sử dụng hàm Gotoxy, TextColor
8.5.Hãy viết chương trình in ra màn hình các hình sau:
*

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

*
*
8.6.Hãy viết chương trình tính giá trị căn bậc bốn của 21
8.7.Hãy viết chương trình tính biểu thức X =

*

*

*

*

*
*
*
*

12 + 34
( 23 + 0,5) *1.2

8.8.Hãy viết chương trình đọc 4 số từ bàn phím, lưu trữ vào các biến a, b, c, d
sau đó tính tổng của chúng và in kết quả ra màn hình.
8.9.Hãy kiểm tra và sửa lỗi trong chương trình sau (khơng dùng máy tính).
VAr
x: Integer ;
BeGIn
x := 8 / 2 ;
end.


12


Thuật Tốn & Kỹ Thuật Lập Trình Pascal
8.10.Hãy xác định kết quả hiển thị trên mành hình sau khi thực hiện chương
trình sau:(khơng sử dụng máy tính)
Uses CRT;
Var
X: Real;
Begin
X := 1.2 ;
Clrscr ; gotoxy(30, 13 );
TextColor (RED + BLINK ); Write( ' X*2 = ' , X*2:8:2);
ReadKey;
End.
8.11.Viết chương trình tính giá trị trung bình của ba số a, b, c ( a,b,c là các số
dương và được nhập vào từ bàn phím)
8.12.Hãy viết chương trính hốn vị giá trị của hai biến a, b
8.13.Hãy viết chương trình để thực hiện các công việc sau;
- Nhập một số thuộc bảng mã ASCII, in ra ký tự đại diện cho số đó
- Nhập một ký tự từ bàn phím, hiển thị mã ASCII của ký tự đó
Gợi ý: Sử dụng hàm Ord và Chr để chuyển đổi từ ký tự sang số và ngược lại
8.14.Hãy xác định kết quả hiển thị trên màn hình sau khi thực hiện chương trình
sau:(khơng sử dụng máy tính)
Uses CRT;
Var ch : Char ;
Begin
Clrscr;
ch := 'A' ;
Writeln ( Chr ( Ord(ch) - 33));

Readln;
End.
8.15.Hãy viết chương trình tính chu vi và diện tích của đường trịn, hình vng.

13


Thuật Tốn & Kỹ Thuật Lập Trình Pascal
CHƯƠNG 4
CẤU TRÚC RẼ NHÁNH
TÓM TẮT LÝ THUYẾT
1. Cấu trúc if ... then
Dạng lệnh:
Dạng 1:

If điều_kiện then câu_lệnh_1;

Dạng 2:

If điều_kiện then

câu_lệnh_1

Else

câu_lệnh_2 ;

Trong đó điều kiện là một biểu thức logic còn câu lệnh có thể là câu lệnh đơn
hoặc câu lệnh phức.
Máy thực hiện:

Gặp dạng 1 máy kiểm tra giá trị của biểu thức điều_kiện, nếu đúng thì thực hiện
câu_lệnh_1.
Gặp dạng 2 máy tính kiểm tra giá trị của biểu thức điều_kiện, nếu đúng thì thực
hiện câu_lệnh_1, sai thực hiện câu_lệnh_2.
Chú ý:
- Trong dạng 2 trước từ khố Else khơng có dấu chấm phẩy.
- Các cấu trúc If có thể lồng nhau:
VD:
If A > B then if A > C then Writeln ( ' A is max ') Else Writeln (' A is not max');
<=>
If A> B then
If A > C then
Writeln ( ' A is max ')
Else
Writeln (' A is not max');
2. Cấu trúc Case .. Of
Cú pháp:
Dạng 1:
case biến_chọn of
gt1 : cl1;
gt2 : cl2;
..............
gtn : cln
end;
14


Thuật Tốn & Kỹ Thuật Lập Trình Pascal
Dạng 2:
case biến_chọn of

gt1 : cl1;
gt2 : cl2;
..............
gtn : cln
Else cln+1;
end;
Trong đó:
- Case, of, end, else là các từ khoá của cấu trúc
- cl1, cl2, .. cln+1 là các câu lệnh, nó có thể là các câu lệnh đơn hoặc câu lệnh phức.
- Biến chọn là biến có kiểu dữ liệu số nguyên, ký tự, Boolean
- gt1, gt2, ..., gtn là các danh sách giá trị có thể có của biến chọn, mỗi phần từ của danh
sách có thể là biểu thức, hằng, miền.
Hoạt động:
Sự thực hiện các câu lệnh cl1, cl2, ..., cln trong Case-Of phụ thuộc vào giá trị của
biến chọn.
- Nếu gti là danh sách đầu tiên chứa giá trị của biến chọn thì máy sẽ thực hiện câu lệnh
cli sau đó thốt khỏi cấu trúc.
- Trong trường hợp khơng có danh sách nào chứa giá trị của biến chọn thì :
+ Với dạng 1 máy sẽ khơng thực hiện câu lệnh cli nào và sẽ thoát khỏi cấu trúc.
+Với dạng 2 máy sẽ thực hiện câu lệnh cli+1 rồi thoát khỏi cấu trúc.
VD:
Case today of
2..4,7: writeln(' hoc Pascal ');
5,6: writeln(' hoc tieng Anh')
else

writeln(' di chơi ');

end;


15


Thuật Tốn & Kỹ Thuật Lập Trình Pascal
3.Bài tập chương 4
3.1.Viết chương trình kiểm tra số a ( a được nhập từ bản phím) là số âm hay số
dương.
3.2.Viết chương trình tính giá trị tuyệt đối của số b ( b được nhập từ bàn phím)
"khơng dùng hàm Abs"
3.3.Vẽ lư đồ thuật tốn và viết chương trình để tìm số lớn tnhaat trong ba số
a,b,c (a, b, c được nhập vào từ bàn phím)
3.4.Hãy xác định kết quả hiển thị trên màn hình sau khi thực hiện chương trình
sau ( khơng sử dụng máy tính):
PROGRAM Ten_chuong_trinh ;
USES Crt;
VAR
a: Integer;
BEGIN
a: = 10;
a:= a - 10 0 mod 2 ;
if a < 0 then
writeln( ' a < 0 ' )
else writeln ( ' a> 0' );
Readln;
END.

3.5.Viết chương trình giải hệ phương trình sau:
a1x + b1y = c1
a2x + b2y = c2
3.6.Viết chương trình giải và biện luận phương trình Ax2 + Bx +C =0

3.7.Chương trình kiểm tra ba số nguyên dương a, b,c (a, b,c được nhập từ bàn
phím) có thể tạo thành 3 cạnh của một tam giác hay không? nếu là 3 canh của
một tam giác chương trình sẽ xác định tam giác đó thuộc tam giác cân, đều,
vng, thường.

16


Thuật Tốn & Kỹ Thuật Lập Trình Pascal
PROGRAM Kiem_tra_tam_giac;
USES Crt;
VAR
a, b, c: word;
BEGIN
Clrscr; {xố màn hính}
write(' nhap so thu nhat ') ; Readln(a);
write(' nhap so thu hai ') ; Readln(b);
write(' nhap so thu ba ') ; Readln(c);
if (a< b + c) and (b < c+ a) and (c < a+b) then
begin
writeln( ' la 3 canh cua 1 tam giac ');
if (a = b) and (b = c) then writeln( ' la tam giac deu ')
else if( a = b) or (b = c) or (a = c) then
writeln( ' la tam giac can ')
Else if (a*a = b*b + c*c) or (b*b = a*a + c*c) or ( c*c = b*b + a*a) then
writeln( ' la tam giac vuong ')
Else

writeln(' la tam giac thuong ');


end
else writeln(' khong the la 3 can cua 1 tam giac ');
Readln; { dừng màn hình đến khi nhấn phím enter}
END.

3.8.Viết chương trình tính số tiền điện phải trả của một hộ gia đình có n số điện
( n là một số nguyên dương và được nhập từ bàn phím) theo qui tắc sau:
- Nếu n <= 100 thì tiền = n * 500
- Nếu 100 < n <= 150 thì tiền = 50000 + (n - 100) * 900
- Nếu 150 < n thì tiền = 95000 + (n - 150) * 1500
3.9.Viết chương trình nhập một số nguyên từ 0 đến 10 rồi đưa ra tiếng anh của
số đó (VD nhập vào là 1 thì đưa ra One).
3.10.Chương trình nhập một số nguyên n (1<= n <= 7) viết ra màn hình tên của
ngày trong tuần tương ứng với số n ( nếu n = 0 thi in ra chủ nhật).

17


Thuật Tốn & Kỹ Thuật Lập Trình Pascal
PROGRAM Ngay_trong_tuan;
USES Crt;
VAR

n: Byte;

BEGIN
Clrscr;
Write( ' nhap mot so tu 1 den 7 '); Readln(n);
case n of
1: writeln( ' chu nhat ');

2: begin writeln (' thu hai '); writeln(' chao co '); end ;
3: writeln( ' thu ba ');
4: writeln(' thu tu');
5: writeln( ' thu nam')
6: writeln(' thu sau ');
7: begin writeln(' thu bay'); writeln(' cuoi tuan '); end
else

writeln( ' nhap so khong thich hop ');

end;
END.

18


Thuật Tốn & Kỹ Thuật Lập Trình Pascal
CHƯƠNG 5
CẤU TRÚC LẶP
TÓM TẮT LÝ THUYẾT
1. Lặp xác định
Lặp các định là lặp với số lần được biết trước thông qua biểu thức nào đó.
Cú pháp
Dang 1: For biến_chạy := cận_dưới To cận_trên Do Câu_lệnh ;
Dạng 2: For biến_chạy := cận_trên Downto cận_dưới Do Câu_lệnh ;
Hoạt động:
Dạng 1:
B1: Gán giá trị cận_dưới cho biến_chạy
B2: Kiểm tra điều kiện (Biên_chạy > cận_trên ) ?
Nếu đùng sang B4, trái lại đến B3

B3: thực hiện câu_lệnh

một lần sau đó tự động tăng giá trị của

biến_chạy lên một đơn vị và quay lại B2
B4: Kết thúc cấu trúc
Dạng 2:
B1: Gán giá trị cận_trên cho biến_chạy
B2: Kiểm tra điều kiện (Biên_chạy < cận_dưới ) ?
Nếu đúng sang B4, trái lại đến B3
B3: thực hiện câu_lệnh một lần sau đó tự động giảm giá trị của
biến_chạy đi một đơn vị và quay lại B2
B4: Kết thúc cấu trúc
Chú ý:
- Trong cấu trúc lặp xác định giá trị cân_dưới và cân_trên có thể là biểu thức, hằng
nhưng giá kiểu dữ liệu của nó phải giống với kiểu dữ liệu của biến_chạy.
- Số lần lặp câu_lệnh = Abs( cận_trên - cận_dưới)
2. Lặp không xác định
Lặp không xác định là số lần lặp khơng biết trước nhưng biết rằng q trình lặp
phải thoả mãn một điều kiện nào đó.

19


Thuật Tốn & Kỹ Thuật Lập Trình Pascal
Cú pháp:
Dạng 1:

while


điều_kiên_lăp do

Dạng 2:

câu_lệnh_cần_lặp ;

Repeat câu_lệnh_cần_lặp ; Until

điều_kiện_kết_thúc ;

Trong đó điều_kiện_lặp là biểu thức logic
Máy thực hiện: Máy làm theo đùng nghĩa mô tả của cấu trúc.
Dạng 1: Chừng nào điều kiện cịn đúng thì cịn lặp ( điều kiện sai thì kết thúc)
Dạng 2: Lặp cho đến khi điều kiện kết thúc đúng (TRUE)
chú ý:
- Với dạng 2 số lần lặp được thực hiện ít nhất là một lần, cịn dạng 1 thì ít nhất là bằng 0.
- Nếu q trình lặp khơng bao giờ kết thúc thì sẽ dẫn đến hiện tượng treo máy tính, trong
trường hợp đó chúng ta sử dụng tổ hợp phím Ctrl + break để kết thúc chương trình một
cách bắt hợp pháp.
3. Bài tập chương 5
3.1.Hãy viết các chương trình để tính tổng các dẫy sau:
a.

1 + 2+ 3 +....+ N

b. 1 - 2 + 3 - 4 + ....................... + (-1)n-1 N
c.

1
+

1

1
1
+ . .......... +
2
2

1
N

d. Tổng các số chẵn trong N số tự nhiên đầu tiên
(N được nhập từ bàn phím)

20


Thuật Tốn & Kỹ Thuật Lập Trình Pascal
3.2. Viết chương trình nhập một số ngun dương từ bàn phím và kiểm tra số
đó có phải là số nguyên tố hay không ? "N là số nguyên tố nếu N chỉ chia hết
cho 1 và chính nó"
3.3. Viết chương trình nhập một số nguyên dương từ bàn phím và kiểm tra số
đó có phải là số chính phương hay khơng ? " N là số chính phương nếu căn bậc
hai của N là một số ngun"
3.4. Chương trình cho dịng chữ "Tin Hoc ESTIH" chạy từ bên trái sang bên
phải của màn hình, vừa chạy vừa đổi màu và chạy cho đến khi người dùng bấm
một phím bất kỳ thì chương trình kết thúc.
Program Dong_chu;
uses Crt, Dos;
var i : byte;

Begin
while not KeyPressed do
begin
i := i+1;
clrscr;
if i >= 80 then i :=1;
gotoxy(i,12);
TextColor(i mod 16);
Write(' Tin Hoc ESTIH');
Delay(100);
end;
End.

3.5.Hãy sửa chương trình trong mục 3.4 để dòng chữ chạy từ trên xuống dưới,
từ phải qua trái, từ góc TopLeft đến góc BottomRight của màn hình.
3.6.Hãy viết chương trình tìm Ước số chung lớn nhất của hai số nguyên
3.7.Hãy viết chương trình nhập một số ngun dương từ bàn phím và kiểm tra
số đó có phải là số hồn hảo hay khơng ?
3.8.Hãy viết chương trình tính tổng các chữ số của một số ngun dương.
3.9.Hãy viết chương trình nhập một số nguyên dương từ bàn phím và kiểm tra
số đó có phải là số đối xứng hay không ?
Gợi ý: Nếu N là số đối xứng thì N = M (M là số đảo ngược của N). VD 142 đảo ngược
là 241.

21


Thuật Tốn & Kỹ Thuật Lập Trình Pascal
CHƯƠNG 6
KIỂU DỮ LIỆU MẢNG

TĨM TẮT LÝ THUYẾT
1.Khai báo mảng
Có hai cách khai báo mảng
a/ Khai báo thông qua khai báo kiểu
Cú pháp:
Type
Tên_kiểu = Array[Csd..csc] Of kiểu_thành_phân;
Var
Tên_biên : Tên_kiểu;
b/ Khai báo trực tiếp
Tên_biến_mảng : Array[csd..csc] Of kiểu_thành_phần;
2.Cách truy cập
Để truy cập đến từng phần tử của biến mảng, ta viết như sau:
Tên_biến_mang[chỉ_số]
Thông thường, người ta dùng biến có cùng kiểu với chỉ số của mảng để truy cập đến các
phần tử của mảng.
3.Cấp phát bộ nhớ
Số ô nhớ (bytes) cấp cho mảng phụ thuộc vào kích thước và kiểu thành phần của
mảng. Số này tăng rất nhanh khi tăng số chiều của mảng. Thông thường, người tachir
dùng mảng một chiều (véc tơ) hoặc mảng hai chiều (ma trân).
4.Các xử lý thường gặp
- Nhập mảng, đưa các phần tử của mảng ra màn hình.
- Tìm kiếm các phần tử thoả mãn điều kiện cho trước
- Tìm phần tử lớn nhất, bé nhất
- Tìm vị trí của phần tử thoả mãn điều kiện nào đấy.
- Đổi chỗ, sắp xếp các phần tử.
- Tính tốn trên các phần tử

22



Thuật Tốn & Kỹ Thuật Lập Trình Pascal
5. Các ví dụ
5.1.Chương trình nhập n số từ bàn phím vào mảng, sau đó tính tổng các số
dương đã nhập và In tổng đó ra màn hình.
Uses Crt;
Var
A:Array[1..100] of real;
i, n: byte;
tg : real;
Begin
Clrscr;
Write(' Nhap so phan tu n = '); Readln(n);
for i:= 1 to n do
begin
Write(' nhap gia tri cho phan tu A[', i,'] = ');
Readln(A[i]);
end;
for i :=1 to n do
if A[i] >0 then tg := tg + A[i];
Write(' Tong cac so >0 la ' , tg:8:2);
Readln;
End.

5.2.Chương trình nhập N số từ bàn phím vào mảng B, sắp xếp mảng B thành
dãy khơng giảm theo thuật tốn Selection_sort rồi in ra màn hình.
Program Selection_sort;
Uses Crt;
Var
i, j,n, min: Byte; A:array[1..100] of real;

temp : real;
Begin
Clrscr;
Write(‘ Nhap so phan tu N = ‘); Readln(n);
for i := 1 to n do begin write(‘ A[‘, i, ‘] = ‘); Readln(a[i]); end; {nhập mảng}
for i :=1 to n-1 do
begin
min :=i;
for j := i +1 to n do if a[j] < a[min] then min := j; { tìm vị trí của pt nhỏ nhất}
temp := a[min]; a[min] := a[i]; a[i] := temp; {hoán vị a[i] và a[min] }
end;
clrscr; writeln(‘ Sau khi sap xep ‘);
for i :=1 to n do Write(a[i]:8:2);
Readln;
End.

23


Thuật Tốn & Kỹ Thuật Lập Trình Pascal
6. Câu hỏi và bài tập
6.1.Hãy sửa các câu lệnh sai sau:
a/ Mang A : Array[1..10] of Integer;

b/ Mang_A Array[1..10] of real;

d/ Mang-A: Array[1..100] of char ;

d/ Mang_A Array[10..100] of real;


e/ Mang_A: Array[10..1] of char;

f/ Mang_A : Array[10..100] real;

g/ Mang_A: Array[ -1.. 10] of char;

h/ Mang_A: Array['a'..'k'] of byte;

6.2.Hãy viết chương trình nhập N số từ bàn phím vào mảng A, tìm giá trị nhỏ
nhất trong mảng A.
6.3.Hãy viết chương trình nhập N số từ bàn phím vào mảng A, tìm vị trí của
phần tử có giá trị nhỏ nhất.
6.4.Hãy viết chương trình nhập một số nguyên dương ở dạng cơ số 10 sau đó
hiển thị số nguyên đó ở dạng cơ số nhị phân.
6.5.Hãy cài đặt thuật toán sắp xếp Insert_Sort (chèn trực tiếp)
6.6.Hãy viết chương trình nhập n số, hiển thị số các số nhỏ nhất.
Gợi ý: Nhập n số vào mảng, sắp xếp mảng đó theo thứ tự khơng giảm. Sau khi sắp xếp
tất cả các số nhỏ nhất đứng ở đầu mảng, tìm từ đầu mảng đến vị trí a[i] <> a[i+1] thì i là
số phần tử nhỏ nhất.
6.7.Viết chương trình nhập n số (có số âm, số dương), hiển thị số dương nhỏ
nhất, số âm lớn nhất.
Gợi ý: Nhập n số vào mảng A, sao chép tất cả các số âm trong mảng A sang mảng AM
và các số dương trong mảng A sang mảng DUONG, sắp xếp mảng AM,
DUONG theo thứ tự không giảm. Sau khi sắp xếp, số âm lớn nhất đứng ở cuối mảng
AM và số dương nhỏ nhất đứng ở đầu mảng DUONG.
6.8.Hãy viết chương trình để tính C = A +B trong đó A, B, C là các ma trận có 3
hàng, 3 cột và giá trị của A, B được nhập vào từ bàn phím.
6.9.Hãy viết chương trình để tính C = A - B trong đó A, B, C là các ma trận có n
hàng và m cột (m, n, A,B được nhập vào từ bàn phím).
6.10.Chương trình tính C = A * B trong đó A, B, C là ma trận vuông cấp ba, giá

trị của A, B được nhập từ bàn phím.

24


Program Nha_Ma_Tran;
Uses crt;
Const
Hang = 2; Cot = 2;
Var
i, j, tempcot : byte; tg :real; A,C, B :Array[1..10,1..10] of real;
Begin
clrscr;
Writeln(' Nhap Ma Tran A ');
for i :=1 to Hang do { Nhập ma trận A }
for j :=1 to Cot do
begin
Write(' A[',i,' ',j,'] = '); Readln(A[i,j]);
end;
Writeln(' Nhap Ma Tran B ');
for i :=1 to Hang do { Nhập ma trận B}
for j :=1 to Cot do
begin
Write(' B[',i,' ',j,'] = '); Readln(B[i,j]);
end;
for i := 1 to Hang do { Tính ma trận C }
for j := 1 to Cot do
begin
tg := 0;
for tempcot := 1 to Cot do tg :=tg + A[i,tempcot] * B[tempcot, j];

C[i,j] := tg;
end;
clrscr;
Writeln(' C = A x B ');
for i := 1 to Hang do { In ma trận C ra màn hình }
begin
writeln;
for j := 1 to Cot do Write(C[i,j]:8:2);
end;
Readln;
End.

Thuật Tốn & Kỹ Thuật Lập Trình Pascal

25


×