集合类型

[复制链接]
发表于 2023-12-30 10:12:13 | 显示全部楼层 |阅读模式
集合类型
  集合是由具有某些共同特征的元素构成的一个整体。在pascal中,一个集合是由具有同一有序类型的一组数据元素所组成,这一有序类型称为该集合的基类型。
 (一)集合类型的定义和变量的说明
   集合类型的一般形式为:
    set of <基类型>;
  说明:①基类型可以是任意顺序类型,而不能是实型或其它构造类型;同时,基类型的数据的序号不得超过255。例如下列说明是合法的
  type letters=set of "A".."Z";
     numbers=setof 0..9;
     s1=setof char;
     ss=(sun,mon,tue,wed,thu,fri,sat);
     s2=setof ss;
   ②与其它自定义类型一样,可以将类型说明与变量说明合并在一起。如:
     typenumbers=set of 0..9;
     vars:numbers;
    与var s:set of 0..9;等价。
 (二)集合的值
   集合的值是用"["和"]"括起来,中间为用逗号隔开的若干个集合的元素。如:
   []空集
  [1,2,3]
  ["a","e","i","o","u"]
   都是集合。
 说明:①集合的值放在一对方括号中,各元素之间用逗号隔开
    ②在集合中可以没有任何元素,这样的集合称为空集
    ③在集合中,如果元素的值是连续的,则可用子界型的表示方法表示。例如:  
     [1,2,3,4,5,7,8,9,10,15]
   可以表示成:
     [1..5,7..10,15]
    ④集合的值与方括号内元素出现的次序无关。例如,[1,5,8]和[5,1,8]的值相等。
    ⑤在集合中同一元素的重复出现对集合的值没有影响。例如,[1,8,5,1,8]与[1,5,8]的值相等。
    ⑥每个元素可用基类型所允许的表达式来表示。如[1,1+2,4]、[ch]、[succ(ch)]。
 (三)集合的运算
  1、赋值运算:只能通过赋值语句给集合变量赋值,不能通过读语句赋值,也不能通过write(或writeln)语句直接输出集合变量的值
  2、集合的并、交、差运算:可以对集合进行并、交、差三种运算,每种运算都只能有一个运算符、两个运算对象,所得结果仍为集合。三种运算符分别用"+"、"*"、"-"表示 ;注意它们与算术运算的区别
  3、集合的关系运算:集合可以进行相等或不相等、包含或被包含的关系运算,还能测试一个元素是否在集合中。所用的运算符分别是:=、<>、>=、<=、in
  它们都是二目运算,且前4个运算符的运算对象都是相容的集合类型,最后一个运算符的右边为集合,左边为与集合基类型相同的表达式。
 【例4】设有如下说明:
  type weekday=(sun,mon,tue,wed,thu,fri,sat);
     week=set of weekday;
     subnum=set of 1..50;
  
  
写出下列表达式的值:  
  
   ⑴[sun,sat]+[sun,tue,fri]
  
   ⑵[sun,fri]*[mon,tue]
  
   ⑶[sun,sat]*[sun..sat]
  
   ⑷[sun]-[mon,tue]
  
   ⑸[mon]-[mon,tue]
  
   ⑹[sun..sat]-[mon,sun,sat]
  
   ⑺[1,2,3,5]=[1,5,3,2]
  
   ⑻[1,2,3,4]<>[1..4]
  
   ⑼[1,2,3,5]>=[1..3]
  
   ⑽[1..5]<=[1..4]
  
   ⑾[1,2,3]<=[1..3]
  
   ⑿ 2 in[1..10]
  
  
答:表达式的值分别是:  
  
   ⑴ [sun,sat,tue,fri]
  
   ⑵ [ ]
  
   ⑶ [sun,sat]
  
   ⑷ [sun]
  
   ⑸ [ ]
  
   ⑹ [tue..fri]
  
   ⑺  TRUE
  
   ⑻  FALSE
  
   ⑼  TRUE
  
   ⑽  FALSE
  
   ⑾  TRUE
  
   ⑿  TRUE
 【例5】输入一系列字符,对其中的数字字符、字母字符和其它字符分别计数,输入“?”后结束
   源程序如下:
  program ex10_2;
  var id,il,io:integer;
    ch:char;
    letter:set of char;
    digit:set of "0".."9";
  begin
    letter=["a".."z","A".."Z"];
    digit:=["0".."9"];
    id:=0;il:=0;io:=0;
    repeat
    read(ch);
     ifch in letter
    then il:=il+1
    else if ch in digit
      then id:=id+1
      else io:=io+1;
   until ch="?";
  writeln("letter:",il,"digit:",id,"Other:",io);
  end.

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表