在处理人的年龄、楼房的楼层号,一年中的12个月份这样的数据时,可以使用整型数据,但整型数据的范围显然远远超出了实际数据的范围。如果能够在定义数据类型时限定数据的取值范围,就能使数据的含义更加明确,使越界错误更容易检查。
Pascal语言提供了一种自定义类型——子界类型,它依托于某种已存在的数据类型,但取值范围只是原数据类型的一部分,因此相当于原数据类型的一个“子范围”。相应的原类型叫做子界类型的宿主类型,宿主类型必须是有序类型。
子界类型是由整型、字符型、枚举型或布尔型的两个常量指定该类型的值域区间,一般形式为:
type
子界类型名=常量1..常量2;
其中,常量1称为下界,常量2称为上界,它们必须属于同一个顺序类型,下界必须小于等于上界。
一个子界类型继承它的常量类型的运算符和标准函数,另外不能给任何一个子界类型变量赋一个超出它指定界限的值。
例1:按月、日、年的顺序读入一个日期,输出该日期是这一年中的第几天。
var
year:0..2050;
month,i:0..12;
day:1..31;
dayth:integer;
begin
readln(month,day,year);
dayth:=0;
for i:=1 to month-1 do
case i of
1,3,5,7,8,10: dayth:=dayth+31;
4,6,9,11: dayth:=dayth+30;
2: if ((year mod 4=0) and (year mod 100<>0)) or (year mod 400=0) then dayth:=dayth+29
else dayth:=dayth+28;
end;
dayth:=dayth+day;
writeln(month:2,'/',day:2,'/',year:4,'=',dayth:5,'th day');
end.