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

Lý thuyết Turbo 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 (397.56 KB, 110 trang )

Giáo trình môn tin học (Turbo PasCal). Biên soạn: Hoàng Đức Hà
Phần lý thuyết
1. Nguồn gốc
Pascal là một trong các ngôn ngữ lập trình cấp cao đợc giáo s Niklaus Wirth ở trờng kĩ thuật Zurich
(Thụy Sĩ ) thiết kế và công bố vào năm 1971. Ông đặt tên cho ngôn ngữ này là Pascal để tởng nhớ đến
Blaise Pascal, nhà toán học, triết học nổi tiếng của Pháp ở thế kỉ XVII, ngời đã sáng chế ra máy tính cơ
khí đầu tiên cho nhân loại.
Ngày nay, Pascal là một trong những ngôn ngữ lập trình bậc cao u việt nhất trong lĩnh vực giảng dạy
và lập trình chuyên nghiệp.

2. Tính chất cơ bản:
a) Pascal là một ngôn ngữ có định kiểu rõ ràng :
_ Mọi biến và hằng của kiểu dữ liệu nào chỉ đợc gán các giá trị của đúng kiểu dữ liệu đó, không đợc
tự do đem gán cho các giá trị của kiểu dữ liệu khác.
_ Việc định kiểu một cách chặt chẽ nh vậy khiến cho ngời lập trình luôn luôn phải có các biểu thức
tơng thích với nhau về kiểu dữ liệu.

b) Pascal là một ngôn ngữ thể hiện t duy lập trình có cấu trúc :
_ Dữ liệu đợc cấu trúc hóa : từ dữ liệu đơn giản hoặc có cấu trúc đơn giản ngời lập trình có thể xây
dựng các dữ liệu có cấu trúc phức tạp hơn.
_ Mệnh lệnh đợc cấu trúc hóa : từ các lệnh chuẩn đã có, ngời lập trình có thể nhóm chúng lại với
nhau và đặt giữa hai từ khóa Begin và End khiến chúng trở thành một ngôn ngữ phức tạp hơn gọi là lệnh
hợp thành hay lệnh ghép.
_ Chơng trình đợc cấu trúc hóa : một chơng trình có thể chia thành các chơng trình con tổ chức theo
hình cây phân cấp. Mổi chơng trình con nhằm giải quyết một nhiệm vụ xác định cụ thể, điều này giúp
cho ngời lập trình có thể giải quyết từng phần một, từng khối một và có thể cho nhiều ng ời tham gia lập
trình, mỗi ngời phụ trách một vài khối.

3. Các phần tử cơ bản của ngôn ngữ Pascal :
a) Bộ kí tự :
_ Bộ 26 chữ Latin :


Chữ lớn : A, B, C, , Z
Chữ nhỏ : a, b, c, , z
_ Kí tự gạch nối : -
_ Bộ chữ số thập phân : 0, 1, 2, , 9
_ Các kí hiệu toán học : +, -, *, /, +, <, >, ( ), [ ]

b) Từ khóa :
_ Từ khóa chung : Program, Begin, End, Procedure, Function
_ Từ khóa để khai báo : Const, Var, Type, Array, String, Record
_ Từ khóa của lệnh lựa chọn : If Then Else, Case Of
_ Từ khóa của của lệnh lặp : For To Do, While Do
_ Từ khóa điều khiển : With, Goto, Exit
_ Từ khoá toán tử : And, Or, Not, In, Div, Mod

c) Tên chuẩn :
Trong Pascal có các tên chuẩn sau đây :
Boolean, Char, Integer, Word, Byte, Real, Text
False, True, Maxint
Trờng đại học dân lập Đông Đô _Phòng máy tính Khoa CNTT
Năm 2005
1
Giáo trình môn tin học (Turbo PasCal). Biên soạn: Hoàng Đức Hà
Abs, Arctan, Chr, Cos, Sin, Eof, Eoln
Exp, Ln, Odd, Ord
Round, Trunc, Sqr, Sqrt, Pred, Succ
Dispose, New, Get, Put, Read, Readln
Write,Writeln
Reset, Rewrite

d) Danh hiệu tự đặt :

Trong Pascal, để đặt tên cho các biến, hằng, kiểu, chơng trình con ngời ta dùng các danh hiệu. Danh
hiệu của Pascal đợc bắt đầu bằng một chữ cái, sau đó là các chữ cái, chữ số, dấu nối.

2.1. Ch ơng trình viết bằng Pascal gồm các phần sau:
Program Ten_chuong_trinh ;
(* Phần khai báo dữ liệu *)
Label
Const
Type
Var
(* Phần mô tả chơng trình con *)
Procedure
Fuction
(* Thân chơng trình chính *)
Begin

(* Các lệnh đợc viết ở đây *)
End
(* Kết thúc chơng trình *)

2. 2. Ví dụ:

Program Ve_hinh ;
Var a, x : Integer ;
{-----------------------------------------}
Procedure Hinh_chu_nhat ;
Begin
Writeln ('*******') ;
Writeln ('* *') ;
Writeln ('* *') ;

Writeln ('*******') ;
End ;
{-----------------------------------------}
BEGIN
Write ('Ve bao nhiêu hinh chu nhat : ') ; Readln (x) ;
a := 0 ;
Repeat
a := a + 1 ;
Hinh_chu_nhat ;
Until a = x ;
END.

3. Giải thích sơ l ợc từng phần của ch ơng trình:
a) Phần tiêu đề:
Cho biết tên của chơng trình
Ví dụ : Program Ve_hinh ;
Phần này luôn đợc bắt đầu bằng từ khóa Program và chấm dứt bằng dấu " ; "
Trờng đại học dân lập Đông Đô _Phòng máy tính Khoa CNTT
Năm 2005
2
Giáo trình môn tin học (Turbo PasCal). Biên soạn: Hoàng Đức Hà
Phần tiêu đề có thể không có cũng đợc.

b) Phần khai báo dữ liệu:
Khai báo một biến là xác định rõ xem biến đó thuộc kiểu dữ liệu nào. Một chơng trình Pascal thờng có các
khai báo dữ liệu sau :
Const (* Khai báo hằng *)

Type (* Khai báo kiểu dữ liệu mới *)


Var {Khai báo các biến}
Phần khai báo có thể có hoặc không, tuỳ theo nhu cầu.
Ví dụ : Chơng trình trên có các kiểu biến là a, x. Chúng thuộc kiểu dữ liệu Integer, tức là số nguyên

c) Phần khai báo chơng trình con:
Phần này mô tả một nhóm lệnh đợc đặt tên chung là một chơng trình con để khi thân chơng trình
chính gọi đến thì cả một nhóm lệnh nào đó đợc thi hành.

Ví dụ :

Procedure Hinh_chu_nhat ;
Begin
Writeln (' ******** ') ;
Writeln (' * * ') ;
Writeln (' * * ') ;
Writeln (' ******** ') ;
End ;

Phần này có thể có hoặc không tùy theo nhu cầu.

d) Phần thân chơng trình:
Nằm giữa Begin và End, là các lệnh mà chơng trình cần thực hiện. Sau từ End là dấu chấm (.) để báo
kết thúc chơng trình.
Phần này bắt buộc phải có đối với mọi chơng trình.

Ví dụ :

BEGIN
Write (' I like Pascal ') ;
END.


e) Dấu chấm phẩy:
Dấu chấm phẩy (;) đợc dùng để ngăn cách câu lệnh của Pascal và không thể thiếu đợc.

f) Lời giải thích:
Các lời giải thích đợc đặt giữa hai kí hiệu : {} hoặc (* *)
Phần giải thích này là phần trao đổi thông tin giữa ngời với ngời, máy sẽ bỏ qua
Ví dụ :

Var X : Integer ; (* Số hình vuông phải vẽ *)

Trờng đại học dân lập Đông Đô _Phòng máy tính Khoa CNTT
Năm 2005
3
Giáo trình môn tin học (Turbo PasCal). Biên soạn: Hoàng Đức Hà

