枚举子界集合记录_第1页
枚举子界集合记录_第2页
枚举子界集合记录_第3页
枚举子界集合记录_第4页
枚举子界集合记录_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

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

文档简介

1、枚举子界集合记录枚举枚举定义:有些变量的取值是确定的一些内容,例如一周有7天,一年有12个月,可以将其逐一列举出来。格式一:type 枚举类型名=(枚举值1,枚举值2,枚举值n); var 枚举变量名:枚举类型名;格式二:var 枚举变量名:(枚举值1,枚举值2,枚举值n);例题: type daytype=(sun,mon,tue,wed,thu,fri,sat); colortype=(red,yellow,blue,black); var d1,d2:daytype; c:colortype;或:var d1,d2:(sun,mon,tue,wed,thu,fri,sat); c:(re

2、d,yellow,blue,black);枚举的特点:枚举的特点:1、枚举值只能是标识符,而不能是数值常量或字符常量,也不能被赋值。如:以下两种定义都是错误错误的。type monthtype=(1,2,3,4,5,6,7,8,9,10,11,12); colortype=(red,yellow,blue,black);2、同一枚举元素不能出现在两个或两个以上的枚举类型定义中。如:以下定义是错误错误的,black既属于color1,又属于color2。type color1=(red,yellow,blue,black); color2=(black,green,white);枚举的特点:枚举

