CHƯƠNG 1: GIỚI THIỆU NGÔN NGỮ PASCAL & TURBO PASCAL
I. GIỚI THIỆU NGÔN NGỮ PASCAL & TURBO PASCAL
1. Ngôn ngữ Pascal
Pascal là ngôn ngữ lập trình cấp cao do giáo sư Niklaus Wirth (trường đại học kỹ thuật Zurich, Thụy sĩ)
sáng tác và công bố vào năm 1970, với tên Pascal để kỷ niệm nhà toán học người Pháp Blaise Pascal thế kỷ
17. Lúc đầu, Pascal được sáng tác ra với mục đích dạy học cho sinh viên ở các trường đại học: Nó giúp cho
sinh viên cũng như những người mới học lập trình có được thói quen viết một chương trình có cấu trúc sáng
sủa, rõ ràng, dễ hiểu và dễ đọc. Pascal là một ngôn ngữ lập trình có cấu trúc thể hiện trên 3 phương diện:
- Về mặt dữ liệu: Ngoài các kiểu dữ liệu đơn giản, Pascal còn có các kiểu dữ liệu có cấu trúc và
người dùng có thể xây dựng thêm các kiểu dữ liệu phức tạp từ các kiểu đã có.
- Về mặt câu lệnh: Từ các câu lệnh đơn giản và lệnh có cấu trúc ta có thể nhóm chúng lại với
nhau để thành câu lệnh phức tạp hơn gọi là lệnh hợp thành hay lệnh ghép.
- Về mặt chương trình: Một chương trình có thể chia thành các modun chương trình độc lập
(chương trình con).
2. Turbo Pascal
Khi mới ra đời Pascal chỉ dùng trong việc giảng dạy và học tập nhưng dần dần các ưu điểm của
nó được phát huy và trở thành ngôn ngữ lập trình mạnh, được thương mại hóa rất nhanh. Từ Pascal
chuẩn ban đầu đã được nhiều hãng cải tiến với nhiều thêm bớt khác nhau:
* ISO Pascal (được gọi là Pascal chuẩn, ISO: International Standards Organization)
* ANSI Pascal (American, National Standard Institut)
* Turbo Pascal của hãng Borland
* IBM Pascal của hãng Microsoft
* UCSD Pascal (University of California at San Diego)
Turbo Pascal là sản phẩm của hãng Borland (Mỹ) được dùng phổ biến nhất trên thế giới vì nó
có những ưu điểm: Tốc độ dịch nhanh, các cải tiến so với Pascal chuẩn đã đáp ứng được nhiều yêu
cầu của người sử dụng, không ngừng cải tiến nâng cao.
II. CÁCH SỬ DỤNG TURBO PASCAL
1. Gọi Turbo Pascal
Giả sử các chương trình của Pascal đã được cài đặt và thiết lập đường dẫn, để gọi Turbo Pascal
chỉ cần gõ lệnh:
TURBO
Muốn chọn một lệnh để thi hành thì thực hiện:
1. Gõ phím F10 để vào menu bar
2. Dùng phím , chọn nhóm lệnh, gõ Enter. Một menu popup sẽ buông xuống.
3. Dùng phím , để đặt thanh sáng trên lệnh cần thi hành, gõ Enter.
Muốn thoát khỏi menu thì gõ phím ESC.
Đối với những lệnh thường sử dụng (mở tập tin, lưu tập tin, sao chép, xóa, thi hành chương trình...) thì
ngoài cách chọn lệnh trong hệ thống menu, Pascal còn cung cấp một hệ thống các phím gõ tắt để chọn lệnh
nhanh.
2. Mở tập tin: F3 (hoặc lệnh File, Open)
Muốn mở một tập tin thì gõ phím F3 (hoặc File, Open). Pascal sẽ mở hội thoại:
Name: Cho nhập tên tập tin cần mở theo dạng: [Drive:] [Path] FileName
Files: Liệt kê các tập tin có trong thư mục hiện hành và cho chọn tập tin để mở.
Open: Mở thêm một cửa sổ soạn thảo và đưa nội dung của tập tin có tên trong hộp Name vào
cửa sổ đó.
Replace: Mở tập tin có tên trong hộp Name vào ngay cửa số hiện hành. Trong trường hợp này
thì tập tin hiện hành sẽ bị đóng lại. Nếu tập tin chưa được ghi vào đĩa hoặc có cập nhật mà chưa ghi
lại thì Pascal sẽ thông báo:
* Chọn Yes để lưu tập tin cũ.
* Chọn No: Không lưu.
* Cancel: Hủy bỏ lệnh.
3. Lưu tập tin vào đĩa: F2 (hoặc lệnh File; Save)
Muốn lưu tập tin vào đĩa thì gõ phím F2 (hoặc File; Save).
Nếu tập tin đã có tên thì tiến hành lưu, ngược lại thì Pascal sẽ cho hiện hộp thoại để đặt tên:
Save file as: Cho nhập tên tập tin cần lưu theo dạng: [Drive:][Path][FileName]
Files: Danh sách tên các tập tin đã có trong thư mục hiện hành.
Lưu ý: Nếu chọn tên tập tin trong danh sách Files thì nội dung của tập tin được chọn sẽ bị xóa
bỏ để thay bởi nội dung mới.
4. Lưu tập tin vào đĩa với tên khác: lệnh File; Save as
Lệnh File; Save as sử dụng trong trường hợp tập tin hiện hành đã có tên nhưng muốn lưu nội
dung của nó vào đĩa với cái tên khác. Hộp hội thoại của lệnh File; Save as giống như lệnh File Save.
5. Hệ thống trợ giúp của Pascal
Turbo Pascal có một hệ thống trợ giúp rất hoàn hảo và cảm ngữ cảnh. Các lệnh trợ giúp ghi trong
nhóm Help. Từ menu Help có thể tìm được những thông tin trợ giúp về cách sử dụng chương trình.
Các phím sử dụng xem trợ giúp thường dùng:
F1: Xem thông tin trợ giúp.
Ctrl-F1: Trợ giúp theo ngữ cảnh
6. Các phím soạn thảo
Home: Đưa con trỏ về đầu dòng.
PgUp: Cuộn lên một màn hình.
Delete: Xóa ký tự hiện hành.
Ctrl-Y: Xóa dòng hiện hành.
Backspace: Xóa ký tự bên trái.
Ctrl-Home: Đầu trang màn hình.
Ctrl+PageUp: Đầu văn bản.
End: Đưa con trỏ về cuối dòng.
PgDn: Cuộn xuống một màn hình.
Insert: Đổi chế độ viết Chèn, viết Đè.
Ctrl-QY: Xóa từ con trỏ đến cuối dòng.
Spacebar: Gõ ký tự trắng.
Ctrl-End: Cuối trang màn hình.
Ctrl-PageDown: Cuối văn bản.
7. Các lệnh xử lý khối
Ctrl-KB: Đầu khối
Ctrl-KH: Bật/Tắt khối
Ctrt-KV: Di chuyển khối
Ctrl-KW: Ghi khối ra file
Ctrl-KP: In một khối
Ctrl-KK: Cuối khối
Ctrl-KC: Sao chép khối
Ctrl-KY: Xóa khối
Ctrl-KR: Đọc file
8. Chạy chương trình: Ctrl-F9.
9. Xem kết quả: Alt-F5.
10. Thoát khỏi Turbo Pascal trở về MS-DOS: Alt-X
III. CÁC THÀNH PHẦN CƠ BẢN CỦA PASCAL
1. Bộ chữ viết, từ khóa, tên
a. Bộ chữ viết:
Ngôn ngữ Pascal cũng như các ngôn ngữ khác được xây dựng với bộ chữ viết (ký tự) sau:
- Bộ 26 chữ cái la tinh: 26 chữ cái lớn: A, B, C, ... Z
26 chữ cái nhỏ: a, b, c, ... z
- 10 chữ số thập phân: 0, 1, 2, 3, 4,5, 6, 7, 8, 9
- Ký tự gạch nối _ (cần phân biệt với dấu trừ -).
- Các ký hiệu Toán học: + , -, * /, =, <, >, (, )...
- Các ký hiệu đặc biệt: . , ; : [ ] ? % @ \ | ! & # $ { }
- Dấu cách (spacebar) hay khoảng trống.
b. Từ khóa (Key word):
Các từ khóa 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 tùy theo ý nghĩa của từng từ và không được dùng từ khóa để đặt cho các tên của riêng
mình. Các từ khóa phải được dùng đúng cú pháp qui định. Đó là các từ:
ABSOLUTE
EXTERNAL
SHR
MOD
AND
NIL
FILE
STRING
ARRAY
NOT
FORWART
FOR
THEN
OBJECT
BEGIN
TO
CASE
OF
FUNCTION
TYPE
CONST
GOTO
OR
UNIT
IF
PROCEDURE
IN
VAR
INLINE
DOWNTO
WHILE
INTERRUPT
END
SHL
CONSTRUCTOR
PACKED
DESTRUCTOR IMPLEMENTATION
USES
DIV
PROGRAM
DO
RECORD
VIRTUAL
INTERFACE
REPEAT
ELSE
SET
WITH
LABEL
XOR
UNTIL
c. Tên (định danh, danh biểu-identifier)
Tên dùng để đặt tên cho chương trình, tên hằng, tên kiểu, tên biến, tên chương trình con ... Có
hai loại tên:
- Tên chuẩn do Pascal định sẵn như: Sin, Cos, Pi, Char, integer, Real ...
- Tên do người lập trình đặt ra.
Chữ cái
Nguyên tắc đặt tên:
* Ký tự đầu phải là chữ cái, các ký tự sau có thể chữ cái
Chữ cái
hoặc chữ số.
* Không có khoảng trống ở giữa tên.
Chỉ có 127 ký tự đầu của tên là có ý nghĩa, tuy nhiên cần đặt tên sao cho có ý nghĩa, dễ nhận
biết và dễ nhớ. Nếu ta đặt tên trùng với tên chuẩn sẽ làm cho tên chuẩn mất tác dụng
Chữ và
số không còn
giá trị.
2. Hằng, kiểu, biến
a. Hằng (constant)
Hằng là một đại lượng không đổi trong quá trình chương trình thi hành.
Có hai loại hằng:
- Hằng chuẩn do Pascal định nghĩa sẵn như: Black = 0, Blue = 1, Green = 3.
- Hằng do người lập trình định nghĩa thông qua việc khai báo hằng theo cú pháp sau:
CONST <Tên hằng> = <giá trị của hằng>;
[{<tên hằng> = <giá trị của hằng>;}]
Thí dụ:
Const a=50;
ch='A';
d=True;
b. Kiểu (Type)
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:
- Kiểu chuẩn do Pascal định sẵn như: Kiểu số nguyên Integer, Kiểu ký tự Char, Kiểu chuỗi
String, Kiểu số thực Real ...
- Kiểu do người lập trình định nghĩa thông qua việc khai báo kiểu theo cú pháp sau:
TYPE <Tên kiểu> = < Kiểu>;
[{<Tên kiểu> = <Kiểu>;}]
Thí dụ:
Type NguyenDuong = 1..MaxInt;
Matran = Array [1..10,1..10] of Integer;
c. Biến (Variable)
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 và biến sẽ được giải phóng (hủy) khi chương trình kết thúc. Chương trình quản lý biến thông
qua tên biến và mỗi biến phải tương ứng với một kiểu dữ liệu nhất định. Biến trước khi đem vào sử dụng
phải được khai báo kiểu theo cú pháp sau:
VAR <Tên biến> [{,<Tên biến>}] : <Kiểu>;
[{<Tên biến> [{,<Tên biến>}] :<Kiểu>];
Thí dụ:
Var
a, b, c : Integer;
r : Real;
i,j : NguyenDuong;
3. Biểu thức, dấu chấm phẩy, lời ghi chú
a. Biểu thức (expression)
Biểu thức là một phần của câu lệnh bao gồm các hằng, các biến, các hàm được liên kết với
nhau bởi các phép toán (toán tử).
Thí dụ: (b+SQRT(Delta))/(2*a)
b. Dấu chấm phẩy
Dấu chấm phẩy được dùng để ngăn cách các câu lệnh.
Thí dụ:
Write(‘Nhập giá trị a ‘); Readln(a);
c. Lời giải thích
Câu giải thích dùng để diễn giải công việc mà đoạn chương trình thực hiện làm cho chương
trình dễ hiểu, trong sáng mà không làm ảnh hưởng đến kết quả của chương trình. Lời giải thích
được đặt trong cặp { } hoặc (* *). Trong lúc sửa chữa chương trình cũng có thể dùng cặp dấu { } để
tạm thời bỏ qua một đoạn nào đó của chương trình.
Thí dụ:
Program PTB1; {Giải phương trình bậc 1}
Var a,b:real;
{ Khai báo biến a,b thuộc kiểu số thực}
4. Cấu trúc của một chương trình Pascal
Chương trình Pascal gồm có 2 phần: Phần khai báo và phần thân chương trình
a. Phần khai báo: Có thể có các mục sau:
- Tên của chương trình: PROGRAM <Tên chương trình>;
- Khai báo sử dụng UNIT: USES <Tên Unit> [{<,Tên unit>}];
- Khai báo nhãn: LABEL <Tên Nhãn> [{<,Tên Nhãn>}];
- Khai báo hằng: CONST <Tên Hằng> = <Giá trị>; [{<Tên Hằng> = <Giá trị>};]
- Khai báo kiểu: TYPE <Tên Kiểu> = <Kiểu>; [{<Tên Kiểu> = <Kiểu>};]
- Khai báo biến: VAR <Tên Biến>[{<,Tên Biến>}]: <Kiểu>;
- Khai báo các chương trình con..
b. Phần thân chương trình:
Thân chương trình được bắt đầu bởi từ khóa Begin và kết thúc bởi từ khóa End và một dấu
chấm (.). Giữa Begin và End là các câu lệnh (các phát biểu).
IV. KHÁI NIỆM VỀ LẬP TRÌNH:
Chương trình: Là dãy các chỉ thị báo cho máy tính biết chính xác sẽ làm điều gì và khi nào thì
làm điều đó. Có thể xem chương trình như là một hộp đen gồm một đầu vào và một đầu ra. Đầu vào
ứng với nhập liệu (input) cung cấp dữ liệu cho chương trình. Đầu ra (output) là kết quả còn hộp đen
là qui trình xử lý.
Lập trình: Là kỹ thuật tổ chức dữ liệu và xây dựng qui trình cho máy tính làm việc thông qua
ngôn ngữ lập trình.
Tổ chức dữ liệu: Là sắp xếp những thông tin (có chọn lọc) để phục vụ cho một nhu cầu nào đó.
Qui trình xử lý: Bao gồm các chỉ thị (các lệnh cho máy) để thực hiện các công việc như tạo
thông tin ban đầu, di chuyển thông tin, tính toán, sao chép, sắp xếp, tìm kiếm, in kết quả ...
Thông tin ban đầu
Xử lý thủ công
Giải mã
Mã hóa
Biểu diễn ban đầu
1. Giải thuật (Algorithm)
Thông tin kết quả
Xử lý máy tính
Biểu diễn kết quả
Muốn xử lý một công việc nào đó bằng máy tính điều quan trọng là phải tìm ra giải thuật cho
công việc đó. Giải thuật là một tập hợp có trình tự các bước (các chỉ thị, các lệnh) tiến hành công
việc (xử lý dữ liệu) nhằm đạt được kết quả mong muốn.
Các đặc tính của giải thuật là:
- Phải kết thúc sau một số bước hữu hạn.
- Các bước đó máy chấp nhận được và thực hiện được.
- Vét hết tất cả các tình huống có thể xảy ra.
- Ap dụng được cho hàng loạt các bài toán cùng loại.
Thí dụ: Giải thuật tìm ước số chung lớn nhất (USCLN) của 2 số nguyên dương a & b
Bước 1: Nhập vào 2 số a & b.
Bước 2: So sánh a & b, chọn số nhỏ nhất gán cho USCLN
Bước 3: Nếu một trong 2 số a hoặc b không chia hết cho USCLN thì thực hiện bước 4, ngược
lại thực hiện bước 5.
Bước 4: Lấy USCLN trừ 1 được kết quả gán cho USCLN sau đó quay lại thực hiện bước 3.
Bước 5: In ra USCLN của a và b.
Quá trình lặp lại sau một số hữu hạn lần thì phải kết thúc vì qua mỗi lần thực hiện bước 4 thì
USCLN bị giảm đi 1 đơn vị.
2. Các công cụ biểu diễn giải thuật.
Có thể sử dụng các công cụ sau:
- Bằng ngôn ngữ tự nhiên sao cho gọn, gợi nhớ, có ghi các bước thực hiện.
- Bằng lưu đồ (Flowchart): Dùng hình vẽ để trình bày giải thuật. Lưu đồ là hệ thống các khối
nối lại với nhau theo một qui tắc nhất định nhằm cụ thể hóa các chuỗi công việc phải thực hiện theo
dòng lý luận tương ứng, rõ ràng, chặt chẻ, dễ theo dõi và kiểm tra.
Khối
Tác dụng
Khối bắt đầu
Khối
Tác dụng
Đường đi
Khối nhập/Xuất
Khối chương trình con
Khối thi hành
Khối nối
Khối chọn lựa
Lời ghi chú
3. Các cấu trúc điều khiển luân lý cơ bản của giải thuật
a. Cấu trúc tuần tự: Hai công việc (hoặc 2 nhóm công việc) được thực hiện tuần tự, không có
điều kiện ràng buộc.
b. Cấu trúc lựa chọn:
Dạng 1: Nếu <Điều kiện> thì <Công việc>
Dạng 2: Nếu <Điều kiện> thì <Công việc 1> Ngược lại thì <Công việc 2>
Dạng 3: Trường hợp <i> thì thực hiện <Công việc i>
c. Cấu trúc lặp:
Dạng 1: Trong khi <Điều kiện> thì <Công việc>
Dạng 2: Lặp lại <Công việc> cho đến khi <Điều kiện>
Dạng 3: Lặp với số lần xác định.
4. Khái niệm về ngôn ngữ lập trình
Sau khi tìm ra giải thuật, vấn đề còn lại là chuyển giải thuật qua một ngôn ngữ lập trình thích
hợp mà máy có thể thực hiện được tức là viết chương trình. Có nhiều ngôn ngữ lập trình đi từ thấp
đến cao.
a. Ngôn ngữ máy (Machine language).
b. Hợp ngữa (Assembler).
c. Ngôn ngữ cấp cao (High level language).Thông dịch & Biên dịch.
5. Các bước giải quyết công việc (bài toán) bằng máy tính
- Nghiên cứu công việc để tìm ra giải thuật thích hợp.
- Thể hiện giải thuật bằng lời hay lưu đồ.
- Chuyển giải thuật bằng một ngôn ngữ lập trình thích hợp (lập trình)
- Nhập chương trình vào máy. Chạy thử nghiệm.
- Chạy khai thác và đánh giá kết quả.
Chương 2: CÁC KIỂU VÔ HƯỚNG CHUẨN & CÁC LỆNH ĐƠN
I. CÁC KIỂU VÔ HƯỚNG CHUẨN
1. Các kiểu vô hướng chuẩn (standard scalar types)
Kiểu vô hướng (scalar types) là kiểu dữ liệu gồm một tập các giá trị của nó được sắp xếp theo
một thứ tự tuyến tính. Kiểu vô hướng chuẩn (standard scalar types) là một kiểu vô hướng do Pascal
định nghĩa sẵn bao gồm các kiểu sau:
Tên
Kiểu
Boolean
Char
Kích
thước
1 byte
1 byte
Miền giá trị
(Phạm vi biểu diễn)
False.. True
256 ký tự mã ASCII
ShortInt
Byte
Integer
Word
LongInt
Real
Single
Double
Extended
1 byte
1 byte
2 bytes
2 bytes
4 bytes
6 bytes
4 bytes
8 bytes
10 bytes
-128..127
0..255
-32768.. 32767
0..65535
-2147483648..2147483647
2.9E-39.. 1.7E38
1.5E-45..3.4E38
5E-324..1.7E308
3.4E-4932..1.1E4932
Ghi chú
Mỗi hằng là một trong 2 g/trị F hoặc T.
Mỗi hằng là một ký tự trong 256 ký tự
của bộ mã ASCII. Thí dụ: ‘A’, ‘B’...
Mỗi hằng là một số nguyên nằm trong
miền xác định của mỗi kiểu.
Thí dụ: -10, 50, -200, 0, 32767...
Mỗi hằng là một số thực nằm trong
miền xác định của mỗi kiểu.
Thí dụ: -350.56, 12.6, 0.555...
- Các kiểu Boolean, Char, Shortint, Byte, Integer, Word, Longint: là kiểu đếm được (ordinal type)
- Các kiểu Real, Single, Double, Extended: là kiểu không đếm được.
2. Các phép toán (toán tử) thực hiện trên các kiểu
a. Các phép toán logic tác động lên kiểu Boolean sẽ cho kết quả kiểu Boolean bao gồm: AND
(và), OR (hoặc), XOR (hoặc triệt tiêu), NOT (phủ định).
Bảng sự thật của các phép toán kiểu Boolean
X
TRUE
TRUE
FALSE
FALSE
Y
TRUE
FALSE
TRUE
FALSE
X AND Y
TRUE
FALSE
FALSE
FALSE
X OR Y
TRUE
TRUE
TRUE
FALSE
X XOR Y
FALSE
TRUE
TRUE
FALSE
X
TRUE
FALSE
NOT X
FALSE
TRUE
b. Các phép toán quan hệ cho kết quả kiểu Boolean
Phép Toán
<>
=
>=
<=
>
<
Ý nghĩa
So sánh khác nhau
So sánh bằng nhau
So sánh lớn hơn hoặc bằng
So sánh nhỏ hơn hoặc bằng
So sánh lớn hơn
So sánh nhỏ hơn
Kiểu kết quả
Boolean
Boolean
Boolean
Boolean
Boolean
Boolean
Ghi chú
Hai vế của biểu thức so sánh phải
cùng kiểu nhau (trừ kiểu thực &
kiểu nguyên) và chúng có thể là
các kiểu Integer, Real, Boolean,
char, vô hướng do người sử dụng
định nghĩa.
c. Các phép toán trên các kiểu số.
Phép toán
+
*
/
Div
Mod
Ý nghĩa
Phép lấy Đối số
Phép Cộng
Phép Trừ
Phép Nhân
Phép Chia
Phép chia lấy phần Nguyên
Phép chia lấy phần Dư
Kiểu đối số
Integer, Real
Integer, Real
Integer, Real
Integer, Real
Integer, Real
Integer
Integer
Kiểu kết quả
Như kiểu của đối số
Như kiểu của đối số
Như kiểu của đối số
Như kiểu của đối số
Real
Integer
Integer
Thí dụ: 20 div 7 = 2
(* 20 chia 7 được phần nguyên là 2*)
20 mod 7 = 6 (* 20 chia 7 dư 6 )
3. Một số hàm thường sử dụng.
Hàm
ABS(x)
SQR(x)
SQRT(x)
EXP(x)
LN(x)
SIN(x)
COS(x)
ARCTAN(x)
SUCC(n)
PRED(n)
Ý nghĩa
Lấy trị tuyệt đối của x
Bình phương của x
Lấy căn bậc 2 của x
Hàm số mũ cơ số e: ex
Hàm logarit cơ số e
Hàm lượng giác sin(x)
Hàm lượng giác cos(x)
Hàm lượng giác Arctan(x)
Succ(n) = n + 1
Pred(n) = n -1
Kiểu đối số
Integer, Real
Integer, Real
Integer, Real
Integer, Real
Integer, Real
Integer, Real
Integer, Real
Integer, Real
Integer
Integer
Thí dụ: abs(-23) = 23, abs(-157) = 157,
sqr(5) = 25,
exp(1.0) =2.71 = e
ln(e) = 1,
succ(10) = 11,
Cos(0) = 1 ...
Kiểu kết quả
Như kiểu của đối số
Như kiểu của đối số
Real
Real
Real
Real
Real
Real
Integer
Integer
sqr(-5) = 25, sqrt(25) = 5,
pred(10) = 9, Sin(0) = 0,
II. CÂU LỆNH (STATEMENT)
1. Khái niệm về câu lệnh:
Một 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ác lệnh được ngăn cách bởi dấu chấm phẩy (;). Dấu chấm phẩy chỉ có tác
dụng ngăn cách các câu lệnh chứ không phải là dấu kết thúc câu lệnh và nó không thuộc vào câu
lệnh.
Có hai loại câu lệnh:
* Câu lệnh đơn: Là lệnh không chứa các lệnh khác bao gồm lệnh gán, lệnh gọi chương trình
con loại Procedure (thủ tục), lệnh nhảy không điều kiện Goto...
* Câu lệnh có cấu trúc: Gồm các lệnh cấu trúc rẽ nhánh có điều kiện, lệnh cấu trúc chọn lựa có
điều kiện, lệnh cấu trúc lặp và lệnh hợp thành (lệnh ghép).
Lệnh hợp thành còn gọi là lệnh ghép: Bao gồm nhiều lệnh đơn, nó bắt đầu bằng từ khóa Begin
và kết thúc bởi từ khóa End;
2. Một số lệnh đơn:
a.Lệnh gán (Assignment statement): Dùng để gán giá trị của một biểu thức, một hằng vào một
biến.
Cú pháp: <Tên biến>:= <Biểu thức>;
Thí dụ:
Var x,y: Integer;
{Khai báo biến x,y thuộc kiểu số nguyên}
d: Boolean;
{Khai báo biến d là kiểu boolean}
Begin
x:=10;
y:=2*x;
d:=True;
x:=x+1;
End.
Lưu ý:
- Khi một giá trị được gán cho biến thì nó sẽ thay thế giá trị cũ của biến đã lưu trữ trước đó.
- Nguyên tắc chung khi sử dụng phép gán là kiểu của biểu thức phải cùng kiểu với biến - gọi là
tính tương thích giữa các kiểu dữ liệu. Thí dụ sau sẽ bị báo lỗi “Error 26: Type mismatch” nghĩa là
dữ liệu không tương thích.
Var x,y: Integer;
{Khai báo biến x,y thuộc kiểu số nguyên}
Begin
x:=‘A’;
{x thuộc kiểu Integer còn ‘A’ thuộc kiểu char}
y:=10/2;
{y thuộc kiểu Integer còn 10/2 thuộc kiểu real}
End.
Tuy nhiên sẽ là hợp lệ khi kiểu của biểu thức là tập hợp con của kiểu biến. Xem thí dụ sau:
Var r: Real;
{Khai báo biến r thuộc kiểu số thực}
Begin
r:=2;
{r thuộc kiểu Real còn 2 thuộc kiểu Integer}
End.
Trong một số trường hợp muốn tạo sự tương thích giữa các kiểu dữ liệu thì có thể sử dụng các
hàm biến đổi sau:
Hàm cắt TRUNC(x) cho kết quả là một số nguyên là phần nguyên của x. Chẳng hạn:
trunc(35.12) = 35, trunc(-35.65) = - 35
Hàm làm tròn ROUND(x) cho kết quả là một số nguyên bằng cách làm tròn phần thập phân của
x. Nói cách khác hàm round(x) cho ta số nguyên gần x nhất. Chẳng hạn: round(56.596) = 57,
round(56.215) = 56, round(-56.589) = -57, round(-56.231)= -56.
Hàm CHR(n) (có thể viết #n) cho kết quả là một ký tự có mã ASCII là số n. Chẳng hạn:
CHR(65) = #65 = ‘A’ , CHR(97) = #97 = ‘a’.
Hàm ORD(ch) cho kết quả là một số nguyên là mã ASCII của ký tự ch. Chẳng hạn:
ORD(‘A’)=65, ORD(‘a’)=97, ORD(‘b’)=98.
Hàm ODD(n) cho kết quả là True nếu n là một số lẻ và cho kết quả là False nếu n là số chẵn.
chẳng hạn: ODD(9) = True, ODD(10) =False.
b. Lệnh viết dữ liệu ra màn hình. Write & Writeln
* Để viết dữ liệu ra màn hình Pascal có 3 mẫu sau:
Write(Mục 1, Mục 2, Mục N);
Writeln(Mục 1, Mục 2, Mục N);
Writeln;
Trong đó: Mục 1, Mục 2, Mục N là các mục cần viết ra có thể là các loại sau:
- Biến
Thí dụ: Write(i, j, a, b);
- Hàm Thí
dụ:
Write(Sin(x));
- Biếu thức
Thí dụ: Write(2*a+b);
- Hằng Thí dụ: Write(MaxInt);
- Giá trị của các kiểu vô hướng chuẩn. Thí dụ: Write(230, 23.56, True, ‘a’,’A’);
- Một chuỗi ký tự. Thí dụ: Write(‘Hello! How are you? ’);
- Một số kiểu có cấu trúc mảng (Array).
Thủ tục Writeln(Mục 1, Mục 2, Mục N) khác thủ tục Write(Mục 1, Mục 2, Mục N) ở chỗ khi
viết xong sẽ đặt con trỏ xuống đầu dòng tiếp theo.
Thủ tục Writeln chỉ làm một việc đơn giản là đặt con trỏ xuống đầu dòng tiếp theo. Do đó lệnh
Writeln(Mục 1, Mục 2, Mục N) tương đương với lệnh ghép.
Begin
Write(Mục 1, Mục 2, Mục N);
Writeln;
End;
Nếu sau Writeln(Mục 1, Mục 2, Mục N); có Writeln thì một dòng trống sẽ được in ra.
* Viết kiểu số nguyên: Có qui cách & không qui cách.
- Cách viết không qui cách: Số được viết ra với số chỗ đúng bằng số chữ số của nó cần có.
Thí dụ:
Var
Khi chạy chương trình sẽ cho kết quả như sau:
I:Integer;
564
- 5689
Begin
I:=564;
writeln(I);
writeln(-5689);
Biến I có giá trị 564 sẽ chiếm 3 vị trí, còn - 5689 sẽ chiếm 5 vị
End.
trí (4 chữ số và dấu - ) kể từ phía trái của màn hình.
- Cách viết có qui cách: Ta bố trí số chỗ cố định để viết số nguyên bằng cách thêm dấu 2 chấm
(:) theo sau là số chỗ để viết. Pascal sẽ bố trí số nguyên từ phải qua trái nếu thừa chỗ sẽ bỏ trống
bên trái. Thí dụ:
Var
I, J :Longint;
Khi chạy chương trình sẽ cho kết quả như sau:
12345678
Begin
564
I:=564;
- 5689
J:=23584970;
2345670
Writel(12345678);
writeln(I:4);
- 5689
writeln(-5689:8);
Writeln(J:8);
Như vậy có thể nói cách viết không qui cách sẽ căn lề
End.
theo bên trái còn cách viết qui cách sẽ căn lề bên phải.
* Viết kiểu số thực: Có qui cách & không qui cách.
- Cách viết không qui cách: Sẽ viết ra số thực theo kiểu biểu diễn E mũ.
Thí dụ:
Var
R:Real;
Begin
R:=123.456;
Writeln(r);
Writeln(3.14);
End.
Khi chạy chương trình sẽ cho kết quả:
1.2345600000E+02
3.1400000000E+00
10 chỗ cho phần thập phân
2 khoảng trống ở đầu
Pascal bố trí như sau: 2 khoảng trống ở đầu, 1 chữ số phần nguyên, dấu chấm thập phân, 10
chữ số thập phân, chữ E biểu diễn số mũ, dấu của mũ và 2 số biểu diễn phần mũ.
- Cách viết có qui cách: Có hai mẫu:
* Mẫu 1: Writeln(Số thực: Số chỗ cho cả số thực: Số chỗ cho phần thập phân);
* Mẫu 2: Writeln(Số thực: Số chỗ cho cả số viết dưới dạng E mũ);
Thí dụ mẫu:
Var
R:Real;
Begin
R:=1.23456;
Writeln(R:12:6);
Writeln(73.123456789:12:6);
Writeln(3.14:12:6);
End.
Kết quả như sau:
1.234560
73.123456
3.140000
6 chỗ cho phần thập phân.
12 Chỗ cho cả số thực.
c. Lệnh đọc dữ liệu vào từ bàn phím. Read & Readln
Là thủ tục gán giá trị cho biến từ thiết bị nhập chuẩn (bàn phím) khi chạy chương trình gồm có
3 mẫu sau:
Readl(biến1, biến 2, ...., biến N);
Readln(biến1, biến 2, ...., biến N);
Readln;
Các dữ liệu nhập vào từ bàn phím cho biến 1, biến2,..., biến N được ngăn cách với nhau ít nhất
là một phím space. Kết thúc việc gán bằng phím Enter.
Read & Readln khác nhau ở chỗ là đối với Readln thì sau khi gõ phím Enter thì con trỏ sẽ
xuống đầu dòng tiếp theo còn Read thì không. Nên sử dụng Readln để dễ phân biệt dữ liệu khi
nhập.
Trong khi đọc dữ liệu cho biến Read & Readln còn kiểm tra xem dữ liệu nhập vào có phù hợp
với kiểu của biến hay không. Chẳng hạn: Nếu khai báo biến I là kiểu Integer (số nguyên) mà khi
nhập vào là 3.14 (số thực) thì Pascal sẽ báo lỗi.
Readln (không có biến) chỉ làm công việc đơn giản là tạm dừng chương trình cho đến khi nào
gõ phím Enter thì sẽ tiếp tục. Vì vậy Readln thường được sử dụng với mục đích tạm thời cho dừng
chương trình lại để xem kết quả.
Người ta thường kết hợp giữa Write và Readln để nhập dữ liệu rõ ràng tránh nhầm lẫn.