Chúng ta có thể định nghĩa dữ liệu (Data) là tất cả những gì đợc máy tính xử lý. Các loại dữ liệu cần
tới máy tính xử lý có rất nhiều, tồn tại dới nhiều dạng khác nhau về bản chất, về ý nghĩa, không riêng
gì về số liệu mà còn là các kí tự, các mệnh đề logic, thể hiện qua các đối tợng cụ thể cần xử lý nh tiền l-
ơng, địa chỉ, tên tuổi, văn bản, tín hiệu... Song nếu xét về phơng diện điện tử thì máy tính chỉ hiểu các
thông tin đợc biểu diễn dới dạng mã nhị phân.Về phơng diện ngôn ngữ bậc cao thì dữ liệu đã đợc khái
quát hóa với các kiểu dữ liệu. Khi này, ta không cần quan tâm đến biểu diễn chi tiết trong máy tính của
các kiểu dữ liệu.

Một kiểu dữ liệu (Data Type) đợc định nghĩa với 2 điểm chính :
_ Một tập hợp các giá trị mà một biến thuộc kiểu đó có thể nhận đợc.
_ Trên đó xác định một phép toán.

Cần nhớ rằng một biến phải gắn liền với một kiểu dữ liệu và chỉ một mà thôi. Trong ngôn ngữ
Pascal, kiểu dữ liệu có thể rất phức tạp nhng nói chung đều đợc định nghĩa ra từ các kiểu đơn giản nhất,

không có cấu trúc.

Kiểu vô hớng (Scalar Type) hay kiểu đơn giản (Simple Type) 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. Chúng ta sẽ nghiên cứu kĩ hơn về kiểu vô hớng và
các kiểu dữ liệu phức tạp khác. Trong phần tiếp theo, sẽ nói về 5 kiểu dữ liệu vô hớng đơn giản nhất, đã
đợc định nghĩa sẵn và còn đợc gọi là kiểu đơn giản chuẩn (Simple Standar Type).


_ Trớc khi đi vào nghiên cứu các kiểu số nguyên và kiểu số thực quen biết, chúng ta hãy xét khái niệm
kiểu Logic ( Boolean ). Trong thực tế chúng ta thờng hay gặp loại đại lợng chỉ có hai giá trị : Đúng hoặc
Sai. Ví dụ một mệnh đề, một câu hỏi, một phép toán... có thể đợc xem xét xem đúng hay sai. Ví dụ khi ta
viết 3 < 1 thì đây là một mệnh đề có giá trị là Sai.
_ Theo định nghĩa, một giá trị thuộc kiểu logic Boolean là một đại lợng nhận một trong hai giá trị Logic:
TRUE (đúng) hoặc FALSE (sai). True và False là tên các giá trị đã đợc định nghĩa sẵn. Kiểu Boolean cũng
đã định nghĩa sẵn quan hệ thứ tự False < True.
_ Các phép toán sau có thể áp dụng cho các giá trị Boolean và cho ta kết quả cũng là kiểu Boolean.
+ Phép And ( phép "và" logic )
+ Phép Or ( phép "hoặc" logic )
+ Phép Not ( phép "đảo" hay "phủ định" logic )
+ Phép Xor ( phép "hoặc triệt tiêu" ).

Ví dụ1 : False And True = False
Not False = True

_ Chúng ta có thể tóm tắt quy tắc thực hiện phép And và Or nh sau :
+ Phép And chỉ cho kết quả là True khi và chỉ khi hai toán hạng đều là True.
+ Phép Or chỉ cho kết quả là False khi và chỉ khi hai toán hạng đều là False.
+ Phép Xor luôn luôn cho kết quả là True khi hai toán hạng khác nhau. Còn nếu hai toán hạng giống
nhau, Xor sẽ cho kết quả là False.
* Hai vế của biểu thức so sánh phải cùng kiểu nhau ( trừ kiểu thực và nguyên ) và chúng có thể là các

kiểu Real, Integer, Char, Boolean, Vô hớng do ngời sử dụng định nghĩa (sẽ học sau ).

Ví dụ 2 :
3 < 5 cho ta giá trị True
False < True cho ta giá trị True
3.5 > 10 cho ta giá trị False
Trờng đại học dân lập Đông Đô _Phòng máy tính Khoa CNTT
Năm 2005
4
Giáo trình môn tin học (Turbo PasCal). Biên soạn: Hoàng Đức Hà

Cách viết 3 < True là không chấp nhận đợc vì hai vế của biểu thức không cùng kiểu cho phép : 3 thuộc
kiểu số nguyên, True thuộc kiểu Boolean


Kiểu số nguyên đã đợc máy định nghĩa sẵn với từ khóa INTEGER
Một giá trị kiểu số nguyên là một phần tử của tập các số nguyên mà ta có thể biểu diễn đợc trên
máy, nghĩa là nó là một tập nhỏ của không gian các số nguyên chứ không phải tất cả mọi số nguyên đều
có thể xử lý trên máy tính đợc. Thông thờng nhất, các số nguyên đợc biểu diễn bằng hai byte (16 bit)
nên phạm vi của nó là từ -32768 đến + 32767
Các số nguyên đợc viết ra bằng các dãy chữ số 0, 1, 2,... 9 với chữ số đầu có thể là dấu dơng + hoặc
dấu âm -, hoặc không có dấu.
Ví dụ : +234, -32767, -1, 23
Maxint là tên giá trị cực đại cho phép của kiểu nguyên, tức là Maxint = + 32767.

a) Các phép tính số học đối với số nguyên:
_ Phép cộng và trừ : với kí hiệu là + và - nh thờng lệ.
_ Phép nhân : đợc kí hiệu bằng dấu *.
_ Phép chia : đợc kí hiệu bằng dấu /.
_ Phép chia lấy phần nguyên đợc thực hiện với từ khóa Div.

Ví du : 14 Div 4 cho giá trị bằng 3
_ Phép chia lấy số d của 2 số nguyên, còn gọi là Modun, đợc thực hiện với từ khóa Mod
Ví du : 14 Mod 4 cho giá trị bằng 2

_ Hàm Boolean Odd(n) cho giá trị True nếu n là một số lẻ, False nếu n là số chẳn.
* Khi thực hiện các phép tính số học đối với số nguyên, cần hết sức thận trọng xem các phép toán
đó có cho kết quả vợt ra khỏi phạm vi biểu diễn số nguyên của máy không.

Ví dụ : 32000 + 800 - 2000 = 29200
song máy tính sẽ xử lý sai vì lúc làm phép cộng giữa 32000 với 800 đã cho ra kết quả trung gian là
32800, vợt quá giới hạn 32767 của máy. Máy có thể phát hiện và báo lỗi trờng hợp quá giới hạn
này.

b) Các phép tính quan hệ đối với số nguyên:
Các số nguyên có thể so sánh với nhau và với số thực qua các phép toán quan hệ nh đã nói ở
mục trớc. Kết quả của phép toán quan hệ là kiểu Boolean tức là có giá trị True (Đúng) hoặc False
(Sai).
Ví dụ : Biểu thức 3 < 5 cho ta giá trị True

c) Mô tả số nguyên với Byte, Word, LongInt, ShortInt :
Bên cạnh cách biểu diễn số nguyên nh ở trên (biểu diễn bằng 2 byte), Pascal còn có thêm một kiểu
đơn giản chuẩn làkiểu biểu diễn số nguyên bằng một byte. Phạm vi biểu diễn số nguyên khi này là từ 0
đến 255 và đợc gọi là kiểu Byte.
Ngoài ra, Turbo Pascal từ Version 4.0 trở đi và một số Pascal khác đã đa thêm vào các định nghĩa
kiểu số nguyên mới với các từ khoá Word, ShortInt (Short Integer), LongInt (Long Integer).

Kiểu Phạm vi biểu diễn Kích thớc (byte)
Byte 0... 255 1
ShortInt -128... 127 1
Integer -32768... 32767 2

