Tải bản đầy đủ (.pdf) (50 trang)

Tài liệu bồi dưỡng ngôn ngữ 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 (889.75 KB, 50 trang )

Tài liệu bồi dưỡng ngôn ngữ lập trình Pascal
NGÔN NGỮ LẬP TRÌNH PASCAL
Bài 01
GIỚI THIỆU
1. Nguồn gốc.
- Là NN lập trình bậc cao do giáo sư Niklau Wirth ( thụy sĩ )sáng lập và công bố
vào năm 1971. đặt tên là Pascal để tưởng nhớ một nhà toán học người pháp ( người
đầu tiên chế tạo ra máy tính).
- Đặc điểm: Đó là ngôn ngữ Thông dịch và Biên dịch
+ Biên dịch: Là chương trình phải đúng hoàn toàn về mặt ngữ pháp mới chạy được.
+ Thông dịch: Đúng lệnh nào thực hiện lệnh đó.
2. Khởi động.
- Chạy file Turbo.exe ( Xuất hiện giao diện Pascal).
- Soạn thảo trương trình nguồn.
Ví dụ:
Program lamquen;
Uses crt;
Begin
Writeln(‘ Hello ’);
Readln;
End.
- Để chạy chương trình:
+ ấn F9 để dịch và sửa lỗi.
+ Ctrl + F9 để chạy thử và kiểm tra.
+ F8 Cho chạy chương trình từng bước ( không kể chương trình con).
+ F7 Cho chạy chương trình từng bước ( kể chương trình con)
+ F2 Ngắt bổ chế độ chạy chương trình từng bước.
- Các thao tác cơ bản trong Pascal.
+ ấn F2 ghi file ( lần ghi đầu tiên gõ tên file )
+ Mở một file mới: Alt + F -> New.
+ Mở 1 file có sẵn: F3 ấn phím Tab chọn.


+ Đánh dấu khối: đặt con trỏ đầu khối Shift + -> ( <- )
để sao chép, di chuyển, …
+ Đánh dấu: Ctrl + K + C sao chép khối ( copy)
+ Đánh dấu: Ctrl + K + V Di chuyển khối( Move )
+ Đánh dấu: Ctrl + K + Y xóa khối
+ Đánh dấu: Ctrl + K + W Ghi vào file mới.
+ ấn Alt + X thoát.
3. Cấu trúc chương trình Pascal ( gồm 3 phần ).
1


Tài liệu bồi dưỡng ngôn ngữ lập trình Pascal
* Phần tiêu đề ( phần không bắt buộc ).
- Program  < tên chương trình > ( gợi nhớ)
* Phần khai báo.
- Uses  crt ( đăng ký CT đồ họa)
- Label < các nhãn >
- Const < các hằng >
- Type < Kiểu dữ liệu >
- Var < Biến>
- Function < Hàm >.
- Procedure < Thủ tục >
* Thân chương trình. ( Bắt buộc)
Begin
< Các lệnh >
End.
* Chú ý:
- Dấu chấm phảy ( ; ) dùng để ngăn cách giữa các câu lệnh.
- Pascal chỉ quan tâm tới câu lệnh. Một lệnh có thể viết trên nhiều dòng và ngược lại.
- CT phải được viết theo kiểu thụt thò.

- Tất cả các câu lệnh sau End. đều không có giá trị khi chạy CT.
- Dùng {…} (* … *) để ghi chú thích.
- Pascal không phân biệt chữ hoa hay chữ thường.
* Ví dụ Một CT cụ thể.
Ví dụ 2
Program Chao; { Chuong trinh tính tổng hai số nguyên }
Uses crt;
Var a,b,c : Integer;
Begin
C := a + b;
Write(‘ Tong hai so a va b la : ’, c);
End.
Bài 02
CÁC KHÁI NIỆM CƠ BẢN CỦA TURBO PASCAL ( TP ).
1. Bảng chữ:
Bảng chữ của TP là bảng ASCII ( American

Standard Codes

information Interchanges ). Có 128 kí hiệu bao gồm chữ cái la tinh, các chữ số, các
dấu, và một số kí hiệu đặc biệt. Bảng mã ASCII mở rộng được bổ xung thêm 128 kí
hiệu khác.
2


Tài liệu bồi dưỡng ngôn ngữ lập trình Pascal
- Bộ chữ cái la tinh: gồm 26 chữ cái tiếng anh
+ Chữ in hoa A -> Z
+ Chữ in thường a -> z.
- Bộ chữ số: 0 -> 9.

- Các dấu: phép toán số học +, -, *, / và các kí hiệu khác @, ^, %…
2. Các từ khoá ( Key words ) và các dấu kép.
Từ bằng tiếng anh được TP dùng với một ý nghĩa xác định và gọi là từ khoá.
- Ví dụ: Program, Begin, end, …
-

:= dấu gán, <> khác .

