《枚举子界集合(pascal程序语言基础).ppt》由会员分享,可在线阅读,更多相关《枚举子界集合(pascal程序语言基础).ppt(46页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、枚举、子界、集合pascal语言中的数据类型目前为止我们所用到的数据类型包括:l 整型(integer longint)l 实型(real double)l 布尔型(boolean)l 字符型(char)以上数据类型是pascal规定的标准数据类型,只要用相应的关键字,pascal编译系统就能识别并按这些类型来处理pascal语言中的数据类型除以上标准数据类型之外,pascal还允许用户自定义数据类型数据类型简单类型构造类型指针类型基本类型枚举子界数组集合记录文件整型实型字符型布尔型自定义数据类型变量与类型:var i:integer;r:real;其表示的类型含义为:确定一个值域,即取值范围
2、(i变量为整型,表示i只能在 整型数规定的-3276832767这个范围内取值,超过此范 围就会出错确定数据的存储方式(整型数据和实型数据在计算机中的 存储方式是不同的)规定的相应运算种类(例如实型不能进行DIV,MOD运算)算法+数据结构=程序即:不同的数据类型所使用的操作方法(算法)是不同的。因此,针对具体的问题选择相应的数据类型是程序设计的关键枚举类型为什么要使用枚举类型:如性别,月份,颜色,星期几等一系列非数值问题时,我们应当怎样处理?例如:使变量sex为整型变量if sex=1 then writeln(he is a man)else writeln(she is a women)
3、;缺点:不直观,可读性差if sex=man then 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 s
4、extype=(man,woman);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 co
5、lor 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=(red,yellow,blue,white,
7、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-white-black)枚举类型的应用For i:=apple to orang
8、e 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 thenfor k:=apple to pineapple do if(ik)and(jk)then begin枚举类型的应用 例6-1解法2constft:array1.4 of string=(苹果,橙子,香蕉,菠萝);vari,j,k,l:0.1;beginfor i:=0 to 1 dofor j:=0 to 1 dofor k:=
9、0 to 1 dofor l:=0 to 1 doif i+j+k+l=3 then beginif 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描述三种上颜色的所有可能的取法。输入格式:无输出格式:输出每种取法的序号(占4个字符位,左对齐)和三种颜色(每种颜色占10个字符位,左对齐)输出样例
10、:1 Red yellow blue2 Red yellow white子界类型实际问题:一年中有多少个月?每一个月最多有多少天?一个班最多有多少个人?integer类型所表示的范围是多少?如果我们能在程序中对所有的变量的值域(取值范围)作具体规定的话,就便于检查出那些不合法的数据例如一月中的日期只能是1-31之间的一个数值,由于误操作输入了32,pascal就能指出这个错误,不需要人工的干预.子界类型子界类型:规定的值域的上界和下界及其类型的一种数据类型子界类型的定义:Type days=1.31;Var someday:days定义了一个days类型的变量somedaysomeday变量值
11、的数据类型(基类型)为整型someday的值只能在131范围子界类型子界类型定义说明:上界和下界必须是顺序类型,且为同一顺序类型。也就是说整型,字符型,布尔型,枚举型数据都可以作为上、下界。并且上界序号必须大于下界序号。Type age=0.5.100 letter1=0.z letter2=a.z letter3=z.a以上定义的子界类型中哪些正确、哪些错误?为什么?子界类型的上、下界确定了子界类型的基类型。由于1和31都是属整型数据,因此days类型的基类型为整型;someday变量的值为整型 其值范围在131之间Type days=1.31;Var someday:days子界类型如果子
12、界类型的基类型为枚举型,则应在类型中先 定义枚举类型type week=(mon,tue,wed,thu,fri,sat,sun);studyday=mon.fri;var day1:studyday;day1变量的值只能取mon,tue,wed,thu,fri之一子界类型子界类型的作用:在程序设计中对数据“界”的检查是很重要的一项 工作而又常常被人忽略。定义子界类型后,就可 以把界的检查工作交给编译器完成,不需要人工 进行。节省内存空间,增强程序的可读性。子界类型子界类型的运算规则:凡可以使用子界类型的基类型数据之处,均可以使 用子界类型的数据。type r=1.10;Var radius:
13、r;问sqr(radius)合法吗?对基类型的运算规则同样适用于该类型的子界类型。Type person=1.100;Var total:person;问:total div 100 total mod 100 合法吗?基类型相同的不同子界类型数据,可以出现在同 一个表达式内,即混合运算type a=1.100;b=1.1000;c=1.500;var x:a;y: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;合法吗?子界类型结论:在上例中当然也可以将
14、表达式的值赋给一个子界类型 变量,因为表达式中的几个子界类型的变量的基类型 都是整型,但是要注意:运算结果不能超出它在类型 说明中定义的范围上例中如果将红色标出部分改为x:=x+y+z;合法吗?X为50,y为100,z为150,将运算结果x+y+z的值300赋给x,这超出了x的取值范围(0.100),就会出错。子界类型program cas;var c:char;begin readln(c);case c of 0.9:writeln(digits);A.Z:writeln(UPPER-CASELETTERS);a.z:writeln(lower-caseletters);else writ
15、eln(special charactors);end;end.可以利用子界类型作为情况语句标号对数字,大小写字母和特殊字符进行判别的程序集 合 1.集合的定义 2.集合的表示 3.集合的运算 集合(数学)集合的概念:某些具有共性,又相互区别的对象汇集在一起所构成的整体 020之间的所有素数;共性:小于20的素数,相互区别:各元素有不同的值 26个小写英文字母;(共性:小写英文字母,相互区别:各自的写法和读法都不同。集合的表示方法(数学)1.枚举法:将集合中的所有元素列举出来对于上例1可写成:元素 2,3,5,7,11,13,17,19 集合集合的特点:1.同一性;2.无序性;3.唯一性集合的
16、特征:无序性: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 集合和集合间的关系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
17、2,3,5,7 问集合和集合间的关系3.空集:空集是任何集合的子集4.幂集:一个集合的所有子集所组成的集合称为此集合的 幂集。1,2,3 的幂集是:,1,2,3,1,2,1,3,2,3,1,2,3 没有任何元素的集合称为空集,记作 或集合的运算1.交运算A B 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的所有成员并起来(重复的只算一个)所组成的一个新集合A B 集合的运算1.差运算A-B 2,3,5-5,7 2,3集A的成员去掉集B中也包含的成员所组成的一个新集合;(相当于A-(AB)A B
18、 1 集合的定义:基类型:表示集合中元素的类型,可以是整数类型的某一子 界,字符型,布尔型,枚举型。注意:pascal规定一个集合里的元素必须是同一数据类型。Pascal定义集合类型的一般形式:=set of 基类型2、在pascal中怎么表示和使用集合type int1=0.255;weekday=(sun,mon,tue,wed,thu,fri,sat,sun);weekset=set of weekday;intset=set of int1var wvar:weekset;ivar:intset;或写成 var wvar:set of weekday;ivar:set of int1;
19、规则:pascal规定一个集合的元素个数不能超 过256个;(也就是说基类型所表示的值(整 数)的范围不能超过256)2基类型的序数值必须在0255的范围内。思考type int0=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,32集合的值放在一对 中,各元素用“,”隔开。3集合内的值与 内元素出现的次序无关。2,3=3,24集合中的同一元素的重复出现对集合的值没有影响。2,2,3=2,35“”用来表示空集。
20、6集合中,如果元素的值是连续的,则可用“.”来表示。1,2,3,4,5,7,8,9=1.5,7.9 7每个元素可以用基类型的表达式来表示。1,succ(4),ord(a),pred(4)集合的运算的数学符号和pascal符号对照表数学 pascal in3、集合类型的运算规则集合变量的读入:只能通过赋值语句给集合变量赋值,不能用read语句给集合变量赋值。(跟枚举类型变量一样)color:=;color2:=red,black;集合并,交,差运算:,A:=1,3,4;B:=1,2,4;A+B=?A-B=?A*B=?集合的关系运算:=,=,1,3,5=1,51,3,5=1,5,3,7=1,5,3
21、集合元素的测试:(in)判断一个元素是否在某个集合当中。1 in1,5,3,7 7 in1,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-a2.若a是 k,l,m,n,b是 l,m,n,k,c是 i.p,d是,e是k,计算下列布尔表达 式的值(判断哪些是错的)。(1)c=b(4)a=b(5)bc(6)I in c1.输入一段句子并以“”结尾,统计元音字母和辅音字母出现的次数。Input:Hello Ki
22、tty.Output:yuan=3 fu=72.用集合筛选法1求自然数M与N之间(小于256)的素数。程序文件:(gray6e1.pas)Input:(gray6e1.in)10 20Output:(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=125Output:(test.out)65*48=3210 10*123=1230 NO FOUND