Word 0... 65535 2
LongInt -2147483648... 3147483647 4

Trờng đại học dân lập Đông Đô _Phòng máy tính Khoa CNTT
Năm 2005
5
Giáo trình môn tin học (Turbo PasCal). Biên soạn: Hoàng Đức Hà

1. Kiểu số thực (Real):
Tơng tự nh định nghĩa kiểu số nguyên, kiểu số thực là tập hợp các số thực có thể biểu diễn đợc trong
máy tính và đợc máy định nghĩa sẵn với từ khóa REAL.
Các phép toán cộng (+), trừ (-), nhân(*), chia (/) cũng nh các phép toán quan hệ (=, < >, <, >, > =,
<=) đều có thể áp dụng cho các toán hạng là số thực lẫn toán hạng là số nguyên.
* L u y : không tồn tại các phép toán Div, Mod cho kiểu số thực.
Trong máy tính, các số thực đợc biểu diễn và đợc viết dới 2 dạng : dạng bình thờng và dạng có phần
số mũ.
+ Dạng viết thập phân bình thờng nh :
3.14 3.0 -13.2 - 0.002
* L u ý : trong cách viết số thực của Việt Nam, của Pháp..., ngời ta dùng dấu phẩy. Nhng trong cách
viết số thực của Anh, Mĩ, ngời ta dùng dấu chấm
+ Dạng viết có số mũ :
Gồm 2 phần : phần định trị và phần mũ viết sau chữ E để biểu diễn số mũ cơ số 10.

Ví du : 623.12345 = 6.2312345E + 02

Do giá trị số thực có thể biểu diễn dới dạng có dấu phẩy (hay dấu chấm) di động đợc nên ngời ta còn
gọi đây là cách biểu diễn dấu phẩy động để phân biệt với cách biểu diễn số dới dạng dấu phẩy tĩnh là
cách biểu diển trong đó dấu phẩy cố định.

2. 2.Mở rộng việc mô tả và khai báo số thực :


Kiểu Phạm vi biểu diễn Kích thớc (byte)
Real 2.9E-39... 1.7E+38 6
Single 1.5E-45... 3.4E+38 4
Double 5.0E-324... 1.7E+308 8
Extended 1.9E-4951... 1.1E+4932 10

Các hàm sau đây đợc định nghĩa sẵn và đợc sử dụng với đối số là các số thực hoặc các số nguyên :
+ Abs(x) : cho ta giá trị tuyệt đối của toán hạng x : | x |. Kiểu kết quả cùng kiểu với đối số, nghĩa là
nếu x là thực thì Abs(x) cũng là số thực, nếu x là số nguyên thì Abs(x) cũng là số nguyên.
+ Sqr(x) : Cho giá trị bình phơng của x. Kiểu kết quả cùng kiểu với đối số x.
+ Các hàm sau áp dụng cho đối số nguyên hoặc thực nhng kết quả thì luôn luôn là kiểu thực :
- Sin(x), Cos(x), Arctan(x) : là các hàm lợng giác bình thờng.
- Sqrt(x) : tính căn bậc hai của x.
- Succ(x) : đối số nguyên n, cho số nguyên tiếp theo n, tức là n + 1.
- Pred(x) : đối số nguyên n, cho số nguyên trớc n, tức là n - 1.
- Odd(n) : đối số nguyên n, True nếu n lẻ, False nếu n chẵn.

Việc chuyển một số thực sang số nguyên đợc thực hiện bởi 2 hàm chuẩn : hàm làm tròn và hàm cắt :
+ Hàm cắt Trunc(x) cho ta một số nguyên là phần nguyên của x, tức là cắt bỏ đi phần lẻ thập phân
của x.Ví dụ : Trunc (3.146) = 3.
+ Hàm làm tròn Round(x) cho ta một số nguyên của x bằng cách qui tròn phần lẻ thập phân của x.
Nói cách khác, Round(x) cho ta số nguyên gần với x nhất. Ví dụ : Round (56.678) = 57.

Chúng ta có thể viết định nghĩa của Round qua Trunc nh sau :
+ Nếu x >= 0 thì Round(x) = Trunc(x + 0.5)
Trờng đại học dân lập Đông Đô _Phòng máy tính Khoa CNTT
Năm 2005
6
Giáo trình môn tin học (Turbo PasCal). Biên soạn: Hoàng Đức Hà

+ Nếu x < 0 thì Round(x) = Trunc(x - 0.5)


Máy tính điện tử không chỉ có khả năng xử lý các dữ liệu bằng số nguyên, số thực mà nó còn có
khả năng xử lý các dữ liệu kiểu kí tự nh khi ta soạn thảo văn bản, quản lý hồ sơ.
Các kí tự là tất cả các chữ viết mà ta thờng dùng nh các chữ cái a, b, c..., các chữ số từ 0 đến 9, các
dấu phân đoạn nh ;, !,... Kiểu kí tự đợc định nghĩa trong Pascal với từ khóa Char.
Một giá trị kiểu kí tự là một phần tử của một tập hữu hạn các kí tự đợc sắp xếp có thứ tự. Tất cả các
máy tính đều dùng tập kí tự nh vậy để trao đổi thông tin qua các thiết bị vào ra. Có nhiều cách sắp xếp
bộ chữ khác nhau và không tồn tại bộ chữ chuẩn cho tất cả các máy tính.
Tuy vậy một bộ mã các kí tự đợc dùng rất phổ biến để trao đổi các thông tin giữa các thiết bị nhất
là trên máy vi tính, đó là bộ mã kí tự ASCII (xem ở phần Phụ lục).
Trong bảng mã ASCII, các kí tự từ 0 đến 31 là các kí tự điều khiển, không in ra đợc, dùng để điều
khiển các thiết bị ngoại vi, điều khiển các thủ tục trao đổi thông tin. Ví dụ khi thiết bị nhận kí tự số 7
(Bel), máy sẽ ra một tiếng chuông. Kí tự số 27 (Esc) cũng thờng dùng để thoát khỏi các tình huống, để
nhận biết các mã đặc biệt khác nh điều khiển máy in bằng dãy kí tự bắt đầu là Esc...
Phần còn lại trong bảng mã ACSII bố trí toàn bộ các chữ cái A, B, C..., các chữ số từ 0 đến 9, các
dấu chấm câu, các kí tự đặc biệt... Ví dụ khi nhận kí tự số 50 máy sẽ hiện lên màn hình chữ số 2.
Riêng kí tự 127 (Del) lại đợc dùng làm kí tự điều khiển xóa. Nếu bạn dùng Editor , phím Del trên
màn hình chính là phím tạo ra mã số 127 để xóa một kí tự trên màn hình.

Có 2 hàm chuẩn là Ord và Chr cho phép thiết lập tơng quan giữa bộ mã kí tự và một tập con các số
tự nhiên
+ Ord( ) - Hàm Ord('c') cho ta số thứ tự của kí tự 'c' trong bảng mã.
+ Chr( ) - Hàm Chr(n) cho ta kí tự có số thứ tự là n.

Hàm chuẩn Pred (trớc) và Succ (tiếp theo sau) có thể áp dụng cho đối số là kí tự, kết quả là kí tự.
Giả sử Ch là một kí tự nào đó, vậy thì :
+ Hàm chuẩn Pred(Ch) cho ta một kí tự nằm trớc kí tự Ch trong bảng mã kí tự :
Pred(Ch) = Chr(Ord(Ch) - 1)

+ Hàm chuẩn Succ(Ch) cho ta một kí tự nằm sau kí tự Ch trong bảng mã kí tự :
Succ(Ch) = Chr(Ord(Ch) + 1)

1. Khai báo hằng:
Hằng là các đại lợng không thay đổi giá trị. Có các loại hằng số (nguyên và thực), hằng kí tự, hằng
Boolean. Khai báo hằng : các hằng (hằng số, hằng kítự, hằng Boolean) đợc khai báo bằng một tên đặt trong
phần khai báo Const ở đầu chơng trình.

