Hướng Dẫn Học Ngôn Ngữ Lập Trình Pascal - Phần 1
Có thể bạn quan tâm
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ậtZurich(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
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.
Bài 2: CẤU TRÚC CHUNG CỦA MỘT CHƯƠNG TRÌNH PASCAL
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 *)
- 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 " ; "
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ẽ *)
Bài 3: KHÁI NIỆM CHUNG VỀ DỮ LIỆU VÀ KIỂU DỮ LIỆU
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 nhưng 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
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 | Pham vi biêu diên | Kích thuoc (byte) |
| Byte | 0... 255 | 1 |
| ShortInt | -128... 127 | 1 |
| Integer | -32768... 32767 | 2 |
| Word | 0... 65535 | 2 |
| LongInt | -2147483648... 3147483647 | 4 |
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 ý : 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 yù : trong cách viết số thực của ViệtNam, của Pháp..., người ta dùng dấu phẩy. Nhưng 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.Mở rộng việc mô tả và khai báo số thực :
Kiêu | Pham vi biêu diên | Kích thuoc (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 nhưng 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)
+ 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ímDeltrê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_hang := Giá_tri_cua_hang ;
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:
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_du_liêu_cua_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ô ta xây dung 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.
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.
Bài 4: CÁC CÂU LÊNH TRONG PASCAL
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 *)
* 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 nhưng 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 ) ;
_ 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ô thuc :
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 lưu ý 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).
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> ;
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 ;
& Nhắn tin cho tác giả Trần Văn Linh @ 23:48 04/09/2014 Số lượt xem: 4207 Số lượt thích: 0 người
Từ khóa » Dấu Chấm Phẩy Dùng để Làm Gì Trong Pascal
-
Ngôn Ngữ Lập Trình Pascal Là Gì? Thành Phần Và Cách Viết Pascal?
-
Dấu Chấm Phẩy (;) được Dùng để ....trong Pascal? A . Kết Thúc Câu B ...
-
Bài 2. Các Thành Phần Cơ Bản - Tự Học Tin - Tin Học Cho Người Việt
-
Dấu Chấm Phẩy – Wikipedia Tiếng Việt
-
TUT] Bài 2: Các Thành Phần Cơ Bản Trong Pascal
-
CÁC THÀNH PHẦN CƠ BẢN CỦA NGÔN NGỮ LẬP TRÌNH PASCAL
-
Những Dấu ',,' Trong Câu Lệnh Pascal Dùng để Làm Gì. Cách Sử Dụng ...
-
Dấu Nào Dùng để Phân Cách Các Lệnh Trong Pascal? - Hoc24
-
(dấu Chấm Phẩy) Trong Chương Trình Free Pascal Dùng để:Kết Thúc ...
-
Tại Sao Các Câu Trong Nhiều Ngôn Ngữ Lập Trình Bị Chấm Dứt Bởi Dấu ...
-
1.Để Phân Tách Giữa Các Câu Lệnh Thì Sử Dụng Dấu A. Dấu Chấm(.) B ...
-
Cuối Câu Của Các Câu Lệnh Trong Pascal, Ta Sử Dụng: Dấu Chấm Phẩy ...