3. Kiểu dữ liệu.
- Một kiểu dữ liệu là một định nghĩa về một lớp đối tượng nào đó. Nó chỉ ra cho máy
biết loại đối tượng và các thao tác được thực hiện.
* Các kiểu dữ liệu:
+ Kiểu đơn giản ( Vô hướng )
- Đơn giản chuẩn: Số nguyên, thực, logic, ký tự
- Tự định nghĩa: Liệt kê, đoạn con.
+ Có cấu trúc: Xâu, mảng, tập hợp, bản ghi, file.
+ Loại dữ liệu trừu tượng: con trỏ.
4 . Hằng:
- Hằng là một giá trị cụ thể không thay đổi.
- Hằng số: 12, 45
- Hằng ký tự: là dãy kí hiệu được bắt đầu và kết thúc bằng dấu nháy đơn
( ‘ ’ ). Ví dụ

‘ LOP TIN HOC ’, …

- Hằng logic: True, False ( không phân biệt chữ hoa hay chữ thường)
5. Xử lý và biểu diễn TT trong MT
a.Xử lý TT
Chương trình
Dữ liệu vào


MTĐT

TT kết quả

3


Tài liệu bồi dưỡng ngôn ngữ lập trình Pascal
b.Các hệ đếm.
- Các hệ đếm thường dùng trong máy tính
+ Hệ thập phân :dùng các chữ số từ 0- 9 để biểu diễn
VD: 12, 1222 ,10000 …
+ Hệ Hexa :dùng 0 – 9 và A-F
VD: 0, 1, … 9, A, B, C, E, F, 10 , 11, … , 19, 1A , 1B, …20
+Hệ nhị phân:Chỉ dùng 2 ký tự 0 và 1 để biểu diễn
VD: 01, 11 , 110 , 11011, …
Hệ nhị phân thường được dùng nhiều nhất trong máy tính vì nó thuận tiện cho việc
mã hoá và lưu trữ TT trong máy tính
c. Cách mã hoá và biểu diễn TT trong MT
- Người ta dùng bảng mã ASCII
(American standard code for information
interchange)
d. Đơn vị đo TT
1 bit chỉ gồm 0, 1
1 byte =8 bit
1kb = 1024byte
1 Mb= 1024 Kb
1 Gb =1024 Mb
6. Khái niệm Biến.

- Là 1 ô nhớ hay 1 vùng nhớ lưu trữ có thể thay đổi được
- Mỗi biến thuộc 1 kiểu dữ liệu xác định trước và phải được khai báo ngay đầu
chương trình bằng từ khóa Var.

Ví dụ

Var < tên biến >: < Kiểu dữ liệu>

Var a,b,c : Real;
n,i,j: Integer;
7. Các phép toán:
+ So sánh:

= , <> , >= , <= ,

+ Số học: + , - , *, /.
+ Phép toán ghép xâu: + = ‘ Ha noi ’+ ‘ Viet Nam ’;
+ Phép toán logic: not, and, or, xor.
- Ví dụ cụ thể.
4


Tài liệu bồi dưỡng ngôn ngữ lập trình Pascal
A

B

A And B

TRUE


TRUE

TRUE

TRUE FALSE

FALSE

FALSE TRUE

FALSE

FALSE FALSE

FALSE

A

B

A Or B

TRUE

TRUE

TRUE

TRUE FALSE


TRUE

FALSE TRUE

TRUE

FALSE FALSE

FALSE

A

NOT A

TRUE

FALSE

FALSE

TRUE

8. Biểu thức:
+ Là một tập hợp các hằng, biến liệt kê với nhau bởi các phép toán, nhằm thực hiện
tính toán rồi trả về giá trị xác định.
Tiết 03
CÁC LỆNH GÁN, NHẬP, XUẤT DỮ LIỆU
VÀ CÁC KIỂU DỮ LIỆU ĐƠN GIẢN
I. Các lênh cơ bản:

1. Lệnh gán:
< Tên biến > := < biểu thức >
Lệnh này thực hiện việc tính toán giá trị biểu thức ở vế phải rồi ghi kết quả vào
biến, nếu giá trị của biểu thức không cùng kiểu với biến thì sẽ bao lỗi.
2. Nhập dữ liệu vào biến:
- d1: Read( biến1, biến2,…,biến n);
- d2: Read ln(biến1, biến2,…,biến n);
5


