大榕树——让我们共成长!
大榕树 myDrs.org
您的位置:大榕树 \ 编程       |  Logo语言   |  Pascal语言   |  信息学奥赛   |  高考保送    |  HTML版本
|  Pascal语言>>Pascal入门>>Pascal基本教程 第六章         本站全文搜索: 友情提示:

Pascal基本教程 第六章
http://www.mydrs.org  6/16/2001  大榕树


枚举型和子界型

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所定义的值的范围;否则将产生类型溢出,而这种错误只能在你运行程序时进行检查,因此你必须要避免不发生这种错误。

作 者:联合空间网络工作室
来 源:cpascal.com
共有17620位读者阅读过此文

  • 上篇文章IOI中国代表队脱颖而出
  • 下篇文章Pascal基本教程 第七章

  • 发送邮件
    保存页面 打印文章 HTML版本 发表评论

    □- 近期热门文章 □- 相关文章
    1. NOIP2006竞赛大纲 [8307]
    2. 七类高中生具有保送资格 [5911]
    3. NOI2006获奖选手名单 [4956]
    4. 关于举办NOIP2006模拟赛的通告 [4107]
    5. Turbo Pascal各语句运行速... [3595]
    6. Turbo王者归来新Delphi免费... [3182]
    7. IOI2006我国4名选手全部获得金... [2946]
    8. 关于APIO2007与IOI2007... [2764]
    9. noip倒计时 by 枯叶蝴蝶 [2684]
    10. 朱泽园:思想上的金牌更重要 [2169]
    [专题] Pascal基本教程
    Pascal基本教程 第11章
    Pascal基本教程 第十章
    Pascal基本教程 第九章
    Pascal基本教程 第八章
    Pascal基本教程 第七章
    Pascal基本教程 第六章
    Pascal基本教程 第五章
    Pascal基本教程 第四章
    Pascal基本教程 第三章
     

    关于本站 | 合作伙伴 | 联系方式
    大榕树 版权所有 ©1999-2006 www.myDrs.org 闽ICP备05000721号