KIỂU LIỆT KÊ và KIỂU ÐOẠN CON

Một phần của tài liệu Giáo trình tin học đại cương a1 phần 2 NXB ĐHQG TP HCM (Trang 96 - 100)

11.1.1. Cách khai báo

Ngoài các kiểu dữ liệu đã có sẵn nhưkiểu nguyên,thực, ký tự, lôgic chuỗi, Turbo Pascal còn cho phép người thảo chương có thể tự xây dựng các kiểu dữ liệu mới.

Kiểu liệt kê được định nghĩa bằng cách sử dụng từ khóa TYPE và liệt kê ra tất cả các giá trị của kiểu, theo mẫu sau:

Type

Tênkiểu = (tên1, tên2, ..., tênN);

trongđó tên1, tên2, ..., tênN là các tên tự đặt theo đúng quy ước về đặt tên. Ví dụ:

Type

Phai=(nam, nu);

Ten_mau = (den, trang, xanh, vang, tim, nau);

Theo khai báo này thì Phai là một kiểu dữ liệu liệt kê chỉ có hai giá trị lànamnu, Ten_mau cũng là kiểu dữ liệu liệt kê và có sáu giá trị là:den, trang, xanh, vang, tim, nau.

Khi một kiểu liệt kêđã được định nghĩa thì có thể khai báo các biến thuộc kiểu liệt kê này bằng từ khóa Var. Ví dụ:

Var

Ph1, Ph2: Phai;

M1, M2: Ten_mau;

Trong chương trình, ta có thể gán:

Ph1:=nam;

Ph2:=nu;

M1:=den;

M2:=trang;

Pascal còn cho phép khai báo trực tiếp biến kiểu liệt kê không cần qua giai đoạn định nghĩa Type bằng cách liệt kê các giá trị mà biến có thể nhận.

Ví dụ: các biến Ph1, Ph2, M1, M2 nói trên có thể khai báo trực tiếp nhưsau:

Var

Ph1, Ph2: (nam, nu);

M1, M2: ( den, trang, xanh, vang, tim, nau);

11.1.2. Các hàm liên quan đến kiểu liệt kê

+ Hàm ORD(tên): Trả về số thứ tự của tên trong kiểu liệt kê. Các giá trị liệt kêđược đánh số thứ tự bắt đầu từ 0. Ví dụ:

Ord(nam)=0, Ord(xanh)=2

Thông qua hàm Ord, các giá trị liệt kê có thể so sánh với nhau theo quy tắc: giá trị nào có số thứ tự nhỏ hơn thì nhỏ hơn:

den < trang < xanh< vang< tim< nau

+ Hàm PRED(tên) và hàmSUCC(tên): trả về giá trị đứng ngay trước và ngay sau tên trong kiểu liệt kê tươngứng. Ví dụ:

Pred(nu)=nam Pred(nau)=tim

+ Hàm Tênkiểu(k): trả về giá trị liệt kê có số thứ tự là k trong Tênkiểu, ví dụ:

Phai(0)=nam Ten_mau(2)= xanh

Hàm này là hàm ngược của hàm Ord.

11.1.3. Nhập, xuất kiểu liệt kê

Các giá trị liệt kê không thể nhập, xuất trực tiếp bằng lệnh Readln và Write được. Ðây là hạn chế của kiểu liệt kê, khiến nó không thông dụng.

Khi muốn nhập hay xuất kiểu liệt kê, ta có thể dùng một biến trung gian St kiểu chuỗi. Chẳng hạn, muốn nhập màu xanh cho biến M1, ta dùng hai lệnh:

Readln(St);

If St=‘xanh’then M1:=xanh;

Tương tự, muốn in màu xanh lên màn hình, ta dùng lệnh:

If M1=xanh then Writeln(‘xanh’);

11.2. Kiểu đoạn con (Subrange type) 11.2.1. Khai báo

Kiểu đoạn con được mô tả bằng cách chỉ ra phạm vi giá trị mà các biến thuộc kiểu đó có thể nhận:

TYPE

Tênkiểu = hằng1..hằng2;

VAR

Tênbiến: Tênkiểu;

hoặc khai báo trực tiếp:

VAR

Tênbiến: hằng1..hằng2;

trongđó, hằng1< hằng2 là hai hằng thuộc cùng một kiểu dữ liệu. Kiểu dữ liệu của hằng1 và hằng2 chỉ có thể là kiểu nguyên, ký tự, lôgic,hayliệt kê

Ví dụ:

Type

Chu_Hoa =‘A’..’Z’;

Tuoi= 0..200;

Var

Ch: Chu_hoa;

T: Tuoi;

Theo khai báo này thì ch là một biến kiểu đoạn con, có thể nhận các giá trị là các ký tự từ ‘A’đến ‘Z’, tương tự, biến T có thể nhận các giá trị là các số nguyên từ 0 đến 200.

Cũng có thể khai báo hai biến Ch và T trực tiếp theo cách sau:

Var

Ch: ‘A’..’Z’;

T: 0..200;

11.2.2. Tác dụng của kiểu đoạn con

Trong nhiều trường hợp, việc khai báo đoạn con có tác dụng tiết kiệm bộ nhớ. Tùy theo phạm vi hằng1..hằng2 mà Turbo Pascal sẽ cấp phát cho biến một số byte tối thiểu. Trong ví dụ trên, mỗi biến Ch hay T sẽ được chứa trong 1 byte.

Kiểu đoạn con còn cho phép kiểm soát được giá trị của biến có vượt ra ngoài phạm vi của nó haykhông. Ví dụ, nếu đối với

biến T mà gán T:=201; thì máy sẽ báo lỗi "const out of range".

Ngoài ra khi chạy chương trình trong mode {$R+}, chương trình sẽ dừng ngay nếu biến nhận giá trị vượt khỏi phạm vi.

Kiểu liệt kê và kiểu đoạn con thuộc loại đơn giản và đếm được.

Một phần của tài liệu Giáo trình tin học đại cương a1 phần 2 NXB ĐHQG TP HCM (Trang 96 - 100)

Tải bản đầy đủ (PDF)

(231 trang)