Pascal学习
——基本Pascal学习

 

返回

 

第1章 第2章 第3章 第4章 第5章
Pascal语言概述 基础知识 顺序结构 选择结构 循环结构
第6章 第7章 第8章 第9章 第10章 第11章
枚举型和子界型 数组 函数与过程 集合与记录 指针 文件

 

第六章 枚举型和子界型

6.1 类型定义

6.2 枚举型

6.3 子界型

6.4 类型相容和赋值相容

 

 

6.1 类型定义
  类型定义的语法格式:
  type
  <标识符1>=<类型1>;
  <标识符1>=<类型1>;
  ……
  <标识符n>=<类型n>;

 

6.2 枚举类型


  通过预定义列出所有值的标识符来定义一个有序集合,这些值的次序和枚举类型说明中的标识符的次序识一致的。枚举类型的形式:(标识符1,……,标识符n)
例如:type daystype=(sunday,monday,tuesday,wednesday,thursday,friday,saturday)
  枚举元素只能是标识符,而不能是数值常量或字符常量。例如以下的定义是错误的:
type daystype=('sun','mon','tue','wed','thu','fri','sat')
  枚举元素是标识符,不要把作为枚举元素的标识符视作变量名,它不能被赋值。同一个枚举元素不能出现在两个或两个以上的枚举类型定义中。例如以下的定义是错误的:
type daytype1=(monday,tuesday);
       daytype2=(monday,wednesday);
  可以将枚举类型的定义和变量的定义结合在一起。例如:var a:(monday,tuesday,sunday)
  枚举类型属于顺序类型。根据定义类型时各枚举元素的排列顺序确定它们的序列,序列号从0开始。
例如:已经定义daystype
   ord(sunday)=0,succ(sunday)=monday,pred(friday)=thursday
  但是枚举类型中的第一个元素没有前趋,最后一个元素没有后继。Turbo Pascal不允许直接读写枚举值,所以枚举值的输出常用case语句间接的输出。枚举值的输入,则要一一判断读入字符是否是枚举类型的标识符。若是才能赋给枚举变量,否则就会出错。
例如:枚举值的输出
 case day of
  sunday:write('sunday');
  monday:write('monday');
  tuesday:write('tuesday');
  wednesday:write('wednesday');
  thursday:write('thursday');
  friday:write('friday');
  saturday:write('saturday');
 end;

6.3 子界类型
  子界类型是由整型、字符型、枚举型、布尔型的两个常量指定该类型的值域区间。子界类型的形式:
                  常量..常量
  两个常量必须是同一种顺序类型。例如:a..b,要求a<=b
例如:
  type a=1..3;
                b='a'..'d';
  一个子界类型继承它的常量类型的运算符和标准函数,常量类型相容的不同子界类型可以混合运算,可以赋值。可以将子界类型的定义和变量的定义结合在一起。例如:var a:1..9
例 按月、日、年顺序读入一日期,输出该日期是这一年中的第几天。
 program date;
  var year:0..2010;
    month,i:1..12;
    day:1..31;
    dayth:integer;
 begin
  read(month,day,year);
  dyath:=0;
  for i:=1 to month-1 do
   case i of
    1,3,5,7,8,10,12:dayth:=dayth+31;
    2:if ((year mod 4=0)and(year mod 100<>0)or(year mod 400 =0)
     then dayth:=dayth+29
     else dayth=:=dayth+28;
    4,6,9,11:dayth:=dayth+30;
   end;
  dayth:=dayth+day;
  writeln(dayth)
 end.

6.4 类型相容和赋值相容


1.类型相容性
  类型相容是对参加同一运算的两个对象的类型要求。设有两个变量,如果满足下列条件之一,就说这两个变量的类型相容。
  (1)两个变量的类型相同
     a.两个变量被同一类型说明。
      例如:var a,b:1..30;
     b.两个变量的类型是同一类型标识符。
      例如:var a:1..30;
                                          b:1..30;
     c.两个变量的类型是不同的类型标识符,但在类型定义中已经说明两个标识符相同。
      例如:type date=1..100;
                                           range=date;
              var m:data;
                                         n:range;
  (2)一个变量的类型是另一个变量的子界。
  (3)两个变量的类型都是同一基类型的子界。
  (4)两个变量的类型是基类型相容的集合类型。
  (5)两个变量的类型是成分相同的串类型。
2.赋值相容性
  赋值相容是对赋值操作的两个对象的类型要求。设赋值语句“:=”左边的变量类型为T,右边表达式的类型为E,若类型T和类型E满足下列条件之一,则称他们是赋值相容的。
  (1)T和E是相同的类型,而且类型不是文件类型,也不是具有文件类成分的构造类型。
  (2)T是实型,而E是整型或整型的子界。
  (3)T和E是类型相容的顺序类型,并且E的值不超出T所定义的值的范围
  (4)T和E是类型相容的集合类型,并且E的值不超出T所定义的值的范围
  (5)T和E是类型相容的串类型。
  当T和E是顺序类型或都是集合类型时,不仅要求这两个类型是相容的,而且要求E的值不超出T所定义的值的范围;否则将产生类型溢出,而这种错误只能在你运行程序时进行检查,因此你必须要避免不发生这种错误。

 

 

返回>>TOP