Bài 2. Các thành phần cơ bản

1. Bộ ký tự, từ khóa, tên

a. Bộ ký tự, ký hiệu trong ngôn ngữ Pascal

  • 26 chữ cái latin lớn: A,…,Z
  • 26 chữ cái latin nhỏ: a,…,z
  • Dấu gạch dưới: _
  • Bộ chữ số thập phân: 0,…,9
  • Các ký hiệu toán học: +, , *, /, =, <, >, (, )
  • Các ký hiệu đặc biệt: ., ,, , :, ;, [, ], ?, %@, |, !, &, #, $, {, }
  • Khoảng trắng - ký tự cách   .

b. Từ khóa

Các từ khoá là các từ dành riêng của Pascal mà người lập trình có thể sử dụng chúng trong chương trình để thiết kế chương trình. Không được dùng từ khoá để đặt cho các tên riêng như tên biến, tên kiểu, tên hàm…

Một số từ khoá của Pascal gồm:

And  External   Mod   Shr  Array  File   Nil  String  Begin  For   Not   Then  Case   Function  Object  To  Const   Goto  Of  Type Constructor   If   Or  Unit  Div   Implementation   Packed   Until  Do   In   Procedure   Uses  Downto   Inline   Program  Var  Else   Interface   Record   Virtual  End   Label   Repeat   While  Set   Shl   With   Xor

c. Tên

Tên dùng để đặt cho tên chương trình, hằng, kiểu, biến, chương trình con… Tên được chia thành 2 loại:
  • Tên chuẩn đã được PASCAL đặt trước, chẳng hạn các hàm số SIN, COS, LN,… hằng số PI, kiểu INTEGER, BYTE, REAL
  • Tên do người dùng tự đặt.
Quy tắc đặt tên:
  • Dùng bộ chữ cái, bộ chữ số và dấu gạch dưới để đặt tên
  • Bắt đầu bằng chữ cái hoặc dấu gạch dưới ( _ ) sau đó là chữ cái hoặc chữ số.
  • Không có khoảng trống ở giữa tên
  • Không được trùng với từ khoá.
  • Độ dài tối đa của tên là 127 ký tự, tuy nhiên cần đặt sao cho tên gọn và có ý nghĩa.
  • Pascal không bắt lỗi việc đặt tên trùng với tên chuẩn, nhưng khi đó ý nghĩa của tên chuẩn không còn giá trị nữa => ko nên đặt trùng tên chuẩn.
Lưu ý: Pascal không phân biệt chữ hoa và chữ thường trong từ khóa, tên chuẩn hay tên người dùng đặt. Ví dụ “BEGIN” hay “Begin” hay “BeGin” là như nhau. Tuy nhiên chúng ta nên tập thói quen viết một cách thống nhất tên trong toàn bộ chương trình.

2. Dấu chấm phẩy và lời chú thích

a. Dấu chấm phẩy

Dấu chấm phẩy ( ; )dùng để ngăn cách giữa các câu lệnh. Sau một câu lệnh phải có dấu chấm phẩy.
Ví dụ: Write(‘Nhap so a:’); Readln(a);

b. Lời chú thích

Lời chú thích có thể đặt bất cứ vị trí nào trong chương trình, nhưng phải nằm trong cặp dấu { và } hoặc (* và *).
Ví dụ:
{Day la loi chu thich}
(*Day cung la mot loi chu thich*)

3. Hằng, kiểu, biến

a. Hằng

Hằng là một đại lượng không đổi trong quá trình thực hiện chương trình. Có hai loại hằng là hằng chuẩn và hằng do người dùng định nghĩa.
  • Hằng chuẩn là hằng do Pascal định sẵn, ví dụ hằng số PI, hằng số chỉ màu RED=4,… Người sử dụng không cần định nghĩa lại nếu thấy không cần thiết. Các hằng này được Pascal định nghĩa sẵn trong các Unit. Cần tham khảo hướng dẫn (help) đối với mỗi Unit để biết trong Unit có các hằng nào đã được định nghĩa.
  • Hằng do người dùng định nghĩa thông qua việc khai báo.
 
Cú pháp:
CONST <ten_hang_1>=<gia_tri_hang_1>;
…
<ten_hang_n>=<gia_tri_hang_n>;

 

Ví dụ:
CONST a=5;
ch=’Q’;
…

b. Kiểu

