Pascal入门教程(5).doc_第1页
Pascal入门教程(5).doc_第2页
Pascal入门教程(5).doc_第3页
Pascal入门教程(5).doc_第4页
Pascal入门教程(5).doc_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第六章 枚举型和子界型 内容提要本章介绍了两种自定义数据类型:枚举类型和子界类型及它们的定义和计算方法。学习要求通过对本章的学习,我们要掌握枚举型和子界型两种简单的自定义类型的定义方法,能熟练把自定义的类型运用到程序设计中。在前面几章里,我们学习了四种基本数据类型:实型(REAL),整型(INTEGER),布尔型(BOOLEAN),字符型(CHAR)。但是,仅仅这几种类型还不能满足我们的需要,我们希望能定义自己的数据类型。TURBO PASCAL允许用户自定义数据类型,这就是本章要学习的枚举型和子界型。第一节 枚举型 11 枚举型的定义前面我们学习的四种基本数据类型,可以用来表达数,字符,真假的描述。但我们还是觉得有点缺欠:它们不能方便地行一些标识符的描述,如:红,橙,黄,绿,青,蓝,紫七种颜色,要在数据类型中要把它们直接表达出来,我们觉得有障碍。一个星期有七天,用英文MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SARURDAY,SUNDAY表示。而在计算机内有没有这种数据类型,能够很方便地将它们表示出来?有,枚举型能办到。用四种基本数据类型不便表示的标识符,而且这些标识符的数量是有限的,我们可以用枚举的方法来表达它,把要用的所有标识符全部枚举出来。这种方法比较接近自然语言的表达。枚举型定义的格式如下:TYPE 枚举类型名(标识符1,标识符2,标识符3,);在变量说明中,我们对枚举型就这样表示:VAR 变量名:枚举类型名;我们来看看对七种颜色和一个星期的七天如何定义枚举型:TYPE color=(red,orangr,yellow,green,indigo,blue,violet); Day=(Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday);这样,我们就有了两种新的数据类型了:COLOR,DAY。在定义枚举类型时,有几条规则:1 定义时要以标识符TYPE开头。2 被枚举的标识符(以字母开头的字母数字组合)要用括号括起来,标识符之间用逗号隔开。3 被枚举的标识符只能在一种枚举类型中出现,且在同一类型中出现的次数只能一次。4 在枚举定义中,只能用“”,而不能用“:=”。5 所有的标识符必须被枚举出来,没列出来的标识符不能使用。以后,我们可以象用REAL,INTEGER类型一样用已定义的枚举类型了。以下的定义是错误的:TYPEA=(1,2,3,4.5); 数字不能作标识符B=(C,D,E,F,G); 字符不能作标识符C=(red,orange,yellow,green,red); 同种类型中标识符出现了重复D=(red,indigo,violet); 和上一类型中标识符重复对枚举类型定义好了以后,我们可以进行该种类型的变量说明了:VAR A,B:COLOR; C,D:DAY;经过变量说明后,我们可以对变量A,B,C,D进行赋值。 A:=red; b:=orange; C:=Monday; d:=Sunday;其实,我们可以用另一种方法来定义: VAR a,b:(red,orange,yellow,green,indigo,blue,violet); C,d:(Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday);也就是省掉了用TYPE定义的过程,直接进行变量说明。 12 枚举型的运算1 赋值运算当我们用上一小节的知识把枚举类型定义好后,可以象一般的基本类型那样进行赋值运算。如: VAR a,b:(red,orange,yellow,green,indigo,blue,violet); C,d:(Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday);我们可以这样赋值运算:a:=yellow; b:=a; c:=Sunday; d:=c; 这样赋值是错误的:a:=Monday; b:=3; c:=red; d:=Tuesday; c:=d*3; a:=a+b;2 关系运算当标识符在括号中被按先后顺序罗列出来时,它就已经有序了。按在括号中出现的先后顺序,排号依次为0,1,2,3比如在上面的定义中,RED 的序号为0,ORANGE的序号为1,YELLOW的序号为2,VIOLET的序号为6。在另一种类型中,MONDAY的序号为0,TUESDAY的序号为1,WEDNESDAY的序号为2,SUNDAY的序号为6。正因为有了序号,我们就可以让同种类型中的标识符比较大小了。序号大的则标识符大,序号小的则标识符小。已知:TYPE color=(red,orangr,yellow,green,indigo,blue,violet); Day=(Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday);请看以下的运算结果:REDGREEN FASLEVIOLETBLUE TRUETHURSDAYSUNDAY TRUE其实,比较大小时,并不是标识符本身具有大小,只是与它在被枚举时的先后顺序有关。3 函数运算即然枚举的标识符是有序的,那么它支持PRED,SUCC,ORD等函数。如,在上面已定义好的类型中,可以进行这样的运算:pred(yellow)=orange;succ(orange)=yellow;succ(Monday)=Tuesday;ord(Monday)=0;ord(violet)=6; 13 枚举型的打印很不幸的是,TURBO PASCAL不支持枚举型的直接读写语句,也就是说以下的语句是错的: VAR a,b:(red,orange,yellow,green,indigo,blue,violet); C,d:(Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday); READ(A,B);WRITE(C); 但是我们可以通过间接的方法实现枚举型的读写。例1 输入一个06之间的整数,表明今天是星期几,然后把其后面的星期号打印出来。比如说:今天是星其三,则输入数字3,那么应该打印THURSDAY,FRIDAY,SATURDY。 PROGRAM e1(input,output); TYPE day=(monday,tuesday,wednesday, thursday,friday,saturday,sunday); VAR a,b:day; i,j:integer; BEGIN writeln(input the code:); readln(i); case i of 0: a:=sunday; 1: a:=monday; 2: a:=tuesday; 3: a:=wednesday; 4: a:=thursday; 5: a:=friday; 6: a:=saturday; else writeln(code error); end; for j:=i to 6 do begin a:=succ(a); case a of sunday: writeln(sunday); monday: writeln(monday); tuesday: writeln(tuesday); wednesday: writeln(wednesday); thursday: writeln(thursday); friday: writeln(friday); sunday: writeln(sunday); end; end; END. 在本例中,对枚举型没有用到READ 和WRITE语句,间接读写是用CASE语句实现的。第二节 子界型 21 子界型的定义在编程录入数据时,可能会遇到这种情况:在输入年龄时,把38误录为138或380或另外的错误数据。这些错误在编译程序时是不会发现的。我们想:能不能设计一种数据类型,当出现了以上这类明显的错误时,计算机在编译时会自己发现?这种类型就是子界型。子界型也是一种自定义数据类型,它是在整型,字符型,枚举型等有序类型中取一子集。因为是子集,所以子界型是有界的。于是我们可以这样定义:子界型是一种有界的有序数据类型,它只能是整型,字符型或枚举型。子界型定义的格式如下:TYPE 子界型名数据的下限数据的上限;例:以下定义是正确的 YTPE AGE1860; NUMBER0100; CHA Z; Day=(Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday); DTuseday Saturday;在上面的例子中,我们定义了四种类型:AGE类型的数据只能在18到60之间取值,超过此范围便作错。因此,不必担心输入的年龄超过此范围而不被发觉。同样,NUMBER类型的数据也只能在0到100之间取值,且只能是整数。CH类型是在26个大写的英文字母中取值;D类型比较特别,因为事先定义好了枚举型DAY,所以D的定义是允许的,故:D的类型是在以下标识符中取一个:Tuesday;Wednesday,Thursday,Friday,Saturday 。子界型定义好后,我们就可以把它们象四种基本数据类型一样对变量进行说明:VAR A,B:AGE; C,E:CH; F,G:D;其实,我们可以把类型定义和变量说明合并为一步进行:VARA, B:1860;B, E:AZ;如果要定义:F,G:TuesdaySaturday; 则必须在VAR前面加上这一行说明:TYPE Day=(Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday);总之得记住:如果子界型的数据是来自于枚举型,则枚举型必须先定义。22 子界型的运算 1 赋值运算子界型的特点就是限制了边界,所以我们在赋值时要注意数据的范围。假如已有以下的定义:TYPE Day=(Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday);VARA,B:1860;C,E:AZ; F,G:TuesdaySaturday; 则可以如下赋值: A:30;B:A;A:A20;(注意:运算后的结果不能超过1860这个范围)C:F;E:H;F:Tuesday;G:F; 2 函数运算(1) 如果子界型的数据是整数,则它完全可以象整型数据一样进行,的运算。在执行PRED,SUCC时,方法也和整型一样,如SUCC(3)4。PRED(7)6要注意的是函数的结果不能超出范围。(2) 如果子界型的数据是字符型,则可以用函数SUCC,PRED,ORD。如SUCC(G)H;PRED(B)A;ORD(A)65。(3) 如果子界型的数据是枚举型,照样可以用函数PRED,SUCC,ORD。例如有定义: TYPE Day=(Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday);则SUCC(MONDAY)TUESDAY;PRED(SUNDAY)SATURDY;ORD(MONDAY)0;ORD(SUNDAY)6。 23 子界型的输入和输出 子界型是在整型,字符型和枚举型中取的一个子集,所以它的输入和输出要满足相应类型的输入输出规则即可。整型,字符型的输入输出方法在第二章已学过,枚举型的方法在上一节学过。例2 正序和反序打印26个英文字母。 PROGRAM E2(input,output); VAR ch:A.Z; BEGIN FOR ch:=Ato Zdo write(ch, ); for ch:=Z downto A do write(ch, ); END. 本章小结 在本章节里,我们学习了两种自定义数据类型:枚举型和子界型。枚举型是把要用到的所有标识符都一一罗举出来,一旦标识符被列举了,则每个标识符都是有序的。枚举型在函数运算中只能用到PRED,SUCC,ORD几个函数。枚举型不支持直接的读写语句,只能间接执行读写操作。子界型是在整型,字符型,枚举型中取其子集而形成一种新的集合,它是有限集,不能超过其边界。子界型在运算时遵循的规则和子界数据本来的类型的运算规则一样。思考和练习1 判断以下语句是否正确(1) TYPE A:(MONDAY,TUESDAY);(2) TYPE B(B

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论