Cách viết : Tên_hằng := Giá_trị_của_hằng ;

Một dòng khai báo hằng đợc kết thúc bằng dấu chấm phẩy. Tên hằng đợc viết theo quy tắc viết tên đã trình
bày ở chơng trớc.

Ví dụ :

Const
B = True ; (* hằng Boolean *)
A = 5 ; (* hằng số nguyên *)
Pi = 3.14 ; (* hằng số thực *)
CCC = Z ; (* hằng kí tự *)

* Các hằng giữ nguyên giá trị của nó trong suốt chơng trình.

2. Khai báo biến:
Trờng đại học dân lập Đông Đô _Phòng máy tính Khoa CNTT
Năm 2005
7
Giáo trình môn tin học (Turbo PasCal). Biên soạn: Hoàng Đức Hà
Biến (variance) là đại lợng có thể thay đổi giá trị. Tên biến của chơng trình là tên của ô nhớ cất giữ dữ liệu.
Khác với hằng, biến có thể thay đổi đựoc giá trị của nó. Các biến đợc khai báo bằng cách đặt tên các biến vào

phần khai báo biến ở đầu chơng trình, sau từ khóa Var.

Cách viết : Tên_biến : Kiểu_dữ_liệu_của_biến ;

Dấu hai chấm bắt buộc phải có để ngăn cách hai phần của khai báo biến. Dấu chấm phẩy kết thúc một
dòng khai báo.
Nhiều biến có cùng kiểu có thể đựoc khai báo với nhau bằng cách viết tên các biến đặt cách nhau qua dấu
phẩy (,) nh các biến M23, A25, AAA ở ví dụ dới đây :

Var
M23, A25, AAA : Real ;
My_name : String [ 25 ] ;
Y : Boolean ;
X : Integer ;


a) Chúng ta đã làm quen với khái niệm kiểu dữ liệu ở trên. Đối với các kiểu dữ liệu cơ sở (real, Integer,
Byte, Char, Boolean) đã đợc Pascal định nghĩa sẵn nên khi khai báo biến ta có thể dùng trực tiếp các kiểu dữ
kiệu này ngay. Còn các kiểu dữ liệu khác thì ta phải định nghĩa ra, mô tả một cách tờng minh trong phần khai
báo của chơng trình sau từ khóa Type. Sau đó sẽ khai báo các biến thuộc kiểu dữ liệu mới mô tả. Chúng ta sẽ
dần dần tìm hiểu sau này.

b) Cách khai báo

Type
Tên kiểu = Mô tả xây dựng kiểu ;

Ví dụ:

Type

SoNguyen = integer ;
Ten = String[11] ;
Tuoi = 1.. 100 ;
Color = (Red, Blue, Green)
Thu = (ChuNhat, ThuHai, ThuBa, ThuTu, ThuNam, ThuSau, ThuBay) ;

Và khi đã khai báo kiểu thì ta có quyền sủ dụng để khai báo biến.

Ví dụ:

Var
I, J : SoNguyen ;
Khach_hang : Ten ;
T : Tuoi ;
Mau : Color ;
Ngay_hoc : Thu ;


a) Chúng ta đã làm quen với khái niệm kiểu dữ liệu ở trên. Đối với các kiểu dữ liệu cơ sở (real, Integer,
Byte, Char, Boolean) đã đợc Pascal định nghĩa sẵn nên khi khai báo biến ta có thể dùng trực tiếp các kiểu dữ
kiệu này ngay. Còn các kiểu dữ liệu khác thì ta phải định nghĩa ra, mô tả một cách tờng minh trong phần khai
Trờng đại học dân lập Đông Đô _Phòng máy tính Khoa CNTT
Năm 2005
8
Giáo trình môn tin học (Turbo PasCal). Biên soạn: Hoàng Đức Hà
báo của chơng trình sau từ khóa Type. Sau đó sẽ khai báo các biến thuộc kiểu dữ liệu mới mô tả. Chúng ta sẽ
dần dần tìm hiểu sau này.

b) Cách khai báo


Type
Tên kiểu = Mô tả xây dựng kiểu ;

Ví dụ:

Type
SoNguyen = integer ;
Ten = String[11] ;
Tuoi = 1.. 100 ;
Color = (Red, Blue, Green)
Thu = (ChuNhat, ThuHai, ThuBa, ThuTu, ThuNam, ThuSau, ThuBay) ;

Và khi đã khai báo kiểu thì ta có quyền sủ dụng để khai báo biến.

Ví dụ:

Var
I, J : SoNguyen ;
Khach_hang : Ten ;
T : Tuoi ;
Mau : Color ;
Ngay_hoc : Thu ;


Biểu thức (Expression) là một công thức tính toán để có một giá trị theo một quy tắc toán học nào đó. Một
biểu thức bao gồm : toán tử (operator) và toán hạng (operand). Toán tử đựoc viết ra bằng dấu phép toán. Toán
hạng có thể là hằng, là hàm, là biến. Các phần tử của biểu thức có thể đợc phân thành số hạng, thừa số, biểu
thức đơn giản.

Ví du: 3 + PI * Sin ( x) ;


Trong ví dụ này, các toán tử (các phép toán) la phép cộng (+) và phép nhân (*). Các toán hạng là hằng số 3
và PI, là hàm Sin với đối số là biến X.
* Biểu thức số học là biểu thức có giá trị bằng số (là Integer, Byte, Real)
* Biểu thức logic Bun ( Boolean ) là biểu thức có giá trị là True hoặc False.
* Một biểu thức chứa các toán tử quan hệ ( <>, <, >, <=, >=, = ) đựoc gọi là một biểu thức Boolean đơn giản
hay một biểu thức quan hệ. Các toán hạng trong biểu thức quan hệ có thể là các số nguyên, số thực, kí tự và
chúng phải tơng thích nhau về kiểu.

Ví dụ minh họa về trình tự tính toán :

7 + 3 * 5 = 7 + ( 3 * 5 ) = 22
5 / 2 * 3 = ( 5 / 2 ) * 3 = 7.5
18 Div 4 * 4 = ( 18 Div 4 ) * 4 = 16
2 * ( 3 + 5 ) = 2 * 8 = 16

Ví du: Để giải phơng trình bậc hai ta có thể phát biểu điều kiện về các hệ số A, B, C nh sau :

Nếu ( (A = 0) And (B = 0) And (C = 0) ) = True
thì bài toán không có lời giải.
Trờng đại học dân lập Đông Đô _Phòng máy tính Khoa CNTT
Năm 2005
9
Giáo trình môn tin học (Turbo PasCal). Biên soạn: Hoàng Đức Hà

hoặc có thể viết gọn hơn :

Nếu (A = 0) And (B = 0) And (C = 0)
thì bài toán không có lời giải.



1. Câu lệnh ( Instruction, Statement ):
Bên cạnh phần mô tả dữ liệu là phần là phấn lệnh (intruction) của chơng trình. Phần này xác định các công
việc mà chơng trình phảo thực hiện để xử lý các dữ liệu đã đợc mô tả và khai báo. Các câu lệnh cách nhau
bằng dấu chấm phẩy. Câu lệnh chia ra hai loại :

_ Câu lệnh đơn giản : là những câu lệnh không chứa các lệnh khác. Đó là phép gán, lời gọi chơng trình con
loại Procedure ( thủ tục ) bao hàm rất nhiều quá trình xử lý khác nhau nh :
+ Vào dữ liệu : Read, Readln
+ Ra dữ liệu : Write, Writeln
+ Xử lý tập tin : Reset, Rewrite, Assign