Tài liệu bồi dưỡng ngôn ngữ lập trình Pascal
- d3: Readln;
* ý nghĩa: ( …)
- d1:…………………………………………
- d2:…………………………………………..
- d3: Dừng chương trình chờ khi người sử dụng gõ phím Enter thì mới thực hiện lệnh
tiếp theo Readln trước end để xem kết quả.
3. Xuất dữ liệu ra màn hình:
- d1: Write( bthức1, bt2,…,bthức n);
- d2: Writeln( bthức1, bt2,…,bthức);
- d3: Writeln;
* ý nghĩa:
- ở d1 máy tính tiến hành tính toán các giá trị của biểu thức và viết kết quả ra màn
hình và không xuống dòng.
- d2 Viết kết quả xong thì xuống dòng.
- d3 Chỉ đưa co trỏ xuống dòng.
Write( ‘ Tong la ’, c );
Write( ‘ Tong la ’, a+c );
4. Chú ý.
- Kết hợp Write và read để nhập dữ liệu.

Write(‘ Cho so a = ’);
Read(a);
II. Các kiểu dữ liệu đơn giản.
1. Khái niệm chung.
- Dữ liệu ( Data ) là tất cả những gì mà máy tính xử lý.
Theo Nikláu Wirth:
Chương trình = Thuật toán + Cấu trúc dữ liệu
- Một kiểu dữ liệu ( Data type ) là một sự quy định về hình dạng, cấu trúc và
giá trị của dữ liệu cũng như cách biểu diễn và cách xử lý dữ liệu.
- Dữ liệu trong Pascal chia làm hai loại chính.
+ Kiểu đơn giản ( Simple type)
+ Kiểu có cấu trúc ( Structure type )
2. Các kiểu dữ liệu đơn giản
2.1 Kiểu số nguyên ( Integer ).
- Kiểu số nguyên thuộc Z được định nghĩa với các từ khoá sau:
- Khai báo:
Var < Tên biến>: Integer;
Var a, b: Integer;
- Mỗi biến kiếu số nguyên được lưu trữ = hai byte và có thể nhận được các giá trị
trong khoảng:
6


Tài liệu bồi dưỡng ngôn ngữ lập trình Pascal
- 32768 -> 32767.
- Các phép toán
Kí hiệu
DIV
MOD
+;-;*;/


ý nghĩa
Chia lấy phần nguyên
Chia lấy phần dư
Cộng , trừ, nhân, chia cho kết
quả là số thực

a mod b
+ Mod lấy phần dư của phép chia a cho b
a div b
+ Div lấy phần nguyên của phép chia a cho b.
Ví dụ: nhạp vào một số nguyên gồm 4 số: sau đó tính tổng các chữ số.
* Chú ý: Pascal đã chuẩn bị sẵn 1 số kiểu tương thích với kiểu số nguyên.
Stt
1
2
3
4
5
6
7

Từ khoá
Integer
Byte
Word
Shortint
Longint
Single
Double


Phạm vi
- 32768 .. 32767
0 .. 255
0..65535
-128..127
-2147483648 .. 2147483647
1.5E-45 .. 3.4E+38
5.0E-324 .. 1.7 E+308

+ Ví dụ:
Nhập vào kích thước của hình chữ nhật sau đó đó tính chu vi, diện tích.
2.2 Kiểu số thực ( Real).
- Kiểu số thực R được định nghĩa với từ khóa REAl.
- Khai báo: Var < Tên biến>: Real;
Var x, y: Real;
- Mỗi biến kiếu số thực được lưu trữ = 6 byte và có thể nhận được các giá trị trong
khoảng:
+ 1,9.10-38 -> 27.1037.
- Các phép toán so sánh: +,- , *, / ( chia ).
* Chú ý: Viết số thực theo đúng quy cách.
Writeln(so : n : m )
n: là số lượng chữ số.
m: lấy chữ số sau dấu ,.

7


Tài liệu bồi dưỡng ngôn ngữ lập trình Pascal
- Ví dụ: Nhập vào bán kính của đường tròn sau đó tính chu vi , diện tích.

* Các hàm số học dùng cho số nguyên và số thực:
Kí hiệu
ABS(x)
Round

ý nghĩa
| x | : Lấy giá trị
Làm tròn

2.3 Kiểu logic( Boolean ).
- Khai báo: Var < Tên biến>: Boolean;
Var Ok:Boolean;
- Kiểu Boolean nhận 2 giá trị đúng ( True ), sai ( False).
- Các phép toán: and, or, not.
- Các thao tác:
Lênh gán: Ok := true;
Ok:= n = 5;
Ok:= n mod 2 = 0;
- Không có lệnh đọc vào biến logic.
- Viết ra được Write, Writeln;
2.4 Kiểu ký tự ( Char ).
- Khai báo: Var < Tên biến>: Char,
Var k, t : char;
- 1 biến kiểu ký tự được lưu trữ bằng một byte có thể nhận đực bất kỳ một ký tự
nào nằm trong bảng mã ASCII.
- Các phép toán so sánh: dựa vào bảng mã ASCII
- Các thao tác:
+ Lệnh gán k := ‘A’;
+ Đọc vào Read, Readln;
+ Viết ra: Write, Writeln;

 Một số hàm chuẩn:
