Dữ liệu và kiểu dữ liệu trong Pascal

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).

I – Kiểu dữ liệu Bun (Boolean: Đúng/Sai (True/False))

- 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 :
Code:
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 :

Code:
 3 < 5 cho ta giá trị True

False < Truecho 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.​

II – Kiểu số nguyên Integer

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ụ:
Code:
+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í dụ :
Code:
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í dụ :
Code:
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ụ:
Code:
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).​

Du lieu va kieu du lieu - Wiki Pascal

III – 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 ý : không tồn tại các phép toán DivMod 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. 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ï :
Code:
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 :

Du lieu va kieu du lieu - Wiki Pascal

IV – 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)​

V – Kiểu kí tự Character

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)

Nhận xét

Bài đăng phổ biến từ blog này