第6章1枚举子界集合(pascal程序语言基础).ppt

上传人:本田雅阁 文档编号:2257283 上传时间:2019-03-12 格式:PPT 页数:46 大小:399.01KB
返回 下载 相关 举报
第6章1枚举子界集合(pascal程序语言基础).ppt_第1页
第1页 / 共46页
第6章1枚举子界集合(pascal程序语言基础).ppt_第2页
第2页 / 共46页
第6章1枚举子界集合(pascal程序语言基础).ppt_第3页
第3页 / 共46页
亲,该文档总共46页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《第6章1枚举子界集合(pascal程序语言基础).ppt》由会员分享,可在线阅读,更多相关《第6章1枚举子界集合(pascal程序语言基础).ppt(46页珍藏版)》请在三一文库上搜索。

1、,枚举、子界、集合,pascal语言中的数据类型,目前为止我们所用到的数据类型包括:,整型(integer longint) 实型(real double) 布尔型(boolean) 字符型(char),以上数据类型是pascal规定的标准数据类型,只要 用相应的关键字,pascal编译系统就能识别并按这些类型来处理,pascal语言中的数据类型,除以上标准数据类型之外,pascal还允许用户自定义数据类型,变量与类型:,var i:integer; r:real;,其表示的类型含义为:,确定一个值域,即取值范围(i变量为整型,表示i只能在 整型数规定的-3276832767这个范围内取值,超

2、过此范 围就会出错 确定数据的存储方式(整型数据和实型数据在计算机中的 存储方式是不同的) 规定的相应运算种类(例如实型不能进行DIV,MOD运算),算法+数据结构=程序,即:不同的数据类型所使用的操作方法(算法)是不同的。,因此,针对具体的问题选择相应的数据类型是程序设计的关键,枚举类型,为什么要使用枚举类型:,如性别,月份,颜色,星期几等一系列非数值问题时,我们应当怎样处理?,例如:使变量sex为整型变量,if sex=1 then writeln(he is a man) else writeln(she is a women);,缺点:不直观,可读性差,if sex=man then

3、writeln(he is a man) else writeln(she is a women);,如果写成:,事先考虑到某一变量尽可能取的值,尽量用自然语言中含义清楚的单词来表示它的每一个值,这种方法称作枚举方法,这种方法定义的类型称为枚举类型。,枚举类型,枚举类型的定义:,type 枚举类型标识符=(标识符1,标识符2);,type color=(red,yellow,blue,white,black); xingbie=(man,women);,例如:定义颜色的枚举类型和性别的枚举类型,枚举类型,枚举类型的应用举例:,program ex1; type sextype=(man,wom

4、an); var sex:sextype; begin sex:=women; if sex=man then writeln(he is a man) else writeln(he is a women); end.,program ex2; type colortype=(red,yellow,blue); var color:colortype; begin color=red; case color of red:writeln(the color is red); yellow:writeln(the color is yellow); blue:writeln(the color

5、 is blue); end; end.,枚举类型,枚举类型的数据性质: 枚举元素只能是标识符,而不能是数字常量和 字符常量,例如下面的定义是错误的,type colortpye=(red,yellow,blue); numtype=(1,2,3,4,5);,类型标识符和枚举元素不得使用pascal中的保留字 和关键字,否则编译时将出错误,同一个枚举元素不能出现在两个或两个以上的枚举 类型定义中,type color1=(red,yellow,blue); color2=(red,black,white); 是不允许的,因为red同属于了两个枚举类型。,不要把作为枚举元素的标识符视为变量名,它

6、是不能 被赋值的,下面的赋值是错误的,Red=red woman=0,枚举类型,枚举类型属于顺序类型。根据定义类型时个枚举元素 的排列顺序确定它们的序号。(前面的序号小,从0 开始)例如:,type colortype=(red,yellow,blue,white,black); 则ord(red)=0 succ(red)=yellow pred(black)=white,枚举类型,枚举型数据只能进行关系运算(=, =)不能进行算术运算(+,-,*)和逻辑运算 (and,or),枚举变量的值只能用赋值语句来获得,不能对枚举变 量进行读写。如下语句都是不合法的:,type colortype=(

7、red,yellow,blue,white,black); Var color:colortype; Begin read(color);或write(color);,总之:枚举类型的数据不能用read和write语句进行读写,枚举变量可以作为循环变量。枚举元素可以作为循 环的初值和终值。,如: for color:=red to black do 共执行5次循环(color=red-yellow-blue- white-black),枚举类型,教材例6-1的分析,如: for color:=red to black do 共执行5次循环(color=red-yellow-blue- whit

8、e-black),枚举类型的应用,For i:=apple to orange do for j:=succ(i) to banana do for k:=succ(j) do pineapple do 可改成: For i:=apple to pineapple do for j:=apple to pineapple do if ij then for k:=apple to pineapple do if (ik) and (jk) then begin ,枚举类型的应用 例6-1解法2,const ft:array14 of string=(苹果 ,橙子 ,香蕉 ,菠萝 ); var

9、i,j,k,l:01; begin for i:=0 to 1 do for j:=0 to 1 do for k:=0 to 1 do for l:=0 to 1 do if i+j+k+l =3 then begin if i=1 then write(ft1); if j=1 then write(ft2); if k=1 then write(ft3); if l=1 then write(ft4); writeln; end; end.,课堂练习,取球问题:求从红、黄、蓝、白、黑五种颜色的球中,取三种颜色的球的可能的取法,用red、yellow、blue、white、black描述三

10、种上颜色的所有可能的取法。 输入格式: 无 输出格式: 输出每种取法的序号(占4个字符位,左对齐)和三种颜色(每种颜色占10个字符位,左对齐) 输出样例: Red yellow blue Red yellow white ,子界类型,实际问题:,一年中有多少个月?每一个月最多有多少天?一个班最多有多少个人?,integer类型所表示的范围是多少?,如果我们能在程序中对所有的变量的值域(取值范围)作具体规定的话,就便于检查出那些不合法的数据,例如一月中的日期只能是1-31之间的一个数值,由于误操作输入了32,pascal就能指出这个错误,不需要人工的干预.,子界类型,子界类型:规定的值域的上界和

11、下界及其类型的一种数据类型,子界类型的定义:,Type days=131; Var someday:days,定义了一个days类型的变量someday someday变量值的数据类型(基类型)为整型 someday的值只能在131范围,子界类型,子界类型定义说明:,上界和下界必须是顺序类型,且为同一顺序类型。也就是说整型,字符型,布尔型,枚举型数据都可以作为上、下界。并且上界序号必须大于下界序号。,Type age=0.5100 letter1=0z letter2=az letter3=za,以上定义的子界类型中哪些正确、哪些错误?为什么?,子界类型的上、下界确定了子界类型的基类型。,由于

12、1和31都是属整型数据,因此days类型的基类型 为整型; someday变量的值为整型 其值范围在131之间,Type days=131; Var someday:days,子界类型,如果子界类型的基类型为枚举型,则应在类型中先 定义枚举类型,type week=(mon,tue,wed,thu,fri,sat,sun); studyday=monfri; var day1:studyday;,day1变量的值只能 取mon,tue,wed,thu, fri之一,子界类型,子界类型的作用:,在程序设计中对数据“界”的检查是很重要的一项 工作而又常常被人忽略。定义子界类型后,就可 以把界的检查

13、工作交给编译器完成,不需要人工 进行。 节省内存空间,增强程序的可读性。,子界类型,子界类型的运算规则:,凡可以使用子界类型的基类型数据之处,均可以使 用子界类型的数据。,type r=110; Var radius:r;,问sqr(radius)合法吗?,对基类型的运算规则同样适用于该类型的子界类型。,Type person=1100; Var total:person; 问:total div 100 total mod 100 合法吗?,基类型相同的不同子界类型数据,可以出现在同 一个表达式内,即混合运算,type a=1100; b=11000; c=1500; var x:a; y:

14、b; z:c; t:integer; begin read(x,y,z); t:=x+y+z; writeln(t=,t); end.,输入:50 100 150,问:将红色标出部分改为 z:=x+y+z;合法吗?,子界类型,结论:在上例中当然也可以将表达式的值赋给一个子界类型 变量,因为表达式中的几个子界类型的变量的基类型 都是整型,但是要注意:运算结果不能超出它在类型 说明中定义的范围,上例中如果将红色标出部分改为 x:=x+y+z;合法吗?,X为50,y为100,z为150,将运算结果x+y+z的值300 赋给x,这超出了x的取值范围(0100),就会出错。,子界类型,program c

15、as; var c:char; begin readln(c); case c of 09:writeln(digits); AZ:writeln(UPPER-CASELETTERS); az:writeln(lower-caseletters); else writeln(special charactors); end; end.,可以利用子界类型作为情况语句标号,对数字, 大小写字母和特殊字符进行判别的程序,集 合,1.集合的定义 2.集合的表示 3.集合的运算,集合(数学),集合的概念:某些具有共性,又相互区别的对象汇集在一起所构成的整体,020之间的所有素数;共性:小于20的素数,相

16、互区别:各元素有不同的值 26个小写英文字母;(共性:小写英文字母,相互区别:各自的写法和读法都不同。,集合的表示方法(数学),1.枚举法:将集合中的所有元素列举出来,对于上例1可写成:,元素, 2,3,5,7,11,13,17,19 ,集合,集合的特点:1.同一性; 2.无序性; 3.唯一性,集合的特征:,无序性:,1,3,5,7 = 1,5,3,7 ,唯一性:, 1,3,5,7 = 1,5,3,3,7 ,元素与集合的关系,2 . 不属于,5 2,3,5,7,11,13,17,19 ,1 . 属于,一个元素可以属于和不属于某一个集合,分别用和表示,5 2,4,6,8,10,12,14,16

17、,集合和集合间的关系,1.相等关系,两个集合的成员完全相同时,称这两个集合相等。,2,3,5,7 = 2,3,5,7 ,2,3,5,7 = 2,5,3,7 ,2,3,5,7 = 2,5,3,3,7 ,集合和集合间的关系,集A的所有成员都是集B的所有成员时,称B蕴含A,或称A是B的子集合,2.蕴涵关系, 2,3 2,3,5,7 , 2,3,5,7 2,3,5,7 , 2,3,9 2,3,5,7 ,问,集合和集合间的关系,3.空集:,空集是任何集合的子集,4.幂集:一个集合的所有子集所组成的集合称为此集合的 幂集。, 1,2,3 的幂集是:, ,1,2,3,1,2,1,3,2,3, 1,2,3 ,

18、集合的运算,1.交运算,A B, 1,2,3 2,3,5,7 2,3,集A和集B共有的成员所组成的集合,集合的运算,1.并运算,A B, 2,3,5 5,7 2,3,5,7,集A和集B的所有成员并起来(重复的只算一个)所组成的一个新集合,集合的运算,1.差运算,A -B, 2,3,5 - 5,7 2,3,集A的成员去掉集B中也包含的成员所组成的一个新集合;(相当于A-(AB),A,B,1集合的定义:,基类型:表示集合中元素的类型,可以是整数类型的某一子 界,字符型,布尔型,枚举型。 注意:pascal规定一个集合里的元素必须是同一数据类型。,Pascal定义集合类型的一般形式:, = set

19、of 基类型,2、在pascal中怎么表示和使用集合,type int1=0255; weekday=(sun,mon,tue,wed,thu,fri,sat,sun); weekset=set of weekday; intset=set of int1 var wvar:weekset; ivar:intset; 或写成 var wvar: set of weekday; ivar: set of int1;,规则:pascal规定一个集合的元素个数不能超 过256个;(也就是说基类型所表示的值(整 数)的范围不能超过256) 2基类型的序数值必须在0255的范围内。,思考 type in

20、t0=set of integer; int1=set of -20. . 100; int2=set of 50. . 300; int3= 1,sqrt(4),sqrt(4)+1,sqr(4),在pascal中使用集合的一些规则:,1表示集合的符号是 。例如:2,3 2集合的值放在一对 中,各元素用“,”隔开。 3集合内的值与 内元素出现的次序无关。2,3=3,2 4集合中的同一元素的重复出现对集合的值没有影响。 2,2,3=2,3 5“”用来表示空集。 6集合中,如果元素的值是连续的,则可用“. .”来表示。 1,2,3,4,5,7,8,9=1. .5,7. .9 7每个元素可以用基类型

21、的表达式来表示。 1,succ(4),ord(a),pred(4),集合的运算的数学符号和pascal符号对照表,3、集合类型的运算规则,集合变量的读入:,只能通过赋值语句给集合变量赋值,不能用read语句给集合变量赋值。(跟枚举类型变量一样),color:=; color2:=red , black;,集合并,交,差运算:,,,A:= 1,3,4 ; B:= 1,2,4 ; A+B=? A-B=? A*B=?,集合的关系运算:,=,=,,1,3,5 =1,5 1,3,5 =1,5,3,7 =1,5,3,集合元素的测试:(in),判断一个元素是否在某个集合当中。,1 in1,5,3,7 7 i

22、n1,5,3,集合的输出:不能直接用write语句对集合变量进行输出,4、集合例题,1.若a是 a , c , f , u ,b是 c , d , e, f , g , h ,c是 f , m , p ,计算下列各语句中x的值。 (1) x : =a+b (2)x : =(c-a) * b (3)x:=a+a*a-a,2.若a是 k , l , m , n ,b是 l , m , n, k ,c是 i . . p ,d是,e是k,计算下列布尔表达 式的值(判断哪些是错的)。 c = b (4)a = b (5) bc (6)I in c,1.输入一段句子并以“ ”结尾,统计元音字母和辅音字母出

23、现的次数。 Input: Hello Kitty. Output: yuan=3 fu=7,2.用集合筛选法1求自然数M与N之间(小于256)的素数。 程序文件:(gray6e1.pas) Input:(gray6e1.in) 10 20 Output:(gray6e1.out) 11 13 17 19,编程练习,3. 任意给出一个正整数N,找出一个正整数M,使得N*M的值的数字由0、1、C(C=9)组成,且这些数字至少出现一次。编写程序在整数的范围内找出满足条件的最小M。若没有信息,则输出NO FOUND。 程序文件:(test.pas) Input:(test.in) C=3 N=65 C=3 N=10 C=8 N=125 Output:(test.out) 65*48=3210 10*123=1230 NO FOUND,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1