- CHR( n ): Trả về ký tự tương ứng của số n trong bảng mã ASCII.
CHR( 65 ) là ‘A’
- ORD(‘n’): chuyển ký tự thành mã số trong bảng mã ASCII.
ORD(‘A’) là 65
- Upcase(ký tự): Đổi ký tự thành chữ in nếu nó là chữ cái thường.
Upcase(‘a’) thành ‘A’,
Bài 04
BÀI TOÁN VÀ THUẬT TOÁN
8


Tài liệu bồi dưỡng ngôn ngữ lập trình Pascal
I. Khái niệm bài toán.
- Khái niệm: Trong phạm vi Tin học, ta có thể quan niệm bài toán là việc nào đó ta
muốn máy tính thực hiện.
- Ví dụ: Viết một dòng chữ trông báo ra màn hình, Giải phương trình bậc hai, quản
lý cãn bộ trong một cơ quan…
* Khí dùng máy tính giải bài toán, ta cần quan tâm tới hai yếu tố. ( Gọi là bước xác
định bài toán )
+ Đưa vào máy thông tin gì ( Input).
+ Lấy ra thông tin gì ( Output).
Ví dụ: Xác định bài toán
1. Bài toán kiểm tra tính nguyên tố của một số.
Input: số nguyên dương n ( n <>1)
Output: trả lời n có phải là nguyên tố hay không.
2.Bài toán xếp loại học sinh.
II. Khái niệm thuật toán ( Algorithm ).
- Khái niệm về thuật toán: Thuật toán để giải một bài toán là một dãy hữu hạn các
thao tác được sắp xếp theo một trình tự xác định sao cho sau khi thực hiện dãy

thao tác đó, từ Input của bài toán này, ta nhận được Output cần tìm
Ví dụ:
1. UCLN của hai số m,n:
Thuật toán:
- Bước 1: Nhập m,n.
- Bước 2: Nếu m = n thì lấy giá trị chung này làm UCLN chuển đến bước 5 (
dừng).
- Bước 3 : Nếu m > n thì thay m bằng m – n rồi quay lại bước 2.
- Bước 4: Thay n băng n - m rồi quay lại bước 2.
- Đưa ra kết quả UCLN. Kết thúc.
Trên đây là trình bày thuật toán bằng phương pháp liệt kê, ngoài ra còn trình
bày thuật toán bằng phương pháp sơ đồ khối.
* Trong sơ đồ khối, người ta dùng một số biểu tượng thể hiện các thao tác:
Thể hiện thao tác so sánh.

Thể hiện các phép toán
Thể hiện quy trình làm việc
9


Tài liệu bồi dưỡng ngôn ngữ lập trình Pascal
Nhập xuất dữ liệu, kết thúc.
Ví dụ 2: Giải phương trình bậc nhất ax + b = 0
a, Thể hiện thuật toán bằng phương pháp liệt kê.
- b1: nhập a,b.
- b2: Nếu a= b thì
+ nếu b = 0 thì PT vô số nghiệm -> b4
+ Nếu b <> 0 thì vô nghiệm. -> b4
- b3: Nếu a <> 0 thì x = - b/a.
- b4: Dừng.

Nhập a,b

False

True
a=0

False
b=0

True
Vô số n

x = - b/a

Vô n

Dừng

Bài tập: Hãy xác định bài toán sau đó mô tả thuật toán giải các bài tập sau bằng
phương pháp liệt kê và sơ đầ khối:
1. Cho N và dãy số a1, a2, …an hãy tìm giá trị nhỏ nhất ( Min ) của dãy đó.
2. GPTB2: ax2 + bx + c = 0
Bài 05
CÂU LỆNH GHÉP, CÂU LỆNH RẼ NHÁNH (IF)
* Bài toán:
- Cho máy nhận vào 3 số a,b,c bất kỳ, xét xem ba số đó có thể là số đo ba cạnh của
một tam giác hay không.
- Xác định bài toán;
Input: a,b,c

Output: có là tam giác không.
Giải thuật:
10


Tài liệu bồi dưỡng ngôn ngữ lập trình Pascal
Với câu lệnh gán ta có thể trao đổi các giá trị của các biến sao cho a,b,c mang giá trị
tăng dần.
a <= b <= c. sau đó kiểm tra hệ thức c < ( a + b). Nếu thoả mãn thì 3 số đó có thể là 3
cạnh của tam giác.
1. Câu lệnh ghép.
- Khái niệm: Câu lênh ghép là dãy lệnh liên tiếp nhiều câu lệnh được ghép lại thành
nhóm nằm giữa từ khóa
Begin … end;
Ví dụ Nhập vào 2 số sau đó hoán vị cho nhau.
Begin
Tg := a ; a:= b; b := tg;
End;
- Việc thực hiện của câu lệnh ghép là thực hiện lần lượt các câu lệnh thành phần trong
dãy
2. Câu lệnh If ( Có hai dạng: If khuyết – If đủ).
* Cú pháp lệnh
- If khuyết:
If < Điều kiện > then < lệnh >.
- If đủ:
If < Điều kiện > then < lệnh1 > else < lệnh 2>;
+ Trong đó:
- If, then: là các từ khóa
* Hoạt động:
- If khuyết: Máy kiểm tra Điều kiện nếu cho kết quả là đúng ( True ) thì thực hiện <

