Chuong I - Turbo Pascal

Màu nền
Font chữ
Font size
Chiều cao dòng

CHƯƠNG 1: GIỚI THIỆU TURBO PASCAL

Giới thiệu về Turbo Pascal
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
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. 
Cấu trúc 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 *)
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 " ; "
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ẽ *)
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).
Kiểu Logic Boolean
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
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

Kiểu số thực
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 yù : 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. 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 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 số học chuẩn
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) 
Kiểu ký tự
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)

Bạn đang đọc truyện trên: Truyen2U.Pro