_ Câu lệnh có cấu trúc : là khối lệnh, lệnh thử và rẽ nhánh, lệnh lặp.
Lệnh hợp thành hay lệnh ghép bao gồm nhiều lệnh đơn giản và có khi có cả lệnh ghép bên trong. Các lệnh
này đợc thực hiện theo thứ tự nh đã viết trong lệnh ghép Nó bắt đầu bằng từ Begin và kết thúc bằng từ End.
Mỗi một câu lệnh của Pascal bao giờ cũng đợc đặt cách nhau bằng 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 phụ thuộc vào câu
lệnh.Pascal không bắt buộc viết mỗi câu lệnh một dòng. Vấn đề là chúng ta phải trình bày chơng trình sau cho
đẹp, rõ ràng, thể hiện đợc thuật toán ...

Ví dụ : chúng ta có thể viết liền nhau trên một dòng chơng trình :

X := 2 ; Y := 3 < 5 * 8 ; Z := Pi ;

hoặc viết thành từng dòng :

X := 2 ;
Y := 3 < 5 * 8 ;
Z := Pi ;


* Phép gán :
Phép gán đợc dùng để gán giá trị của một biểu thức, một hằng vào một biến.
Phép gán đợc kí hiệu là := .

Biến := Biểu_thức ;

Vế trái của phép gán chỉ có thể là biến mà thôi.

Ví du :

X := 6 ; (* có nghĩa là biến X nhận giá trị bằng 6 *)
Y := True ; (* có nghĩa là biến Y nhận giá trị True *)
X := X + 3 ; (* có nghĩa là giá trị của X sẽ bằng giá trị của X cộng với 3. Ví dụ nếu lúc đầu X có giá
trị là 6 thì sau khi thực hiện câu lệnh này, X sẽ có giá trị là 9. Xin bạn nhớ lại cho X chỉ
là tên của một ô nhớ. X + 3 đựoc hiểu là lấy nội dung của ô nhớ X đem cộng với 3, sau
đó lại để vào ô nhớ X *)
Trờng đại học dân lập Đông Đô _Phòng máy tính Khoa CNTT
Năm 2005
10
Giáo trình môn tin học (Turbo PasCal). Biên soạn: Hoàng Đức Hà

* Tính tơng thích của các kiểu dữ liệu
Nguyên tắc chung khi dùng phép gán thì kiểu của biến và kiểu của biểu thức ở vế phải phải giống nhau.

Ví dụ : Một biến nguyên I không thể nhận một giá trị kí tự đợc.

I := 'A' ; là điều không thể chấp nhận đợc.

* Ngoại lệ :
Tuy một biến nguyên không thể nhận giá trị là một số thực nhng một số thực thì lại có thể nhận một giá trị

nguyên.

X := 6.0 ; là sai vì X là biến Integer, 6.0 là giá trị thực.
M23 := 6 ; là đúng vì M23 là biến thực, nó có thể nhận trực tiếp giá trị nguyên. M23 sẽ chứa số 6 d ới
dạng số thực 6.00000000E + 00.

2. Lệnh ghép (Compound Statement):
Một nhóm lệnh đơn giản đợc đặt giữa hai chữ Begin , End sẽ tạo thành một câu lệnh hợp thành hay lệnh
ghép với mẫu viết nh sau :

Begin
Câu lệnh 1 ;
Câu lệnh 2 ;
..................
Câu lệnh N ;
End ;

Một lệnh ghép hiểu theo một nghĩa nào đó giống nh việc ta đặt cặp dấu ngoặc đơn vào một biểu thức. Cấu
trúc Begin...End của câu lệnh ghép sẽ cho ta thấy rõ hơn tính có cấu trúc của ngôn ngữ Pascal : nhóm các lệnh
thành từng khối. Một khối lệnh chỉ có một đầu vào (qua chữ Begin) và một đầu ra (qua chữ End).

Màn hình là một thiết bị ra thông dụng nhất hiện nay. Để viết dữ liệu ra màn hình, Pascal có 3 mẫu
viết nh sau :

Write ( Item1, Item2, ..., ItemN ) ;
Writeln ( Item1, Item2, ..., ItemN ) ; (* Write Line *)
Writeln ;

Trong đó, ( Item1, Item2,..., ItemN ) ; (* Write Line *) là các mục cần viết ra có thể là một hoặc
những loại sau :

_ Biến Write ( A ) ;
_ Hàm Write ( Sin(x) ) ;
_ Biểu thức Write ( A * A + B - 2 + Cos(x) ) ;
_ Hằng Writeln ( Pi ) ;
_ Các giá trị có kiểu vô hớng chuẩn : Writeln ( Pi ) ;
Trờng đại học dân lập Đông Đô _Phòng máy tính Khoa CNTT
Năm 2005
11
Giáo trình môn tin học (Turbo PasCal). Biên soạn: Hoàng Đức Hà
_ Một số kiểu có cấu trúc nh mảng, xâu kí tự.

Cả 3 mẫu viết trên đều bắt đầu viết từ vị trí hiện tại của con trỏ màn hình. Tuy nhiên, sự khác nhau của
3 mẫu lệnh trên là vị trí của con trỏ màn hình sau khi kết thúc lệnh.
Trong mẫu viết Write ( Item1, Item2,..., ItemN ) ; sau khi viết ra các giá của Item1, Item2,..., ItemN
trên cùng một dòng màn hính, con trỏ sẽ xuống đầu dòng tiếp theo.
Còn thủ tục Writeln ( Item1, Item2,..., ItemN ) ; sau khi viết ra các giá trị của Item1, Item2,...,
ItemN, con trỏ sẽ không chuyển xuống đầu dòng tiếp theo mà đợc đặt ở vị trí sau giá trị của ItemN.
Thủ tục Writeln ; ( không có tham số ) sẽ chỉ làm một động tác đơn giản là đặt con trỏ xuống đầu
dòng tiếp theo.

Vì vậy :

Writeln ( Item1, Item2,..., ItemN ) ;

tơng tự với một lệnh ghép :

Write ( Item1, Item2,..., ItemN ) ;
Writeln ;
CáC CáCH VIếT Có QUY CáCH :


* Viết ra kiểu số nguyên :

Writeln (' 12345678 ') ;
I := 123 ;
Writeln ( I : 8 ) ;
Writeln ( -25671 : 8 ) ;

sẽ viết ra màn hình :

12345678
123
-25671

* Viết ra kiểu số thực :

Trờng đại học dân lập Đông Đô _Phòng máy tính Khoa CNTT
Năm 2005
12
Giáo trình môn tin học (Turbo PasCal). Biên soạn: Hoàng Đức Hà
Writeln ( 73.123456789 : 12 : 6 ) ;
Writeln ( R : 12 : 6 ) ;
Writeln ( 3.14 : 12 : 6 ) ;

sẽ viết ra màn hình :

____73.123456
___123.456000 (* 12 chỗ cho cả số *)
_____3.140000 (* 6 chỗ cho phần thập phân *)

Bạn cần lu ý rằng lệnh Write và Writeln có thể viết ra kiểu Boolean :


Var
OK : Boolean ;
BEGIN
OK := 3 < 5 ;
Write ( OK : 7 ) ;
END.

Kết quả cho ra :

___TRUE


Phép gán(:=) là lệnh cơ bản, đơn giản nhất để gán giá trị cho một biến ỡ trong chơng trình. Tuy nhiên để
gán giá trị cho một biến thông qua thiết bị vào(bàn phím), ta phải dùng thủ tục Read và Readln(Read Line) với
các tham số ở trong ngoặc đơn là các biến(chỉ có thể là các biến mà thôi, không giống nh các tham số của thủ
tục Write và Writeln).

Read(Biến1, Biến2,..., biếnN) ;
Readln(Biến1, Biến2,..., biếnN) ;
và Readln ; (* không có tham số *)

Khi này ta sẽ gõ vào bàn phím giá trị của biến cần đọc và phải ấn thêm nút Enter là nút đặc biệt trên bàn
phím có ý nghĩa là " chấm xuống dòng " hoặc còn đợc gọi là nút Return để báo cho máy thực hiện thủ tục
Read và Readln.
Các cụm dữ liệu gõ vào bàn phím tơng ứng với Biến1, Biến2,..., BiếnN đợc ngăn cách nhau với các dấu
cách với số lợng dấu cách không quan trọng(song ít nhất là cách một lần).