lệnh > sau then, ngược lại sẽ bỏ qua lệnh.
Sơ đồ khối:
Câu lệnh If khuyết.

True
ĐK

False

Lệnh

11


Tài liệu bồi dưỡng ngôn ngữ lập trình Pascal

- If đủ: Máy kiểm tra Điều kiện nếu cho kết quả là đúng

( True ) thì thực hiện <

lệnh1 > sau then, ngược lại sẽ bỏ qua lệnh 1 thực hiện lệnh 2 sau else.
Chú ý: Sau các từ khóa THEN, ELSE chỉ có một câu lệnh được thực hiện. Khi cần có
nhiều hơn một câu lệnh saumỗi từ khóa đó ta cần sử dụng câu lệnh ghép.
* Vẽ sơ đồ khối.
Câu lệnh If đủ:

False

Lệnh 2


ĐK

True

Lệnh 1

Ví dụ: Giải phương trình bậc nhất: ax + b = 0.
* Xác định bài toán:
- Input: a,b ( a<> 0)
- Output: x sao cho
ax + b = 0
* Giải thuật.
- b1: nhập a,b.
- b2: Nếu a= b thì
+ nếu b = 0 thì PT vô số nghiệm -> b4
+ Nếu b <> 0 thì vô nghiệm. -> b4
12


Tài liệu bồi dưỡng ngôn ngữ lập trình Pascal
- b3: Nếu a <> 0 thì x = - b/a.
- b4: Dừng.
Giải
Program PTB1;
Uses crt;
Var a,b,x: Real;
Begin
Clrscr;
Write(‘Nhap he so a = ’); readln(a);
Write(‘Nhap he so b = ’); readln(b);

If a <> 0 then
If b <> 0 then
Writeln(‘ PT co nghiem’, (- b/ a):5: 2)
Else
Writeln(‘ PT vo nghiem’)
Else
Writeln(‘ PT co vo so nghiem’);
3. Câu lênh lựa chọn case … of.
* Cú pháp:
Case < biến > of
< Tap hang 1>: < Lenh 1>;
< Tap hang 2>: < Lenh 2>;
< Tap hang 3>: < Lenh 3>;


< Tap hang n>: < Lenh n>
Else < Tap hang n+1>
* Vẽ sơ đồ khối.

B  tập H1

L
B  tập H2

L

13


Tài liệu bồi dưỡng ngôn ngữ lập trình Pascal


Ví dụ: Nhập điểm rồi phân loại học sinh;
Program
vidu;
Uses crt;
Var Diem: Integer;
Begin
Clrscr;
Write(‘ Nhap diem ’); Readln(diem);
Case diem of
8..10: Writeln(‘ Gioi’);
6,7: Writeln(‘ Kha’);
5: Writeln(‘ TBK’);
1..4: Writeln(‘ Yeu’);
else Writeln(‘ Ban nhap lai: ’);
End.
Readln;
End.
* Bài tập
- Giải Phương trình bậc hai:
- Giải phương trình bậc 4
Bài 06
CẤU TRÚC LẶP
I . Câu lệnh lặp với số lần biết trước For.
14


Tài liệu bồi dưỡng ngôn ngữ lập trình Pascal
1. Bài toán.
Lãi xuất gửi ngân hàng không kỳ hạn là k%. Một người gửi số tiền ban đầu là

a. tính số tiền có được sau t tháng.
- Xác định bài toán.
- Thuật toán.
- Viết chương trình.
2. Câu lệnh lặp có số lần định trước For.
* Cú pháp.
- Dạng 1 For tiến
For biến := < giá trị đầu> to < giá trị cuối> do < lệnh>;
- Dạng 1 For lùi.
For biến := < giá trị cuối> to < giá trị đầu> do < lệnh>;
- Biến phải là kiểu dữ liệu đếm được ( Integer, char ).
- Giá trị phải cùng kiểu với biến.
* Hoạt động.
- For tiến: Đầu tiên biến nhận giá trị đầu sau đó tiến hành so sánh nó với giá trị cuối,
nếu nhỏ hơn tiến hành thực hiện lệnh, song biến tự động tăng lên 1, sau đó quay về
vòng lặp.
- Quá trình lặp đi lặp lại cho đến khi vượt qua giá trị cuối thì dừng.
* Vẽ sơ đồ khối.

Biến := gt đầu
False
Biến < gt cuối

End

True
Lệnh