Một kiểu dữ liệu là một tập hợp các giá trị mà một biến thuộc kiểu đó có thể nhận được và một tập hợp các phép toán có thể áp dụng trên các giá trị đó. Có hai loại kiểu là kiểu chuẩn và kiểu do người dùng định nghĩa.
 
*/ Một số kiểu dữ liệu chuẩn:
– Kiểu số nguyên

kiểu dữ liệu trong Pascal

– Kiểu số thực

kiểu dữ liệu trong Pascal

– Kiểu ký tự / chuỗi ký tự
kiểu dữ liệu trong Pascal* Kiểu do người dùng định nghĩa:
Cú pháp:
TYPE <ten_kieu> = <cac_thanh_phan_cua_kieu>;

Ví dụ:
TYPE Hoaqua=(tao,mit,dua,oi);
che=(buoi,thapcam);
…

c. Biến

– Biến là một ô nhớ trong bộ nhớ của máy tính, giá trị của biến có thể thay đổi trong quá trình thực hiện chương trình. Chương trình quản lý biến thông qua tên biến và mỗi biến tương ứng với một kiểu dữ liệu nhất định.
– Cú pháp khai báo biến:
VAR <ten_bien>:<kieu_du_lieu>;

Ví dụ:
VAR a:integer;
b,c:real;
qua:Hoaqua;
(* với Hoaqua la kieu du kieu da dinh nghia *)
…

4. Phép toán, Biểu thức, Câu lệnh

a. Phép toán

*/ Phép toán trên kiểu số
Phép toán   Ý nghĩa                 Ví dụ
------------------------------------------------------
-           Lấy đối số              Đối số của 2 là -2
+           Cộng                    10 + 9 -> 19
-           Trừ                     10 - 9 -> 1
*           Nhân                    10 * 9 -> 90
/           Chia                    10 / 4 -> 2.5
Div         Chia lấy phần nguyên    10 div 3 -> 3
Mod         Chia lấy phần dư        10 mod 3 -> 1

(Chú ý: Div và Mod chỉ áp dụng cho kiểu nguyên)

 

*/ Một số hàm số, thủ tục

Hàm         Ý nghĩa                            Ví dụ
------------------------------------------------------------
ABS(x)      Trị tuyệt đối x                    Abs(-2) -> 2
SQR(x)      Bình phương x                      Sqr(2) -> 4
SQRT(x)     Căn bậc hai x                      Sqrt(9) -> 3
EXP(x)      Hàm e^x                            Exp(3) -> e^3
LN(x)       Hàm ln(x)                          Ln(2) ->ln2
SIN(x)      Hàm lượng giác                     Sin(PI) -> 0
COS(x)      Hàm lượng giác                     Cos(PI) -> 1
ARCTAN(x)   Hàm lượng giác                     Arctan(0) ->0
INC(x)      Tăng x lên 1 đơn vị <=> x:=x+1;    INC(1) -> 2
DEC(x)      Giảm x xuống 1 đơn vị <=> x:=x-1;  DEC(5) -> 4
SUCC(x)     Cho giá trị tiếp theo của x        succ(5) cho KQ 6
PRED(x)     Cho giá trị trước đó của x         PRED(5) cho KQ 4
ROUND(x)    Làm tròn lên                       Round(8.6) -> 9
TRUNC(x)    Làm tròn xuống                     Trunc(8.6) -> 8
ORD(x)      Lấy mã ASCII ký tự                 Ord(‘a’) -> 97
CHR(x)      Cho ký tự có mã ASCII              Chr(65) -> ‘A’
ODD(x)      Kiểm chẳn lẽ                       Odd(5) -> True

 

*/ Một số phép toán logic: AND, OR, XOR, NOT.

X       Y       X OR Y      X AND Y     X XOR Y     NOT X
---------------------------------------------------------------------
FALSE   FALSE   FALSE       FALSE       FALSE       TRUE
FALSE   TRUE    TRUE        FALSE       TRUE        TRUE
TRUE    FALSE   TRUE        FALSE       TRUE        FALSE
TRUE    TRUE    TRUE        TRUE        FALSE       FALSE

 

Lưu ý:

– Các phép toán so sánh (<> khác, = bằng, > lớn hơn, < nhỏ hơn >= lớn hơn hoặc bằng, <= nhỏ hơn hoặc bằng) luôn trả về kiểu Boolean.
– Các phép toán logic còn áp dụng trên kiểu số nguyên, trên cớ sở biểu diễn số nhị phân của các số nguyên.