Trờng đại học dân lập Đông Đô _Phòng máy tính Khoa CNTT
Năm 2005

13
Giáo trình môn tin học (Turbo PasCal). Biên soạn: Hoàng Đức Hà
Ví dụ :

Var
X, Y : Integer ;
A, B : Real ;
BEGIN
Readln(X, Y, A, B) ;
...
END.

Giả sử ta muốn gán cho X giá trị 5, Y giá trị 33, A giá trị 1.25, và B là 85.2 trên cùng một dòng của màn
hình thì ta phải gõ vào bàn phím theo trình tự sau(số lợng dấu cách không quan trọng) :

5 33 85.2 33

Giữa các con số là các dấu cách đợc dùng để ngăn cách các số liệu khi đọc,
Trong khi đọc, thủ tục Read và Readln còn kiểm tra xem các dữ liệu gõ vào có tơng thích với kiểu dữ liệu
của biến khi khai báo hay không, nếu không máy sẽ báo lỗi
Thủ tục Readln ; là thủ tục không có tham số, máy tính chờ và chỉ chờ ta ấn phím Enter. Readln không
tham số đợc sử dụng khi bạn muốn chơng trình dừng lại ở một chỗ nào đó(ví dụ để kiểm tra hoạt động của ch-
ơng trình) cho đến khi bạn ấn phím Enter.

Xét ví dụ sau :

Var
I : Integer ;
BEGIN
I := 1* 2 * 3 * 4 * 5 ;

Writeln(I) ;
END.

Bạn muốn xem kết quả của phép tính trên ! Dù bạn có ấn Ctrl_F9 từ giờ cho tới sáng cũng không thể thực
hiện đợc điều đó. Vì kết quả của chơng trình hiện ra và biến đi rất nhanh nên " mắt thờng " của bạn không thể
nào thấy đợc. Tuy nhiên nếu ta chèn thêm dòng lệnh Readln ; vào sau Writeln(I) ; thì mọi chuyện sẽ đổi
khác !

Hai mẫu câu lệnh nh sau :

IF <Bieu_thuc_Boolean> THEN <viec_1> ;
Trờng đại học dân lập Đông Đô _Phòng máy tính Khoa CNTT
Năm 2005
14
Giáo trình môn tin học (Turbo PasCal). Biên soạn: Hoàng Đức Hà
IF <Bieu_thuc_Boolean> THEN <viec_1> ELSE <viec_2> ;

Theo lệnh này, nếu <Bieu_thuc_Boolean> nhận giá trị True thì máy sẽ thực hiện <viec_1>, còn nếu
không thì hoặc kết thúc ( tức không làm gì cả ) đối với mẫu câu thứ nhất, hoặc máy sẽ đi thực hiện lệnh khác
tức là <viec_2> trong mẫu câu lệnh thứ 2. Nh vậy mẫu thứ nhất thực ra là mẫu thứ hai thu gọn với <viec_2>
là rỗng.

Ví dụ1 : để thực hiện phép chia hai số a, b với điều kiện b < > 0, ta viết :

If b < > 0 Then t := a / b
Else Writeln (' Mẫu số bằng 0 ! Không chia đợc ! ') ;

Ví dụ 2 : tìm giá trị min và max của hai số a, b.

If a < b Then

Begin
Max := b ;
Min := a ;
End
Else
Begin
Max := a ;
Min := b ;
End ;

Chú y : trớc Else không bao giờ có dấu chấm phẩy.

Trong ví dụ này, ta thấy luôn vai trò của lệnh hợp thành ( lệnh ghép ). Giả sử ta viết một lệnh nh sau :

If a < b Then
Begin
Max := b ;
Min := a ;
End ;

Nghĩa là nếu a < b ta phải thực hiện lần lợt hai lệnh là Max := b và Min := a ( đợc đặt giữa Begin
và End ). Nếu không có Begin và End nh sau :

Trờng đại học dân lập Đông Đô _Phòng máy tính Khoa CNTT
Năm 2005
15
Giáo trình môn tin học (Turbo PasCal). Biên soạn: Hoàng Đức Hà
If a < b Then
Max := b ;
Min := a ;


thì ta phải hiểu là lệnh max := b đợc thực hiện chỉ khi a < b còn lệnh min := a đợc thực hiện trong mọi tr-
ờng hợp.
Cũng trong ví dụ này ta thấy cách viết có cấu trúc nhô ra nhô vào để bố trí chơng trình Pascal cho đẹp và
thể hiện đơc thuật toán của chơng trình. Đây là một tiêu chuẩn cần phải có cho một chơng trình viết bằng
Pascal. Chữ Begin và End tơng ứng bao giờ cũng cùng ở một cột. Tất nhiên ta có thể viết tùy ý nh sau nhng
không đẹp:

If a < b Then Begin max := b ;
Min := a ;
End Else Begin
Max := a ;
Min := b ;
End ;

L u y : cách viết lệnh If nh sau là hoàn toàn đúng :

If <Bieu_thuc_Boolean_1> Then If <Bieu_thuc_Boolean_2> Then <viec_1> Else <viec_2> ;

song rất dễ dẫn đến nhầm lẫn không biết <viec_2> tơng ứng với Else của If nào. Vì vậy nên sửa lại cho
rõ ràng nh sau :

If <Bieu_thuc_Boolean_1 > Then
Begin
If < Bieu_thuc_Boolean_2 > Then < viec_1> Else < viec_2 >
End ;

Hai mẫu câu lệnh If ở bài trớc chỉ thực hiện rẽ hai nhánh tơng ứng với 2 giá trị của biểu thức
Boolean. Việc thử và chọn một trong nhiều nhánh sẽ đợc thực hiện với câu lệnh Case nh sau :


Mẫu 1 : Mẫu 2 :
Case <Bieu_thuc> Of Case <Bieu_thuc> Of
Gia_tri_1 : <viec_1> ; Gia_tri_1 : < viec_1> ;
Gia_tri_2 : <viec_2> ; Gia_tri_2 : < viec_2> ;
.................. ..................
Trờng đại học dân lập Đông Đô _Phòng máy tính Khoa CNTT
Năm 2005
16
Giáo trình môn tin học (Turbo PasCal). Biên soạn: Hoàng Đức Hà
Gia_tri_n : <viec_n> ; Gia_tri_n : <viec_n>
End ; Else <viec_n+1> ;
End ;

Trong đó <Bieu_thuc> không còn chỉ là biểu thức Boolean nh trong lệnh If
Nó có thể là có các kiểu vô hớng đếm đợc (kể cả kiểu liệt kê, kiểu khoảng con sẽ học sau nhng
không đợc là kiểu Real ) nên nó có thể có nhiều giá trị khác nhau. Mẫu 2 sẽ thực hiện <viec_n+1> ( đợc viết
sau từ khóa Else ) nếu nh < Bieu_thuc> không rơi vào các giá trị 1, giá trị 2, giá trị n kể trên.
Cần chú ý rằng câu lệnh Case bao giờ cũng kết thúc bằng từ khóa End.

Ví dụ 1: Với I là một biến nguyên

Case I + 1 Of
1 : writeln (' So 1 ') ;
2 : writeln (' So 2 ') ;
3 : writeln (' So 3 ') ;
4 : writeln (' So 4 ') ;
End ;

Ví dụ 2: Tính số ngày của một tháng ;


Var so_ngay, thang, nam : integer ;
BEGIN
Write ('Thang : ') ; readln ( thang) ;
Write ('Nam : ') ; readln ( nam) ;
Case thang Of
4, 6, 9, 11 : so_ngay := 30 ;
2 : case nam of
0 : so_ngay := 29 ;
1, 2, 3 : songay := 28 ;
end
Else so_ngay := 31 ;
End ;
Writeln (' So ngay cua thang ', thang,' nam ', nam,' la ', so_ngay) ;
END.