Biến := Biến + 1
* For lùi: cách thực hiện khác điểm sau.

- Bắt đầu nhận giá trị cuối trước.
- Sau mỗi lần lặp giảm đi 1 đơn vị.
* Chú ý: trong câu lệnh For không được tự tiện thay đổi biến điều khiển, bởi vì biến
điều khiển tự động tăng trong cấu trúc lặp ( biến := biến + 1, inc(biến) ).
15


Tài liệu bồi dưỡng ngôn ngữ lập trình Pascal
Ví dụ 1: Tính tổng
S = 1 + 1/2 + 1/3 + … + 1/n.
Program tong;
Uses crt;
Var s :real;
n,i:integer;
Begin
Clrscr; { Lệnh xóa màn hình }
Write(‘ Nhap n = ’); readln(n);
For i := 1 to n do
S := S + 1/i;
Write(‘ Tong la: ’,s:5:3);
Readln;
End.
Bài tập:
Bài 1: Tính tổng
S= 1-1/2+1/3-1/4+…+ (-1)n-11/n.
Bài 2: Nhập n số từ bàn phím sau đó tính tổng.
II. Câu lệnh lặp với điều kiện trước While
1. Bài toán.
- Lãi xuất hàng tháng gửi tiết kiệm không kỳ hạn là 1 %. Một người gửi vào số tiên là
a. Sau bao nhiêu tháng người đó có số tiền không nhỏ hơn b.

- Xác định bài toán.
- Thuật toán.
- Viết chương trình.
2. Câu lệnh lặp với điều kiện trước While.
* Cú pháp.
While < ĐK > do < lệnh >.
- Điều kiện là 1 biểu thức logic. ( true – false ).
- Lệnh có thể là 1 hoặc nhiều lệnh ( Begin … end)
- Hoạt động: Máy kiểm tra ĐK, nếu ĐK cho giá trị True thì thực hiện lệnh sau do,
ngược lại thoát khỏi vòng lặp.
* Sơ đồ khối:
Begin
False

End

ĐK
True

Lệnh

16


Tài liệu bồi dưỡng ngôn ngữ lập trình Pascal

* Chú ý 1 : Trong vòng lặp While phải tồn tại 1 lệnh biến ĐK đúng thành ĐK sai để
thoát khỏi vòng lặp, nếu không thì sẽ lặp vô hạn lần.
Ví dụ 1: Tính tổng
S = 1 + 1/2 + 1/3 + … + 1/n.

Program tong;
Uses crt;
Var s :real;
n,t:integer;
Begin
Clrscr; { Lệnh xóa màn hình }
Write(‘ Nhap n = ’); readln(n);
t := 0; s := 0;
While t < n do
Begin
s := s + 1/t;
t := t + 1;
End;
Write(‘ Tong la: ’,s);
Readln;
End.
* Chú ý 2: Vòng lặp While … do áp dụng cho bài toán mà không biết số vòng lặp là
bao nhiêu lần mà chỉ biết ĐK để tiến hành lặp.
III.Câu lệnh lặp với điều kiện sau repeat … until.
* Cú pháp.
Repeat
< lệnh >;
Until < ĐK >;
- Lệnh có thể là một hoặc nhiều câu lênh ( không cần đặt trong cặp begin … end ).
- Hoạt động: Đầu tiên thực hiện lệnh, sau đó kiểm tra ĐK, nếu ĐK đúng thì thoát ra,
nếu sai thì quay lại vòng lặp làm tiếp .
Ví dụ 1: Tính tổng
S = 1 + 1/2 + 1/3 + … + 1/n.
Giải
Program tong;

17


Tài liệu bồi dưỡng ngôn ngữ lập trình Pascal
Uses crt;
Var s :real;
n,t:integer;
Begin
Clrscr; { Lệnh xóa màn hình }
Write(‘ Nhap n = ’); readln(n);
t := 0; s := 0;
Repeat
s := s + 1/t;
t := t + 1;
Until ( t > n)
Write(‘ Tong la: ’,s:5:2);
Readln;
End.
* Chú ý 1 : Trong vòng lặp Repeat phải tồn tại 1 lệnh biến ĐK sai thành ĐK đúng để
thoát khỏi vòng lặp, nếu không thì sẽ lặp vô hạn lần.
* Bài tập.
Bài 1:
+ Hãy nhập vào liên tiếp các số nguyên dương sau đó tính tổng.
+ Tính tổng tất cả các số chia hết cho 3.
+ Cho biết số nào là số Max và cú ghõ lần thứ mấy.
Bài 2.
Nhập vào số nguyên n.
Kiểm tra xem số đó có phải là nguyên tố, chính phương, hoàn hảo không.
Bài 07
DỮ LIỆUCÓ CẤU TRÚC KIỂU MẢNG.