3、的特点:3.1枚举类型属于顺序类型,序号从0开始,可用ord函数求出枚举值的序号。如:var d:(sun,mon,tue,wed,thu,fri,sat); c:(red,yellow,blue); ord(sun)的值为0,ord(fri)的值为5,ord(blue)的值为2。3.2可用succ和pred函数求出枚举值的后继和前趋。 枚举类型的第一个元素没有前趋,最后一个元素没有后继。如:pred(tue)的值为mon,succ(red)的值为yellow。3.3可以作为循环控制变量如:for c:=red to blue do write(ord(c); 将输出4个枚举值的序号:0、1、

4、2。3.4可以作为case语句的选择表达式如:case c of red:writeln(the car is red.); yellow:writeln(the car is yellow.); blue:writeln(the car is blue.); end;枚举的特点:枚举的特点:4、枚举值不允许不允许直接输入输出,常通过case语句间接地输入输出。输入时,一般先读入序号,通过case语句将枚举值相应地赋给枚举变量;输出时,通过case语句判断枚举类型变量的值,输出相应的字符串。如:输入颜色的首字母,输出相应的英文单词。var c:(red,yellow,blue); ch:cha

5、r;begin read(ch); case ch of r:c:=red; y:c:=yellow; b:c:=blue; end; case c of red:writeln(Red); yellow:writeln(Yellow); blue:writeln(Blue); end;end.例:现有四种水果:苹果、橘子、香蕉、菠萝。从四种水果中任取三种, 不能重复和不计顺序。编程列出一切组合。 type fruit=(apple,orange,banana,pineapple);var i,j:fruit;begin for i:=apple to pineapple do begin f

6、or j:=apple to pineapple do if ij then case j of apple:write(apple:12); orange:write(orange:12); banana:write(banana:12); pineapple:write(pineapple:12); end; writeln; end; readln;end.解法一:var i,j,k,p,l:integer;begin for i:=1 to 2 do for j:=i+1 to 3 do for k:=j+1 to 4 do begin for l:=1 to 3 do begin c

7、ase l of 1:p:=i; 2:p:=j; 3:p:=k; end; case p of 1:write(apple:12); 2:write(orange:12); 3:write(banana:12); 4:write(pineapple:12); end; end; writeln; end;end.解法二:例:现有四种水果:苹果、橘子、香蕉、菠萝。从四种水果中任取三种, 不能重复和不计顺序。编程列出一切组合。 【解法二思路简析】: 三重for循环分别设定i,j,k变量的值。由于水果总数是4种,为叙述方便,分别设为1号、2号、3号、4号。现在想象,有个大佬(i)带了一个副手(j)和

8、一个小弟(k)来了,大佬的等级观念特强。他先取,他会取什么呢,他只会取1号2号两种之一,为什么不取3号或4号呢,他得留两个给手下啊。(他真要是取了3号或4号,手下岂不要取前面的1号或2号吗,这一来等级就混乱了。)所以 for i:=1 to 2 就是这意思。现在轮到副手来取了,他会取什么呢?作为大佬的手下,是绝不会越级的,他敢越级吗?所以,他得小心翼翼地看大佬到底取了什么。大佬若取了1号,他就可以放心取2号或3号。大佬若取了2号,他就只能取3号了。(4号他是不会取的,因为后面还有个小弟,等级是不能乱的。)所以 for j:=i+1 to 3 就是这意思。最后轮到小弟了,同样由于等级观念,他绝不

9、会擅自取比大佬和副手更好的水果。(即使大佬取2号,副手取3号,剩下1号4号,小弟也不会取1号的,而只会取4号而已。)所以小弟是看副手怎么取,他才取之后号码的。for k:=j+1 to 4 就是这意思。这样的三重循环就可以每次产生一组数字序列,并且每种序列都可以保证是小数字在前,大数字在后。子界子界定义:在处理人的年龄、一年中的12个月份这样的数据时,可以使用整型数据, 但范围太大。可以限定数据的范围,使其是原数据类型的一部分。格式一:type 子界类型名=常量1.常量2; var 子界变量名:子界类型名;格式二:var 子界变量名:常量1.常量2;注意注意:常量1称作下界,常量2称作上界,且

10、上界必须大于下界。下界和上界可以是整型、字符型、布尔型、枚举型等顺序型顺序型的两个常量,但必须是同一种顺序类型,该顺序类型称为子界类型的“基类型”。如:typeage=0.150; 人的年龄范围0岁到150岁,基类型为整型month=1.12; 月份从1到12,基类型为整型score=A.E; 成绩分A,B,C,D,E5个等级,基类型为字符型再如:type weekdays=(sun,mon,tue,wed,thu,fri,sat); workdays=mon.fri;其中:枚举类型weekdays定义了一星期中的7天后,可以用子界类型workdays定义其中的5个工作日。子界的特点:子界的特

11、点:1、对基类型适用的各种运算,均适用于该子界类型。 整型的子界类型可以直接输入输出,可以参与算术运算和关系运算; 字符型的子界类型可以直接输入输出,可以参与关系运算; 布尔型的子界类型可以参与关系运算和逻辑运算; 注意:注意:实型不存在子界类型。2、同一程序中,具有相同基类型的不同子界类型的数据可以混合运算但 结果不能超出各自的值域范围。3、子界类型可以作为情况语句(CASE语句)标号。例题:子界范围var a:integer; b:-100.100; c:10.30; d:char; e:1.5; f:boolean; g:false.true;begin a:=20; b:=a; c:=

12、b; a:=b+c; d:=2; e:=d; d:=succ(e); f:=ab; g:=not f;end.例题:子界作为情况语句标号var c:char;begin readln(c); case c of 0.9:writeln(digits); A.Z:writeln(UPPER-CASELETTERS); a.z:writeln(lower-caseletters); else writeln(special charactors); end;end.集合集合定义:集合是具有共同性质的一组数据构成的整体,集合中的元素叫集合元素,简称元素。集合是由同一种有序类型的一组数据元素所组成,这

13、种有序类型称为该集合的基类型。格式一:type 集合类型名=set of 基类型; var 集合变量名:集合类型名;格式二:var 集合变量名:set of 基类型;注意:类型名应是合法的标识符;基类型是集合中的元素的类型,必须是有序类型或有序类型的子界类型,元素的序号范围必须在0到255之间。以下集合定义是错误错误的:type t1:set of integer;整型的元素超过了256个 t2:set of -30.-20; 元素序号超过了0255范围 t3:set of real;实型不是有序类型集合的表示:集合的表示:集合是通过列举集合元素来表示的,用一对方括号括起一组元素,元素之间用逗

14、号隔开。格式为:元素1,元素2,元素n如:“10以内的质数的集合”可以表示为2,3,5,7。在一个集合中可以没有任何元素,称为空集,用 表示。任何集合都是其自身的子集,空集是任何集合的子集。如:1,2,3的子集有8种: ,1,2,3,1,2,1,3,2,3,1,2,3。(1)集合中各元素的书写顺序不影响集合的值;如:1,2和2,1表示的是同一个集合。(2)集合中重复书写的元素也不影响集合的值;如:1,2,2和1,2,1,2,1表示的集合实际上就是1,2。(3)在集合中,如果元素的值是连续的,可以用子界类型表示;如:1,2,3,4,8,9,10可以表示成1.4,8.10。(4)集合中的元素可以用

15、常量表示,也可以用变量表示或者其基类型允许的表达式。如:若x是整型变量,值为3,则1,2,x,4和1,x-1,x,x+1,5的集合都是合法的。集合的操作:集合的操作:(1)赋值:对集合变量的赋值只能通过赋值语句完成,且赋值号右边必须是一个集合(赋值相容性原理),而不能通过输入语句(read或readln)来进行。如:var s:set of 0.255; i:integer; a,b:0.255; begin s:= ; 首先将集合s置空 for i:=1 to 10 do begin read(a); s:=s+a; 添加数到集合s中 end; for b:=0 to 255 do 判断集合

16、s中取值范围的每一个值是否包含元素b if b in s then write(b, ); end.(2)运算:运算符名称表示形式定义运算结果假设有A,B两个集合,其中A=1,3,4,5,B=4,5,6,7+并集A+B取两个集合中不重复的所有元素1,3,4,5,6,7*交集A*B取两个集合中的相同元素4,5-差集A-B取在集合A中但又不在集合B中的所有元素1,3假设有A,B两个集合,其中A=1,3,4,5,B=1,3,4=相等A=B测试两个集合是否相等false不相等AB测试两个集合是否不相等true=包含于A=包含A=B测试集合A是否包含集合B中的所有元素true假设元素x=1,集合A=1,

17、2,3,4in属于集合/成员x in A判读元素是否属于集合true注意事项:注意事项:(1)集合类型是一种使用简便,节省内存又运算速度快的数据类型。集合运算相当快,在程序中常用集合表达式来描述复杂的测试。如:(ch=T) or (ch=t) or (ch=Y) or (ch=y) 可用集合表达式表示为:ch in T,t,Y,y if (ch=20) and (ch=50) then .; 可写成:if ch in 20.50 then .;(2)集合类型变量不能进行算术运算,不允许用读/写语句直接输入/输出集合。所以集合的建立要通过赋值语句实现,或先初始化一个集合,然后通过并运算向集合中逐

18、步加入各个元素。(3)集合元素是无序的,所以ord,pred和succ函数不能用于集合类型的变量。 习题:用筛选法求n以内的所有素数。【算法如下】初始化:设一个2到n的全体整数集合,即s:=2.n, 同时设一个空集合存放结果,即p:= ;i从集合s中最小的数开始;将i添加到p中,然后将s中所有i的倍数从s中筛去;循环重复,直到筛空s。记录记录定义:计算机中的数据类型都是根据现实需求引入的,如:数值数据整型和实型;文本数据字符和字符串类型;同类的一组数据数组类型。但现实中有些数据对象是由不同类型的数据项组成的整体。如:一本书的相关信息。如:一本书的相关信息。书名:书名:Pascal语言(中学版)

19、语言(中学版)出版社:北京理工大学出版社出版社:北京理工大学出版社定价:定价:30.00元元其中,书名、出版社是不同长度的字符串类型,定价是实型。可以用3个单独的变量来表示这些数据,但无法体现它们的关系,也无法进行整体操作。因此,Pascal提供了记录类型。记录记录(record)是由一组不同类型的数据项构成的整体,记录中的数据项叫做记录是由一组不同类型的数据项构成的整体,记录中的数据项叫做记录的域的域(field)。格式一:格式一:type 记录类型名=record域名1:类型1; 域名2:类型2; . 域名n:类型n; end; var 变量名:记录类型名;其中,记录的类型名和各个域名都必

20、须是合法标识符,域的数据类型可以是标准数据类型,也可以自定义数据类型。格式二:格式二:var 变量名:record 域名1:类型1; 域名2:类型2; . 域名n:类型n; end;如:type booktype=record; title:string50; publisher:string50; price:real;end;var book1:booktype;或:var book1:record; title:string100; publisher:string50; price:real;end;如:定义学生的相关信息:学号 字符串类型姓名 字符串类型年龄 整型性别 字符型是否团员

21、 布尔型家庭住址 字符串类型电话号码 字符串类型语文成绩 实型数学成绩 实型英语成绩 实型政治成绩 实型历史成绩 实型type studata=record num:string6; name:string10; age:integer; sex:char; ty:boolean; add:string30; tel:string12; Chinese:real; Maths:real; English:real; Politics:real; History:real; end;记录成员的引用:记录成员的引用:(1)直接引用:记录名.域名记录中的每个域都相当于一个相应数据类型的变量,可以对其进行相应

温馨提示

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

评论

0/150

提交评论