Đến đây các bạn có thể hỏi liệu bài toán Giải phơng trình bậc 2 có thể dùng Case cho ba trờng
hợp của biến Delta không ? Điều này không thể đợc vì biến Delta thuộc kiểu Real, kiểu không đếm đợc.
Trờng đại học dân lập Đông Đô _Phòng máy tính Khoa CNTT
Năm 2005
17
Giáo trình môn tin học (Turbo PasCal). Biên soạn: Hoàng Đức Hà


Trớc hết chúng ta xét một ví dụ sau.

Ví dụ1: giả sử ta phải viết ra trên màn hình các số từ 0 đến 24, mỗi số chiếm một dòng :

0
1
2

...
...
23
24

Việc này có thể thực hiện bằng 25 lệnh writeln nh sau :

Writeln (0) ;
Writeln (1) ;
.
Writeln (24) ;

Cách viết này rõ ràng và tẻ nhạt trong khi nó có quy luật. Chúng ta có thể thay thế bằng cách
dùng một lệnh Writeln ( I ) trong đó I là một biến nguyên bất kỳ nhận giá trị chạy từ 0 đến 24 nh sau :

For I := 0 To 24 Do Writeln ( I ) ;

Vòng lặp For này có nghĩa là cho I chạy từ 0 ( giá trị đầu ) tới 24 ( giá trị cuối ), với mỗi giá trị
của I, máy sẽ thực hiện công việc viết sau chữ Do, ở đây là viết ra giá trị của I.

Cụ thể hơn, vòng lặp For này đợc thực hiện từng bớc nh sau :
1. Đầu tiên I lấy giá trị 0 là giá trị ban đầu. I nhỏ hơn giá trị cuôí là 24 nên lệnh Writeln ( I ) đợc
thực hiện, viết ra giá trị 0.
2. Sau đó, I nhận giá trị tiếp theo, tức là I := succ ( I ) = I + 1. Lúc này I = 1 và vẫn nhỏ hơn giá
trị cuối là 24 nên lệnh writeln ( I ) đợc thực hiện : viết ra giá trị của I ( bằng 1 ) ra màn hình.
3. Chơng trình lại quay vòng về điểm 2 cho đến khi nào I = 25, lớn hơn giá trị cuối (24) thì dừng.

Mẫu viết tổng quát của ví dụ trên là :

Trờng đại học dân lập Đông Đô _Phòng máy tính Khoa CNTT

Năm 2005
18
Giáo trình môn tin học (Turbo PasCal). Biên soạn: Hoàng Đức Hà
For Bien_dieu_khien := Gia_tri_dau To Gia_tri_cuoi Do <viec> ;

Nếu ta muốn viết các số từ 24 đến 0 ta lại viết nh sau :

For I := 24 Downto 0 Do Writeln ( I ) ;

Với mẫu viết tổng quát nh sau :

For Bien_dieu_khien := Gia_tri_dau Downto Gia_tri_cuoi Do <viec> ;

Trong mẫu 2, máy tính sẽ làm theo chiều ngợc lại, tức là theo chiều giảm của biến điều khiển :
đầu tiên biến điều khiển nhận giá trị ban đầu và sau đó thực hiện chu kì lặp nh sau : chừng nào biến điều khiển
còn lớn hơn hoặc bằng giá trị cuối thì thực hiện <viec>, sau mỗi lần thực hiện, biến điều khiển nhận giá trị tr ớc
nó, tức là :

Bien_đieu_khien := Pred (Bien_đieu_khien) ;

Ví dụ 2: tính tổng các số nguyên từ 50 đến 500 ta viết nh sau :

Var I : integer ;
Sum : real ;
BEGIN
Sum := 0 ;
For I := 50 To 500 Do Sum := Sum + I ;
(* hoặc For I := 500 Downto 50 Do Sum := Sum + I ; *)
Writeln ( ' Tong = ', Sum ) ;
END.


Ví dụ 3: viết hai dòng các chữ cái hoa và nhỏ từ 'A' đến 'Z' ra màn hình với quy cách mỗi chữ
chiếm 2 chỗ
USES CRT ; { đơn vị chơng trình CRT để dùng thủ tục Clrscr }
Var ch : char ;
BEGIN
Clrscr ;
For ch := 'A' To 'Z' Do Write (ch : 2) ;
Writeln ;
For ch := 'a' To 'z' Do Write (ch : 2) ;
Writeln ;
Trờng đại học dân lập Đông Đô _Phòng máy tính Khoa CNTT
Năm 2005
19
Giáo trình môn tin học (Turbo PasCal). Biên soạn: Hoàng Đức Hà
END.

Kết quả hiện ra màn hình :

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
A b c d e f g h I j k l m n o p q r s t u v w x y z

Ví dụ 4: phép thử biến ngày có phải ngày làm việc hay không đợc viết nh sau :

Type ngay = (ChuNhat, Hai, Ba, Tu, Nam, Sau, Bay) ;
Var Ngayx, ng : ngay ;
BEGIN
Ngayx := nam ;
For ng := 'hai' To 'bay' Do
If ngayx = ngay Then Writeln ( ' Ngay lam viec ' );

END.

Cần lu ý trong <viec> sau Do, không nên thay đổi tùy tiện giá trị của biến điều khiển. Làm nh
vậy rất nguy hiểm vì ta sẽ không còn chủ động kiểm soát đợc biến điều khiển. Ví dụ không nên dùng :

For I := 1 To 10 Do I := I + 2 ;

Ví dụ 5 : các vòng For có thể lồng nhau :

For I := 1 To 5 Do
For J := 1 To 8 Do
Begin
K := I + J ;
Writeln (K) ;
End ;

Bạn hãy tự viết kết quả hiện ra màn hình.

Có hai kiểu thực hiện vòng lặp không xác định :

Repeat While <Bieu_thuc_Boolean> Do
<viec> Begin
Trờng đại học dân lập Đông Đô _Phòng máy tính Khoa CNTT
Năm 2005
20
Giáo trình môn tin học (Turbo PasCal). Biên soạn: Hoàng Đức Hà
Until <Bieu_thuc_Boolean> ; <viec> ;
End ;

Trong lệnh Repeat... Until..., máy tính sẽ thực hiện <viec> cho đến khi <Bieu_thuc_Boolean> có

giá trị True theo chu kì xác định. Giữa Repeat và Until không cần dùng Begin và End. Có thể ví vòng Repeat...
Until... với câu "Tiền trảm hậu tấu".
Còn trong vòng lặp While... Do... máy tính sẽ lặp đi lặp lại chu kỳ sau : chừng nào
<Bieu_thuc_Boolean> có giá trị True thì đi thực hiện <viec> đợc đặt giữa Begin và End.
Nh vậy sự khác nhau giữa hai loại vòng lặp trên là ở chỗ với vòng lặp Repeat, máy tính sẽ thực
hiện <viec> truớc và thử điều kiện của <Bieu_thuc_Boolean> sau. Còn trong vòng While, máy sẽ thử
<Bieu_thuc_Boolean> trớc rồi thực hiện <viec> sau.
Cả hai vòng lặp đều có số lần lặp không xác định trớc. Cần phải lu ý là trong khi thực hiện
<viec> lặp, ta phải có một lệnh làm thay đổi một biến nằm trong <Bieu_thuc_Boolean> để thay đổi giá trị biểu
thức nhằm dừng vòng lặp lại vì nếu không nh vậy các vòng lặp sẽ chạy mãi không dừng.

Ví dụ 1:
Tính tổng sau :
A = 1 + 1/2 + 1/3 +... + 1/N

Ví dụ này hoàn toàn có thể dùng vòng lặp For song ở đây ta áp dụng vòng lặp không xác định để làm ví
dụ minh họa.
Program Tinh_tong ;
Var I, N : Integer ;
A : Real ;
BEGIN
Writeln (' N = ') ; Readln ( N ) ;
A := 0 ;
I := 1 ;
Repeat
A := A + 1/ I ;
I := I + 1 ; (* thay đổi giá trị biểu thức Boolean *)
Until I > N ;
Writeln (' Tong = ', a :10 : 8 ) ;
END.