I. MẢNG MỘT CHIỀU
1. Khái niệm:
Mảng là 1 dãy liên tiếp các ô nhớ có cùng tên cùng kiểu dữ liệu, chỉ
phân biệt nhau bởi thứ tự các phần tử gọi là chỉ số.
2. Mảng 1 chiều
* Khai báo:
Type < Kiểu mảng > = Array[ tập chỉ số ] of < kiểu phần tử>;
Var < Biến mảng> : < Kiểu mảng>;
< Biến mảng > : Array [ Tập chỉ số ] of < kiểu phần tử>;
* Trong đó:
- Type, Var, Array, of là từ khoá.
- Kiểu mảng, biểu mảng ta tự đặt.
18


Tài liệu bồi dưỡng ngôn ngữ lập trình Pascal
- Tập chỉ số: Thường là 1 đoạn con của số nguyên hay ký tự. ví dụ 1 .. 100,
‘A’..’Z’, -10..10
- Kiểu phàn tử có thể là kiểu bất kỳ.
Ví dụ:
Type day = Array[1..100] of Real;
Var m1,m2: day;
a,b: Array[1..50 ] of Integer;
c: Array [ -2 .. 4 ] of Boolean;
* Thao tác :
- Lệnh gán cho hai mảng cùng kiểu m1 := m2;
- Không có lệnh đọc và viết cho 1 biến mảng nói chung.
- Chỉ có thể thao tác đến từng phần tử của mảng phụ thuộc vào kiểu dữ liệu của nó.
- Để truy cập đến phần tử thứ i của mảng a là a[i]
Read(a[i]); b[1] := a[1]; Write(‘ b[1]’);

* Một số thao tác chính:
- Nhập vào mảng A có n phần tử.
For i := 1 to n do
Begin
Write(‘a[‘,i’]= ‘);
Readln (a[i]);
End;
Hoặc
i := 0;
Repeat
i := i + 1;
Write(‘a[‘,i’]= ‘);
Readln (a[i]);
Until a[i] = 0;
- Duyệt mảng ( tính tổng);
S := 0;
For i := 1 to n do
S := s + a[i];
Writeln(‘ Tong la ’,s);
3. Các thuật toán cơ bản
a. Thuật toán tính tổng thoả mãn tính chất .
- Khởi động s := 0;
- Lặp từ phần tử đầu tiên tới phần tử cuối cùng và nếu phần tử và nếu phần tử đó thoả
mãn tính chất đề ra thì cộng vào tổng.
S := 0;
For i := 1 to n do
If < a[i] thoả mãn yêu cầu > then S := S + a[i];
19



Tài liệu bồi dưỡng ngôn ngữ lập trình Pascal
b. Đếm số phần tử thoả mãn tính chất.
- Khởi động: Đếm := 0;
- Lặp từ phần tử đầu tiên tới phần tử cuối cùng và nếu phần tử đó thoả mãn tính chất
đề ra thì tăng biến đếm
Đếm := 0;
For i := 1 to n do
If < a[i] thoả mãn tính chất > then Đếm := Đếm+ 1;
+ Tính trung bình cộng thoả mãn tính chất nào đó:
+ Về điều kiện:
1. Nguyên tố.
2. Chính phương.
3. Hoàn hảo.
4. Chia hết.
5. Số dương.
6. Số âm
Thì phải tìm cách biểu diễn = Biểu thức logic.
c. Thuật toán tìm max, min.
- Tìm Max.
+ B1: Max := phần tử đầu tiên.
+ B2: For i := 2 to n do
If max < PT then max := PT.
Max := a[1];
For i := 2 to n do
If max < a[i] then max := a[i];
d. Thuật toán sắp xếp.
* Chèn trực tiếp.
Duyệt
For i := 1 to n – 1 do
For j := i+1 to n do

If a[i] > a[j] then
Begin
tg:= a[i];
a[i] := a[j];
a[j] := tg;
end;
* Chèn chọn trực tiếp.
Duyệt
For i := 1 to n – 1 do
20


Tài liệu bồi dưỡng ngôn ngữ lập trình Pascal
Begin
k := i;
For j := i+1 to n do
If a[j] < a[k] then k := j;
tg:= a[i];
a[i] := a[k];
a[k] := tg;
end;
* Bài tập:
- Nhập vào số n sau đó nhập vào một dãy số nguyên.
- Tìm số lớn nhất, nhỏ nhất, và cho biết vị trí của nó.
- Tính tổng các số chẵn, lẻ.
- Cho biết trong dãy có bao nhiêu số:
1. Nguyên tố, tính tổng các số là nguyên tố,…
2. Chính phương.
3. Hoàn hảo.
4. Chia hết.

5. Số dương.
6. Số âm
7. Tìm số nhỏ thứ nhì của dãy.
II.MẢNG HAI CHIỀU
1. Khai báo.
2. Các thuật toán trên mảng 2 chiều:
2.1. Thao tác đọc file hai chiều từ:
Procedure docfile;
Begin
Writeln(' Doc file :');
Assign(f,'c:\m.txt');
Reset(f);
Read(f,n,m) ;
Writeln(n,’ ‘, m);
For i := 1 to n do
For j := 1 to m do
21


