Académique Documents
Professionnel Documents
Culture Documents
2. TỪ KHÓA
– Từ khóa chung:
PROGRAM, BEGIN, END, PROCEDURE, FUNCTION
– Từ khóa để khai báo:
CONST, VAR, TYPE, ARRAY, STRING, RECORD, SET, FILE, LABEL
– Từ khóa của lệnh lựa chọn:
IF … THEN … ELSE, CASE … OF … ELSE … END;
– Từ khóa của lệnh lặp:
FOR… TO… DO, FOR… DOWNTO… DO, WHILE… DO, REPEAT… UNTIL
– Từ khóa điều khiển:
WITH, GOTO, EXIT, HALT
– Từ khóa toán tử:
AND, OR, NOT, IN, DIV, MOD
3. ĐẶT TÊN
Tuân thủ 3 quy tắc
- Không trùng với từ khóa;
- Không chứa khoảng trắng và các ký tự đặc biệt;
- Không bắt đầu là số.
Ví dụ:
Đặt tên kiểu định nghĩa TYPE mang = array [1..1000] of integer;
pred(3.14)=3
Inc(n) n:=n+1; (n là số nguyên)
Round(n) Làm tròn số thực n
Cos(x) Cho kết quả là cos x
Random(n) Sinh số ngẫu nhiên trong phạm vi n. [3]
Abs(n) Cho giá trị tuyệt đối của n
Frac(x) Cho kết quả là phần thập phân của số x
Trunc(x) Cho kết quả nguyên là phần nguyên của số thập phân x
Odd(x) Cho kết quả True nếu x số lẻ.
Sqrt(x) Căn bậc hai của x
Cho kết quả là số nguyên đứng sau số nguyên x. VD:
Succ(x)
succ(3.14)=4
Dec(n) n:=n-1; (n là số nguyên)
Arctan(x) Arctan x với x tính bằng Radian
sin(x) Cho kết quả là sin x
KIỂU FILE
Assign(f,p) Đọc file có đường dẫn p (đặt trong ' '), gán vào biến file f.
Reset(f) Đọc dữ liệu từ file f có sẵn
Append(f) Chèn thêm dữ liệu cho file
Erase(f) Xóa file
Rewrite(f) Ghi file mới lên đĩa
Close(f) Đóng file
Rename() Đặt lại tên file
KIỂU XÂU
Chr(vt) Trả về một kí tự có vị trí là vt trong bảng mã ASCII
Upcase(n) Đổi kí tự chữ thường sang chữ hoa
Copy(s,vt,a) Lấy từ xâu s thành 1 xâu con có độ dài a bắt đầu từ vị trí vt
Delete(s,vt,a) Xóa a ký tự khỏi xâu s bắt đầu từ vị trí vt
Ord(s) Trả về một số thứ tự của kí tự s trong bảng mã ASCII
Length(s) Cho kết quả là chiều dài của xâu
Insert(s1,s2,vt) Chèn xâu s1 vào xâu s2 bắt đầu từ vị trí vt
Pos(s1,s2) Cho vị trí đầu tiên xâu x1 xuất hiện trong xâu s2
2. Thư viện GRAPH
5
Mã màu Tên thay thế Ý nghĩa Mã màu Tên thay thế Ý nghĩa
0 Black Đen 8 DarkGray Xám tối
1 Blue Xanh lam 9 LightBlue Lam sáng
2 Green Lục 10 LightGreen Lục sáng
3 Cyan Lục lam 11 LightCyan Lục lam sáng
4 Red Đỏ 12 LightRed Đỏ sáng
5 Magenta Tím sen 13 LightMagenta Tím sen sáng
6 Brown Nâu 14 Yellow Vàng
7 LightGray Xám sáng 15 White Trắng
5. BẢNG MÃ ASCII
M HIỂN HIỂN HIỂN HIỂN HIỂN
MÃ MÃ MÃ MÃ
à THỊ THỊ THỊ THỊ THỊ
Khoảng
32 trống 51 3 70 F 89 Y 108 l
33 ! 52 4 71 G 90 Z 109 m
34 " 53 5 72 H 91 [ 110 n
35 # 54 6 73 I 92 \ 111 o
36 $ 55 7 74 J 93 ] 112 p
37 % 56 8 75 K 94 ^ 113 q
38 & 57 9 76 L 95 _ 114 r
39 ' 58 : 77 M 96 ` 115 s
40 ( 59 ; 78 N 97 a 116 t
41 ) 60 < 79 O 98 b 117 u
42 * 61 = 80 P 99 c 118 v
43 + 62 > 81 Q 100 d 119 w
44 , 63 ? 82 R 101 e 120 x
45 - 64 @ 83 S 102 f 121 y
46 . 65 A 84 T 103 g 122 z
47 / 66 B 85 U 104 h 123 {
48 0 67 C 86 V 105 i 124 |
49 1 68 D 87 W 106 j 125 }
50 2 69 E 88 X 107 k 126 ~
7
Lưu ý :
- Cần chú ý về miền giới hạn của kiểu dữ liệu.
- Trong một biểu thức, các phép toán có mức ưu tiên cao hơn (*, /, div và mod) sẽ được
thực hiện trước; các phép toán có mức ưu tiên thấp hơn (+, -) được thực hiện sau. Các phép
toán có cùng mức ưu tiên được thực hiện theo thứ tự từ trái qua phải.
- Khi một biểu thức có chứa các biểu thức con nằm trong ngoặc, thì các biểu thức con
này được thực hiện trước. Nếu có nhiều ngoặc lồng nhau thì các biểu thức con trong cùng được
thực hiện trước.
8
2. Kiểu số thực
Kiểu số thực (thuộc tập R trong toán học) được khai báo bằng từ khoá REAL, miền giá
trị của kiểu số thực là -1.7*10-38 đến 1.7*1038.
Các phép toán số học : +, - , *, /
Số chữ số Dung lượng
Tên kiểu Khoảng cách có nghĩa theo bytes
Real Phụ thuộc vào nền tảng phần cứng Không rõ 4 đến 8
Single 1.6E-45.. 3.4E38 44050 4
Double 5.0E-324.. 1.7E308 15-16 8
Extended 1.9E-4932.. 1.1E4932 19-20 10
Comp -2E64+1.. 2E63-1 19-20 8
-922337203685477.5808..
Currency 922337203685477.5807 19-20 8
3. Các hàm số học chuẩn (dùng cho dữ liệu kiểu số nguyên và số thực):
abs(x) Tính trị tuyệt đối của x Số nguyên, thực Cùng kiểu tham số
arctan(x) Hàm ngược của tan(x), tính bằng radian Số nguyên, thực Số thực
trunc(x) Lấy phần nguyên của x (bỏ phần lẻ) Số thực Số nguyên
4. Kiểu ký tự
Dung lượng
Tên Số ký tự lưu được theo bytes
Char 1 1
Widechar 1 ký tự unicode 2
String 255
Shortstrin
g Tương tự String (255)
Tùy thuộc vào bộ nhớ (càng nhiều bộ nhớ thì lưu được
Ansistring càng nhiều - tối đa 2GB)
4. Câu lệnh:
- Là những công việc mà chương trình cần phải thực hiện để xử lý các dữ liệu đã được
khai báo. Các câu lệnh cách nhau bằng dấu chấm phẩy (;)
- Có 2 loại câu lệnh :
+ Lệnh đơn giản : là những lệnh đơn, không chứa các lệnh khác.
Ví dụ : write, writeln, read, readln, goto…
+ Lệnh có cấu trúc (lệnh hợp thành hay lệnh ghép) : bao gồm nhiều lệnh khác (lệnh đơn
hay lệnh ghép khác) bên trong.
Ví dụ : if … then …else …,
case…of…,
for …to…do …,
repeat…until…,
while…do…
5. Một số câu lệnh đơn cơ bản:
5.1. Lệnh gán:
Là lệnh dùng để gán giá trị cho các biến, ký hiệu :=
Cú pháp:
tên biến := biểu thức;
Trong đó:
+ Vế trái của phép gán chỉ có thể là 1 biến duy nhất.
+ Biểu thức có thể là một hằng, một biến khác đã được gán giá trị trước đó, hay là một
biểu thức.
Chú ý: tính tương thích về kiểu dữ liệu của 2 vế : vế trái và vế phải phải cùng kiểu dữ
liệu. Có trường hợp ngoại lệ là 1 biến thực (vế trái) có thể nhận 1 giá trị nguyên (vế phải), khi
đó giá trị nguyên sẽ được chuyển đổi thành giá trị thực tương ứng. Nhưng ta không thể làm
ngược lại, tức là gán một giá trị thực cho biến nguyên.
Ví dụ :
Var a,b : integer;
c : real;
Begin
A := 5; {đúng}
C := A; {đúng}
B := C+3; {sai}
End.
13
Read(x); nhập 1 giá trị từ bàn phím đưa vào cho biến x, nhấn enter
để kết thúc việc nhập
Readln(x);
Readln; Dừng màn hình, nhấn phím enter sẽ tiếp tục
Ví dụ: Viết chương trình nhập vào 2 số nguyên a,b. Tính tích, thương của hai số nguyên
a,b đó.
Program Tinh_tich_thuong_cua_2_so_nguyen;
Var a , b : integer; tich : integer; thuong : real;
Begin
Writeln(‘nhap vao so nguyen a=’); readln(a);
Writeln(‘nhap vao so nguyen b=’); readln(b);
Tich:=a*b;
Thuong:=a/b;
Writeln(‘ Tich la ‘, tich:10);
Writeln(‘ Thuong la ‘, thuong:10:2);
Readln;
End.
14
Begin
FALSE
điều_kiện
TRUE
công_việc
End
Chú ý : Phần công việc cần thực hiện sau then và sau else trong cấu trúc if chỉ bao gồm
1 lệnh. Nếu công việc cần thực hiện bao gồm từ 2 lệnh trở lên, thì phải dùng cặp từ khóa begin
và end để nhóm các lệnh đó lại thành 1 lệnh phức.
15
FALSE
điều_kiện
TRUE
công_việc_1 công_việc_2
End
CASE <biểu_thức> OF
Danh_ sách_hằng_1 : <công_việc_1>;
Danh_ sách_ hằng_2 : <công_việc_2>;
....
Danh_ sách_ hằng_n : <công_việc_n>;
ELSE
<công_việc_0>;
END;
Trong đó
<biểu_thức> có thể nhận giá trị kiểu nguyên, kiểu logic, hay kiểu kí tự, nhưng
không thể là kiểu số thực.
Danh_ sách_ hằng_ilà một hay nhiều giá trị có thể của biểu thức.
Đầu tiên, <biểu_thức> được tính toán, nếu giá trị của nó nằm trong Danh_
sách_ hằng_i thì <công_việc_i> tương ứng với nó sẽ được thực hiện. Nếu giá trị
của biểu thức không thuộc danh sách hằng từ 1 đến n đã được liệt kê thì
<công_việc_0> sau từ khoá else (nếu có) sẽ được thực hiện.
Ví dụ: Nhập vào 1 tháng (từ 1 đến 12), cho biết số ngày của tháng.
var thang, so_ngay : byte;
begin
readln(a);
case thang of
1, 3, 5, 7, 8, 10,12:so_ngay:=31;
4, 6, 9, 11:so_ngay:=30;
2:so_ngay:=28;
end;
writeln('so ngay la : ' ,so_ngay);
readln;
end.
17
Begin
FALSE
biến_đếm > GT_cuối
TRUE End
công_việc
Chú ý: <biến_đếm>, <GT_đầu>, <GT_cuối> là dữ liệu thuộc kiểu đếm được (SỐ
NGUYÊN).
Ví dụ 1: Xuất 5 lần dòng chữ sau lên màn hình: Hello Turbo Pascal
uses crt;
var I:byte;
Begin
For I:=1 to 5 do
Writeln(‘Hello Turbo Pascal’);
End.
18
Có thể kết hợp các cấu trúc lặp for với nhau hay với các cấu trúc rẽ nhánh đã học: if…
then…else…, case…of…
* Cú pháp 2:
Hoạt động:
Đầu tiên <biến_đếm> nhận giá trị là <GT_đầu>. Nếu <biến_đếm> >= <GT_cuối> thì
<công_việc> được thực hiện sau đó <biến_đếm> tự động giảm đi một giá trị và vòng lặp cứ
thế tiếp tục đến khi nào <biến_đếm> nhỏ hơn <GT_cuối> thì vòng lặp kết thúc.
Ví dụ 1: Tính tổng S= 1 + 2 +. . . + n. với n là số nguyên dương nhập từ bàn phím
uses crt;
var i, n, s: Integer;
begin
clrscr;
readln(n);
s:=0;
for i:=n downto 1 do
s:=s+i;
writeln('tong la ',s);
readln;
end.
Ví dụ 2: In ra màn hình các ký tự chữ cái theo thứ tự đảo ngược :
uses crt;
var i: char;
Begin
For i:=’z’ downto ‘a’ do
Write(i : 3);
End.
19
Begi
n
FALSE
điều_kiện
TRUE End
công_việc
Hoạt động: Đầu tiên <điều_kiện> được kiểm tra. Nếu <điều_kiện> đúng (TRUE) thì
<công_việc> được thực hiện, sau đó quay lại kiểm tra <điều_kiện>, vòng lặp cứ như thế cho
đến khi nào <điều_kiện> sai (FALSE) thì vòng lặp kết thúc.
Chú ý:
+ Trong<công_việc>phải có lệnh để làm cho <điều_kiện> thay đổi giá trị, nếu không
vòng lặp không kết thúc.
+Vòng lặp while kiểm tra <điều_kiện>trước nên <công_việc>có thể không được thực
hiện lần nào.
Ví dụ: Lặp lại việc nhập vào hai số nguyên a,b từ bàn phím cho đến khi nào gặp hai số
mà tích của chúng là số chẵn thì dừng lại. Xuất kết quả a, b, a*b lên màn hình.
Uses crt;
Var a, b : integer;
Begin
Clrscr;
Write(‘Nhap vao 2 so a,b :’); Readln(a,b);
While (a*b mod 2 =1) do
Begin
Write(‘Nhap lai 2 so a,b :’);
Readln(a,b);
End;
Write(‘Ket qua la : a =’, a, ‘b=’,b, ‘tich=’, a*b);
Readln;
End.
20
Hoạt động : Đầu tiên, <công_việc> được thực hiện và sau đó <điều_kiện> được kiểm
tra. Nếu <điều_kiện> có giá trị sai (FALSE) thì vòng lặp được tiếp tục thực hiện, và cứ như
thế cho đến khi nào <điều_kiện> có giá trị đúng (TRUE) thì vòng lặp kết thúc.
Begin
công_việc
điều_kiện
FALSE
TRUE
End
Ví dụ : Lặp lại việc nhập vào hai số nguyên a,b từ bàn phím cho đến khi nào gặp hai số
mà tích của chúng là số chẵn thì dừng lại. Xuất kết quả a, b, a*b lên màn hình.
Var a, b: integer;
Begin
Repeat
Write(‘Nhap vao 2 so a,b :’); Readln(a,b);
Until (a*b mod 2 =0);
Write(‘Ket qua la : a =’, a, ‘b=’,b, ‘tich=’, a*b);
Readln;
End.
Chú ý:
Trong<công_việc>phải có lệnh để làm cho <điều_kiện> thay đổi giá trị, nếu không
vòng lặp không kết thúc.
Vòng lặp Repeat…until…thực hiện <công_việc>trước, nên <công_việc>luôn được
thực hiện ít nhất 1 lần.
21
Ví dụ : Tính tổng các số từ 1 đến N, với N là số nguyên được nhập từ bàn phím
Trường hợp 1 : dùng cấu trúc FOR
Var i, n, tong : integer;
Begin
Write(‘Nhap vao so nguyen N’); Readln(n);
tong:=0;
For i:=1 to n do
tong :=tong+i;
Write(‘Tong la : ’, tong:5);
Readln;
End.
VII. MẢNG
Biến mảng: Là biến chứa nhiều phần tử cùng kiểu dữ liệu.
1. MẢNG 1 CHIỀU
Là một dãy các phần tử cùng kiểu dữ liệu, mỗi phần tử được đánh dấu bằng một vị trí
xác định. Ví dụ: Mảng a gồm 6 phần tử: 5 3 6 8 1 4
Giá trị 5 3 6 8 1 4
Vị trí 1 2 3 4 5 6
5 3 6 8 1
4 9 7 10 2
1 8 6 3 5
Ta có:
a[2,3] có giá trị là 7
Phần tử lớn nhất là a[2,4]
2.2. Cách nhập/xuất mảng 2 chiều:
var A:array[1..50,1..50] of Integer;
i,j,N,Max,k,c,M:Integer;
begin
write('So hang cot:');readln(N,M);Max:=0;
for i:=1 to N do
for j:=1 to M do
begin
write('A[',i,',',j,']=');readln(A[i,j]);
end;
for i:=1 to N do {Xuất ra màn hình}
begin
for j:=1 to M do
write(A[i,j]);
end;
end.
24
VIII. XÂU KÝ TỰ
Để xử lý các chuỗi văn bản, Pascal đưa ra một kiểu dữ liệu mới gọi là xâu ký tự và được
định nghĩa bằng từ khóa STRING. Xâu ký tự là dữ liệu bao gồm một dãy các ký tự trong bảng
mã ASCII.
1. Cách khai báo:
Var ten_xau: STRING[độ dài của xâu];
hoặc Var ten_xau: string;
Xâu ký tự trong bộ nhớ nó chiếm số byte bằng số ký tự cực đại được khai báo cộng với
byte đầu tiên chứa số ký tự hiện có của xâu. Độ dài tối đa của xâu ký tự là 255.
2. Cách nhập/xuất:
Cách đọc hay viết kiểu STRING cũng tương tự như các kiểu dữ liệu khác, ta sử dụng
các thủ tục READ, hoặc WRITE.
Ví dụ: Readln(st);
Writeln(st);
3. Truy cập từng phần tử của xâu ký tự:
Tương tự mảng 1 chiều: thông qua tên biến kiểu STRING và chỉ số của nó.
Ví dụ: St := 'Le Thanh Lam';
write(st[4]);
Kết quả: cho ra chữ T.
4. Các thao tác trên xâu ký tự:
4.1. Phép cộng xâu:
Ví dụ: st1:=’Le’; st2:=’Thanh’;
st=st1 + st2;
Kết quả: st = ‘Le Thanh’
4.2. Phép so sánh:
Hai xâu ký tự có thể so sánh với nhau bằng các phép so sánh =, >, <…
Nguyên tắc so sánh thực hiện như sau, chúng sẽ đem từng ký tự tương ứng với nhau để
so sánh, xâu nào có ký tự có số thứ tự trong bảng mã ASCII lớn hơn thì xâu đó lớn hơn.
Hai xâu ký tự được gọi là bằng nhau khi chúng hoàn toàn giống nhau (có độ dài như
nhau).
Ví dụ: ‘FILENAME’ = ’FILENAME’
5. Các thủ tục và hàm chuẩn xử lý xâu ký tự:
5.1. Hàm length(st):
Cho độ dài thực của xâu ký tự.
Ví dụ: st:=’le thanh’ thì LENGTH(st) cho bằng 8.
25
5.2. Thủ tục DELETE(st, pos, num): xóa num ký tự trong xâu st kể từ vị trí pos
Ví dụ: st= ‘FILENAME’; Delete(st,5,4);
Kết quả: st = ‘FILE’
5.3. Thủ tục INSERT(obj, st, pos):
Thủ tục cho kết quả bằng cách chèn xâu ký tự có tên là Obj vào xâu st tại vị trí pos,
những ký tự đứng sau pos sẽ được dời về phía sau của xâu ký tự obj.
Ví dụ: obj:= 'Thanh '; st:='Le Lam'; INSERT(obj,st,4);
Kết quả: st=’Le Thanh Lam’;
5.4. Thủ tục STR(value, st):
Thủ tục này thực hiện việc chuyển đối giá trị kiểu số(value) sang dạng xâu ký tự và gán
cho biến st.
Ví dụ: n là một só nguyên có giá trị: n:=150;
STR(n:5,st) sẽ cho kết quả xâu st là: st=’ 150’;
5.5. Thủ tục VAL(st, value,code):
Đổi một xâu ký tự st sang dạng số và gán cho biến value, nếu biến đổi thành công thì
code sẽ nhận giá trị bằng 0, ngược lại thì cho giá trị khác không.
Ví dụ: VAL(‘123’,value,code) lúc này code sẽ nhận giá trị bằng 0 và value=123
5.6. Hàm COPY(st, pos, num):
Sao chép trong xâu st, num ký tự tại vị trí pos.
Ví dụ: st=’Le Thanh Lam’; COPY(st,4,5) ‘Thanh’;
5.7. Hàm CONCAT(s1,s2,…,sn):
Hàm cho ra 1 xâu mới bằng cách nối đuôi các xâu s1,s2,…,sn lại với nhau.
Ví dụ: CONCAT(‘Le ’,’Thanh ‘, ‘Lam’) ‘Le Thanh Lam’;
5.8. Hàm POS(st1,st2):
Hàm cho ta vị trí tìm thấy đầu tiên của xâu s1 trong xâu s2.
Ví dụ: POS(‘Lam’,‘Le Thanh Lam’) 10;
5.9. Hàm Length(st): Cho kết quả là một số nguyên chỉ chiều dài của chuỗi st.
Ví dụ: lenght('PASCAL') 6
5.10. Hàm UPCASE(Ký_tự): Đổi Ký_tự thành "KÝ_TỰ" in hoa.
10 Readln( f , n);
5 3 6 8 1 4 9 7 10 2 For i :=1 to n do
Read( f , a[i]);
- Hàm EOF(<tên biến>): Boolean;
Cho kết quả là True nếu con trỏ tập tin ở cuối tập tin. Người ta dùng hàm này để kiểm
tra tình trạng hết tập tin hay chưa.
- Hàm EOLN(<tên biến>): Boolean;
Cho kết quả là True nếu con trỏ tập tin ở cuối dòng.
- Hàm FILEPOS(<tên biến>): Integer;
Cho kết quả là một số nguyên chỉ vị trí hiện tại của con trỏ tập tin.
- Hàm FILESIZE(<tên biến>): Integer;
Cho kết quả là một số nguyên chỉ số lượng phần tử có trong tập tin. FileSize nhận giá trị
0 khi không có một phần tử nào. Để đưa con trỏ về cuối tập tin ta có thể dùng lệnh:
Seek(<tên tệp>, FileSize(<tên tệp>));
- Thủ tục SEEK(<tên biến>, n)
Biến n là một biến số nguyên chỉ số thứ tự của phần tử trong tập tin. Phần tử thứ nhất có
số thứ tự là 0. Thủ tục này dịch con trỏ tập tin đến vị trí thứ n của tập tin.
3.3. Ghi dữ liệu ra tệp
ASSIGN(<tên biến>, <tên tệp>);
REWRITE(<tên biến>);
WRITE(<tên biến>, <nội dung>);
CLOSE(<tên biến>);