b. Biểu thức

– Biểu thức là một phần của câu lệnh bao gồm hằng, biến, hàm liên kết với nhau bằng các phép toán và các dấu ngoặc đơn.

Ví dụ: (-b+sqrt(delta))/(2*a)

– Thứ tự thực hiện các phép toán trong biểu thức:

1. Biểu thức trong ngoặc đơn
2. Phép gọi hàm
3. NOT,
4. *, /, DIV, MOD, AND
5. +, -, OR, XOR
6. =, <>, <=, >=, <, >, IN

– Quy ước thứ tự ưu tiên:

+ Qui tắc 1: Các phép toán nào có ưu tiên cao hơn sẽ được tính trước.
+ Qui tắc 2: Trong các phép toán có cùng thứ tự ưu tiên thì sự tính toán sẽ được thực hiện từ trái sang phải.
+ Qui tắc 3: Phần trong ngoặc từ trong ra ngoài được tính toán để trở thành một giá trị.

c. Câu lệnh

– Câu lệnh xác định một công việc mà chương trình phải thực hiện để xử lý các dữ liệu đã được mô tả và khai báo. Có 2 loại câu lệnh:
+ Câu lệnh đơn: Là câu lệnh không chứa các câu lệnh khác.
+ Câu lệnh có cấu trúc: gồm các câu lệnh ghép, câu lệnh rẽ nhánh câu lệnh điều khiển lựa chọn, câu lệnh lặp,…

Lưu ý: Câu lệnh ghép là một nhóm các câu lệnh đơn cần thực hiện liên tiếp và được đặt trong cặp từ khóa beginend; 

*/ Một số câu lệnh đơn:
– Lệnh gán:

Cú pháp:

<ten_bien>:=<bieu_thuc>;

Ví dụ:

a:=5+4/3;
b:=c+d/e;

Lưu ý:
+ Khi một giá trị được gán cho biến, nó sẽ thay thế giá trị trước đó của biến đã lưu.
+ Biểu thức ở bên phải và bên trái lệnh gán phải có cùng kiểu dữ liệu.

– Lệnh đọc dữ liệu

Lệnh đọc dữ liệu là lệnh gán giá trị cho biến khi ta nhập từ bàn phím. Có 3 mẫu viết
Read(Biến1, Biến2,…, BiếnN);
{có thể dùng dấu cách hoặc phím enter để lần lượt nhập dữ liệu cho các biến}
Readln(Biến1, Biến2,…, BiếnN);
{phải dùng phím enter để lần lượt nhập dữ liệu cho các biến}
Readln;
{Bắt máy dừng lại chờ nhấp phím enter thường để làm dừng màn hình cho ta xem kết quả}

Lưu ý: Chúng ta không nên dùng lệnh read để nhập dữ liệu cho các biên mà nên nhập bằng lệnh readln vì khi nhập dữ liệu cho các biến bằng lệnh read có thể sẽ dẫn đến tình trạng trôi lệnh (tức là một số lệnh không được thực hiện).

– Lệnh viết dữ liệu ra màn hình:
Có 3 mẫu viết:

Write(Value1,Value2,…,ValueN);
{ viết các mục ra, con trỏ nằm ở cuối dòng}
Writeln(Value1,Value2,…,ValueN);
{ viết các mục ra, con trỏ nằm ở đầu dòng tiếp theo}
Writeln;
{ chỉ đưa con trỏ xuống dòng tiếp theo}
trong đó: các value là các biến, hằng, giá trị hay chuỗi ký tự (phải đặt trong cặp nháy đơn).
{riêng dấu ‘ ta xuất bằng cách ghi 2 dấu ”}

Viết có quy cách:
– Đối với kiểu số thực:<độ rộng>:<số chữ số thập phân>;
Ví dụ: write(a:4:5);
– Đối với các kiểu dữ liệu khác:<độ rộng>;
Ví dụ: write(b:4);{với b là số nguyên}

Khi số chữ số của biến nhiều hơn với độ rộng thì số đó sẽ được xuất ra toàn bộ.

Ví dụ: b có giá trị là 12345.
Khi ta viết lệnh write(b:4);
12345

– Một số lệnh khác
Clrscr; Lệnh xóa màn hình và đưa con trỏ về góc trên bên trái
Gotoxy(x,y); đặt con trỏ tới tọa độ (x,y)
Trong đó x: cột từ 1->80; y: hàng từ 1->25.