i信息学奥赛

加入QQ群:1025629106,或关注微信公众号:i信息学奥赛,获取更多学习资源。

导航

子界

Posted on 2016-12-10 17:01  shnoip  阅读(342)  评论(0编辑  收藏  举报

在处理人的年龄、楼房的楼层号,一年中的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.