KIỂU LIỆT KÊ và KIỂU ÐOẠN CON
7.4.1. Kiểu liệt kê (enumerated type) :
7.4.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 và
kiểu 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 gía 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à
nam và nu, 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 gía 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
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’);
7.4.2. Kiểu đoạn con (Subrange type):
Kiểu đoạn con được mô tả bằng cách chỉ ra phạm vi gía 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, hay liệ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 gía
trị là các ký tự từ ‘A’ đến ‘Z’, tương tự, biến T có thể nhận các gía 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;