Hoặc viết cách khác dới dạng "đếm lùi" :

Var N : Integer ;
A : Real ;
Trờng đại học dân lập Đông Đô _Phòng máy tính Khoa CNTT
Năm 2005
21
Giáo trình môn tin học (Turbo PasCal). Biên soạn: Hoàng Đức Hà
BEGIN
Writeln (' N = ') ; Readln ( N ) ;
A := 0 ;
Repeat
A := A + 1/N
N := N - 1 ; (* thay đổi giá trị biểu thức Boolean *)
Until N = 0 ;
Writeln (' Tong = ', A :10 : 8 ) ;
END.

Hoặc dùng vòng While :

A := 0 ;
I := 1 ;
While I <= N Do
Begin
A := A + 1/ I ;
I := I + 1 ; (* thay đổi giá trị biểu thức Boolean *)
End ;

Vòng lặp While luôn luôn đi với cặp từ khoá Begin và End còn trong vòng lặp Repeat không cần sử dụng
cặp Begin và End.


Ví dụ 2:

Chúng ta thờng làm các vòng lặp không xác định nh sau để quay vòng theo ý muốn :

Var Traloi : Char ;
BEGIN
Repeat
...............
(* thay đổi điều kiện thủ tục *)
Writeln (' Co tiep tuc nua khong ? ') ;
Readln ( Traloi ) ;
Until ( Traloi = 'K' ) or ( Traloi = 'k' ) ;

Lệnh Goto thuộc loại lệnh đơn giản, cho phép chơng trình nhẩy vô điều kiện tới một vị trí trong
chơng trình thông qua tên nhãn. các nhãn là các số nguyên hoặc tên đợc khai báo trong phần Label của phần
Trờng đại học dân lập Đông Đô _Phòng máy tính Khoa CNTT
Năm 2005
22
Giáo trình môn tin học (Turbo PasCal). Biên soạn: Hoàng Đức Hà
khai báo ở đầu chơng trình, đặt cách nhau qua dấu phẩy. Trong chơng trình, nhãn đợc đặt vào vị trí thích hợp
theo sau là dấu hai chấm.

Ví dụ1:

Program Vi_du_nhan ;
Label 1, 2 ;
Var X, Y, I : Real ;
BEGIN
................

1 : X := X + 1 ;
................
If X > 5 Then Goto 2 ;
................
2 : I := X + Y ;
If I < 3 Then Goto 1 ;
................
END.

Tuy đợc trang bị lệnh nhảy Goto song có thể nói Pascal rất ít khi dùng hoặc tuyệt đối không nên
dùng lệnh Goto vì Goto sẽ làm mất tính "cấu trúc thuật toán " của ngôn ngữ Pascal. Goto chính là khuyết điểm
của ngôn ngữ Fortran. Các lệnh While..., Repeat... Until..., If... đã đủ khả năng cho phép ngời lập trình tránh
dùng Goto. Ngôn ngữ Fortran là loại ngôn ngữ nghèo lệnh : nó chỉ có 3 kiểu lệnh : một kiểu vòng lặp Do tơng
tự nh vòng For của Pascal, lệnh If thì cha có cấu trúc Else và cuối cùng là Goto.
Sự có mặt của Goto trong chơng trình chúng tỏ ngời lập trình cha học cách nghĩ theo Pascal nh
lời của giáo s Writh, tác giả của Pascal chuẩn, đã viết .
Một điều ràng buộc của lệnh Goto là không đợc dùng Goto để nhảy vào chơng trình con mặc dù
có thể từ trong chơng trình con nhảy ra ngoài.

I := 1 ;
While I <= N Do
Begin
A := A + 1/ I ;
I := I + 1 ; (* thay đổi giá trị biểu thức Boolean *)
End ;

Vòng lặp While luôn luôn đi với cặp từ khoá Begin và End còn trong vòng lặp Repeat không cần
sử dụng cặp Begin và End.

Trờng đại học dân lập Đông Đô _Phòng máy tính Khoa CNTT

Năm 2005
23
Giáo trình môn tin học (Turbo PasCal). Biên soạn: Hoàng Đức Hà
Ví dụ 2:
Chúng ta thờng làm các vòng lặp không xác định nh sau để quay vòng theo ý muốn :

Var Traloi : Char ;
BEGIN
Repeat
........
(* thay đổi điều kiện thủ tục *)
Writeln (' Co tiep tuc nua khong ? ') ;
Readln ( Traloi ) ;
Until ( Traloi = 'K' ) or ( Traloi = 'k' ) ;

1. Khái niệm về ch ơng trình con:
Turbo Pascal là ngôn ngữ có cấu trúc cao. Do đó, một chơng trình lớn có thể chia thành nhiều ch-
ơng trình con với hai mục đích :
a) Dễ kiểm tra, dề điều khiển từng phần của chơng trình.
b) Tránh lặp đi lặp lại những đoạn chơng trình dùng nhiều lần. Điều này vừa gây mất thời gian cho ngời lập
trình vừa làm cho chơng trình thêm lôi thôi, mất thẩm mĩ.

2. Thủ tục và hàm:
Trong Pascal có hai loại chơng trình con :

_ Procedure ( thủ tục )
_ Function ( hàm )

Sự khác nhau cơ bản và duy nhất của hai loại chơng trình con này là : Function trả lại cho một giá
trị kết quả vô hớng thông qua tên của Function và do đó nó đợc sử dụng trong một biểu thức. Còn Procedure

không trả lại kết quả thông qua tên của nó nên các Procedure không thể viết trong các biểu thức.

3. Cấu trúc của Procedure và Function:

Procedure Ten_thu_tuc ( Khai báo các tham số hình thức ) ;
(* Khai báo : Label, Const, Type, Var, hoặc các Procedure và Function *) ;
Begin
... (* Thân chơng trình con *)
End ;
Function Ten_ham ( khai báo các tham số hình thức ) : kieu_du_lieu_cua_ham ;
(* Khai báo : Label, Const, Type, Var, hoặc các Procedure và Function *) ;
Trờng đại học dân lập Đông Đô _Phòng máy tính Khoa CNTT
Năm 2005
24
Giáo trình môn tin học (Turbo PasCal). Biên soạn: Hoàng Đức Hà
Begin
... (* Thân chơng trình con *)
End ;

Thân của chơng trình con đợc đặt giữa hai chữ Begin và End với End kết thúc bằng dấu chấm
phẩy (;) chứ không phải dấu chấm (.) nh của chơng trình chính.

4. Ví dụ về thủ tục và hàm:

Program Vidu ;
Uses Crt ; (* Crt là một Unit chứa các chơng trình con về màn hình, bàn hình... *)
Var A, B, C, D : Integer ;
Z : Real ;
(* ---------------------------------------------------------------------- *)
Procedure Tieu_de ;

Begin
Writeln (' **************************************** ') ;
Writeln (' * MINH HOA CHUONG TRINH CON * ') ;
Writeln (' **************************************** ') ;
End ;
(* ------------------------------------------------------------------- *)
Procedure Enter (Var X, Y : Integer ) ;
Var OK : Char ;
Begin
Repeat
Write (' Tu so = ') ; Readln (X) ;
Write (' Mau so = ') ; Readln (Y) ;
Write (' Co sua so lieu khong (c, k) ? ') ;
OK := Readkey ;
Writeln ;
Until (OK = ' K ') or (OK = ' k ') ;
End ;
(* ------------------------------------------------------------------- *)
Function Chia (X, Y : Integer) : Real ;
Begin
If Y <> 0 Then Chia := X / Y
Else
Trờng đại học dân lập Đông Đô _Phòng máy tính Khoa CNTT
Năm 2005
25

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×