Chương 7: Kiểu vô hướng liệt kê và kiểu đoạn con

Một phần của tài liệu Giáo trình lập trình cấu trúc pascal (Trang 32 - 35)

7.1 Kiểu vô hướng liệt kê (Enumerated scalar type)

Dữ liệu thuộc loại vô h ướng như là một tập hợp các giá trị đ ược sắp xếp theo

một thứ tự tự nhiên. Khi khai báo một biến là kiểu vô hướng nào đó, nó có thể

nhận một giá trị trong tập các giá trị đó. Pascal còn cho phép người lập trình có thể tự định nghĩa ra các kiểu vô h ướng mới bằng cách liệt kê các giá trị của kiểu vô hướng thông qua các tên do người lập trình đặt ra. Danh sách các giá trị này

được đặt trong ngoặc đơn và được mô tả bằng một tên kiểu trong phần mô tả

kiểu (phần Type). Kiểu vô hướng định nghĩa theo cách n ày được gọi là kiểu liệt

kê. Thí dụ:

Type

Mau = (Do, Xanh, Vang, Trang ); Oto = (Toyota, Honda, Nisan);

Biến vô hướng được định nghĩa sau đó nh ư sau:

Var

Mau1, Mau2: Mau; Xe: Oto;

Hoặc khai báo biến trực tiếp với mô tả kiểu nh ư sau:

Var

Mau1, Mau2: (Do, Xanh, Vang, Trang); Xe: (Toyota, Honda, Nisan);

Biến có thể nhận các giá trị của kiểu t ương ứng. Ví dụ:

Mau1:=Xanh; Xe:=Honda;

Một biến được định nghĩa là kiểu này không thể nhận giá trị của kiểu khác, ví

dụ:

Xe :=Do; Là sai vì khác kiểu.

Trong kiểu vô hướng phần tử đầu tiên có số thứ tự là 0, phần tử thứ 2 có số thứ

tự 1 v.v.. Các hàm sau đây được áp dụng cho kiểu vô h ướng.

· Hàm thứ tự ORD (X):

Kết quả là số thứ tự của X trong kiểu vô h ướng.

Ví dụ:

ORD(Vang) =2 (vì Vàng có số thứ tự là 2) ORD(Honda) = 1 (vì Honda có số thứ tự là 1)

Với hàm ORD ta có thể so sánh hai giá trị vô h ướng có cùng kiểu. Giá trị có số

thứ tự lớn sẽ lớn hơn giá trị có số thứ tự nhỏ hơn. Như vậy số thứ tự liệt kê khi

định nghĩa kiểu vô hướng cũng chính là thứ tự sắp xếp từ nhỏ đến lớn.

Ví dụ với kiểu Xe ta có:

· Hàm PRED (X) và SUCC (X) (adsbygoogle = window.adsbygoogle || []).push({});

Hàm PRED (X) cho giá trị đứng trước X

Hàm SUCC (X) cho ta giá trị tiếp theo của X.

Ví dụ:

Pred (Honda) = Toyota Succ(Honda) = Nisan

Pred của giá trị đầu và Succ của giá trị cuối không có ý nghĩa .

· Chuyển đổi kiểu dữ liệu

Hàm ORD chuyển đổi một giá trị vô hướng sang giá trị nguyên.

Turbo Pascal cho phép biến đổi ngược từ một giá trị số nguyên thành giá trị vô hướng đếm được theo cách viết.

Tên_Kiểu (Số_nguyên). Ví dụ:

Xe(2) cho giá trị Nisan

Char(65) cho giá trị 'A'

· Hiển thị kiểu liệt kê:

Thủ tục Write hoặc Writeln chỉ hiển thị các giá trị thuộc kiểu vô h ướng chuẩn

(Real, Integer, Byte, Char, Boolean) và không thể hiển thị một giá trị thuộc kiểu vô hướng liệt kê. Ví dụ các câu lệnh sau là sai:

Writeln (Xe(1)), Writeln (Xanh)

Muốn hiển thị giá trị của biến vô hướng liệt kê, ta có thể dùng thủ thuật sau:

IF Xe=Honda Then Writeln ('Honda'); · Đọc dữ liệu liệt kê:

Thủ tục Read hoặc Readln cũng chỉ cho phép đọc vào từ bàn phím các giá trị

của các biến có kiểu vô h ướng chuẩn. Chúng cũng không cho p hép đọc trực tiếp

các giá trị kiểu liệt kê. Ví dụ ta không thể đọc biến Mau1 có giá trị là Do bằng

cách ấn các phím D, o. Ta có thể d ùng phương pháp sau:

Ví dụ:

Type

Mau = (Do, Xanh, Vang, Trang); Var I: integer; Mau1: Mau; Begin Readln(I); Mau1:= Mau(I); End.

7.2 Kiểu khoảng con (Sub-range Type)

Nhiều trường hợp một biến có thể chỉ lấy giá trị trong một khoảng đ ược định

dược nào đó. Ví dụ tuổi thanh niên có thể được giới hạn từ 13 đến 35. Khi đó ta

có thể định nghĩa ra kiểu khoảng con nh ư sau:

Type ThanhNien =15..35; Var Tuoi :ThanhNien; Hoặc có thể định nghĩa trực tiếp: Var Tuoi : 15..35;

Kiểukhoảng con có thể viết như sau: (adsbygoogle = window.adsbygoogle || []).push({});

a..b;

Trong đó a là hằng cận dưới và b là hằng cận trên, a và b là hai hằng của cùng một kiểu vô hướng đếm được. Tất nhiên phải thoả mãn: a<b

Kiểu khoảng con có những lợi ích:

· Tiết kiệm ô nhớ

· Có thể kiểm tra giá trị của biến khi chạy ch ương trình không được vượt ra

khỏi giới hạn của khoảng con. Đây là tác dụng chủ yếu của kiểu khoảng

con .

Một số ví dụ về kiểu khoảng con.

Type

Ngay = (ChuNhat, Hai, Ba, Tu, Nam, Sau, Bay); ChuCaiIn = 'A'.. 'Z';

Var

Ch: ChuCaiIn;

NgayLamViec: Hai..Bay;

Bài tập:

1. Hãy cho một ví dụ đơn giản về lập trình trong đó có dùng dữ liệu liệt kê, hãy viết chương trình và chạy thử

2. Hãy cho một ví dụ đơn giản về lập trình trong đó có dùng dữ liệu khoảng

con, hãy viết chương trình và chạy thử

3. Khai báo sau thuộc loại khai báo nào, đúng hay sai?

Type

a=12..26; b='c'..'y'; c=3.14...7.34;

Một phần của tài liệu Giáo trình lập trình cấu trúc pascal (Trang 32 - 35)