Tài liệu bồi dưỡng ngôn ngữ lập trình Pascal
read(f,a[i,j]);
Writeln(' Viet ma tran: ');
For i := 1 to n do
begin
For j := 1 to m do
Write(a[i,j]:4);
Writeln;
Writeln;
end;
close(f);

end;
2.2 Các điểm đặc biệt của MT:
Định nghĩa:
- Phần tử a[i,j] được gọi là điểm cực tiểu địa phương nếu a[i,j] min của cột j và
min của hàng i.
- Phần tử a[i,j] được gọi là điểm cực đại địa phương nếu a[i,j] max của cột j và
max của hàng i.
- Phần tử a[i,j] được gọi là điểm Yên ngựa nếu a[i,j] min của cột j và max của
hàng i hoặc ngược lại.
Ví dụ:

3
1

6

5

0
2
8
7

2 6
4 5 
3 8

6 10

Hãy xác định các phần tử Cực tiểu, cực đại, Yên ngựa.

- Hãy sắp xếp lại các phần tử của ma trận để sao cho các phần tử nằm trên hàng
tăng dần và trên cột giảm dần( cột tăng và hàng tăng)
Ví dụ:

22


Tài liệu bồi dưỡng ngôn ngữ lập trình Pascal

 3 1 4
2 0 6


5 8 7

thành

0 1 2 
3 4 5 


6 7 8

Thuật toán
Bước 1: Chuyển ma trận 2 chiều về ma trận 1 chiều
Bước 2: Sắp xếp ma trận 1 chiều.
Bước 3: Chuyển ma trận 1 chiểu về ma trận 2chiều.
A[n x n ] thì B[ n2 ].
* Bước 1: Chuyển ma trận 2 chiều về ma trận 1 chiều
k:= 1;

For i := 1 to n do
For j := 1 to m do
Begin
B[k]:= A[i,j];
k := k +1;
End;
Bước 2: Sắp xếp ma trận 1 chiều.
Bước 3: Chuyển ma trận 2 chiều về ma trận 1 chiều
k:= 1;
For i := 1 to n do
For j := 1 to m do
Begin
A[i,j] := B[k];
k := k +1;
End;
Chương trình giải
Program
lithuyet ;
Uses crt ;
Type mang = array[1..100,1..100] of integer;
var a: mang;
b: array[1..100] of integer;
n, m ,i, j:integer;
f: text;
Procedure docfile;
Begin
Writeln('Doc file :');
23



Tài liệu bồi dưỡng ngôn ngữ lập trình Pascal
Assign(f,'c:\m.txt');
Reset(f);
Read(f,n,m) ;
Writeln(n,’ ’,m);
For i := 1 to n do
For j := 1 to m do
read(f,a[i,j]);
Writeln('Viet ma tran:');
For i := 1 to n do
begin
For j := 1 to m do
Write(a[i,j]:5);
Writeln;
Writeln;
end;
close(f);
end;
{-----------Tìm MAX và vị trí của nó-----------------------}
Procedure max;
Var i,j,max, v1, v2:integer;
Begin
max:= - maxint;
For i := 1 to n do
For j := 1 to m do
if max < a[i,j] then
begin
max := a[i,j];
v1 := i; v2 := j;
end;

Writeln('Phan tu max MT la : ',max,' vi tri dong ',v1,' cot ',v2);
end;
{--------------- Phan tu Yen ngua---------------}
Function ngua( i, j :integer):boolean;
Var
ok1, ok2: boolean;
k:integer;
Begin
ok1 := true;
ok2 := true;
For k := 1 to m do
if a[i,j] < a[i,k] then
Begin
24


Tài liệu bồi dưỡng ngôn ngữ lập trình Pascal
ok1 := false;
Break;
end;
if ok1 then
for k := 1 to n do
if a[i,j] > a[k,j] then
Begin
ok2 := false;
Break;
end;
ngua := ok1 and ok2;
end;
{------- Phan tu cuc tieu --------------}

Function cuctieu(i,j:integer):boolean;
Var ok1,ok2:boolean;
k:integer;
Begin
ok1 := true;
ok2 := true;
For k := 1 to m do
if a[i,j] > a[i,k] then
Begin
ok1 := false;
Break;
end;
if ok1 then
for k := 1 to n do
if a[i,j] > a[k,j] then
Begin
ok2 := false;
Break;
end;
cuctieu := ok1 and ok2;
end;
Procedure maxdong( var a:mang);
Var t, max, k, k1: integer;
Begin
t := 0;
for i := 1 to n do
begin
max := a[i,1];
For k := 2 to m do
25



×