您现在的位置:小学生自学网>> 信息>> pascal语言>> 基础教程

pascal第十九讲:集合与记录

作者: 来源: 发布时间:2009年05月12日 点击数:
 

集 合
一.集合的定义:
   type 类型名=set of 基类型
   例如:
     type
      num=set of char;
     var
      n:num;
    或
     var
      n: set of char;

  二.集合的运算:
    1.集合的表示:
     用一组方括号括号一组元素来表示,元素之间用逗号分隔。如:
      [A,B,C,D]--有四个枚举量的集合
      ['A','B','C','D']--有四个字符的集合
      [1..20]--包含了1到20中所有整数的集合
      [0]--只有一个元素0的单元素集
      []--空集
    2.集合的运算:
     (1)赋值(:=):
       ll:=['A'..'C'];
     (2)并(+):
       [0..7]+[0..4]的值为[0..7]
     (3)交(*):
       [0..7]*[0..4]的值为[0..4]
     (4)差(-):
       [0..7]-[0..4]的值为[5..7]
     (5)相等(=):
       [0..7]=[0..4]的值为false
     (6)不等(<>):
       [0..7]<>[0..4]的值为true
     (7)包含于(<=):
       [0..7]<=[0..4]的值为false
     (8)包含(>=):
       [0..7]>=[0..4]的值为true
     (9)成员存在于 (in):
       1 in [0..4]的值为true
    3.注意:
     (1)集合运算相当快,在程序中常用集合表达式来描述复杂的测试。如
       A)条件表达式: (ch='T') or (ch='t') or (ch='Y') or (ch='y') 可用集合表达式表示为:
        ch in ['T','t','Y','y']
       B)if (ch>=20) and (ch<=50) then ...;
        可写成:
          if ch in [20..50] then ...;
     (2)集合类型是一种使用简便,节省内存面又运算速度快的数据类型。
     (3)Turbo Pascal规定集合的元素个数不超过256个(当实际问题所需的元素个数大于256时, 可采用布尔数组代替集合类型)。所以如下定义是错误的: var i: set of integer;
     (4)集合类型变量不能进行算术运算,了不允许用读/写语句直接输入/输出集合。 所以集合的建立:
      A)要通过赋值语句实现;
      B)或先初始化一个集合,然后通过并运算向集合中逐步加入各个元素.
     (5)集合元素是无序的,所以ord,pred和succ函数不能用于集合类型的变量。
    4.例1:建立两个集合,然后对它们进行多种集合运算,并且输出结果。
    5.例2:运用集合完成筛法找素数。

 三、练习
   1、从键盘输入一个字符串,进行下面的变换:
    (1)数字0,1,2,3,...,9分别和字母a,b,c,...,j互换;
    (2)字母k,m,p,t,y分别与其后继互换;
    (3)其它字母和空格保持不变,输入字符串以句号结束;
   2.编程读入两个字符串,然后输出如下信息
    (1)出现在某一个字符串中至少一次的字母和数字;
    (2)同时出现在两个字符串中至少一次的字母和数字;
    (3)出现在一个字符串中而不出现在另一个字符串中的字母和数字;
    (4)不出现在任何字符串中的字母和数字。

记  录

  一.记录的定义:
   type 类型标识符=record
      字段名1:类型1;
      字段名2:类型2;
       ...
      字段名n:类型n;
     end;
   如:
    type
     studata=record
      num:string[6];
      name:string[8];
      sex:boolean;
      s:array[1..5] of real;
     end;
    var
     student:studata;
     students:array[1..10] of studata;
  二.记录的运用:
   1.对记录中和个域的引用,要写出记录名和域名,如:student.num
   2.开域语句:with。
     with 记录名 do 语句;
    或
     with 记录名1,记录名2,... do 语句;
    注意:
     (1) 在do后面语句中使用的记录的域时,只要简单地写出域名就可以了, 域名前的记录变量和"."均可省略。
     (2) 在关键字with后面,语句可以是一个简单语句,了可以是一个复合语句。
     (3) 虽然在with后可以有多个记录变量名,但一般在with后只使用一个记录变量名。

[例6、2]编一程序,用来记录20个学生的姓名、年级、班级、性别、语文成绩数学成绩、总分,平均分。
Type student=record
  Name:string;
  Grade,class,chinese,mathe,sum:integer;
  Average:real;
  Male:boolean;
End;
Var s:array[1..20] of student;
  I,j:integer;
Begin
 For I:=1 to 20 do begin
  Write(‘please input the student’s name,grade,class,male,chinese,mathe);
  Readln(s[I].name);
  Readln(s[I].grade);
  Readln(s[I].class);
  Readln(s[I].male);
  Readln(s[I].chinese);
  Readln(s[I].mathe);
  S[I].sum:=s[I].chinese+s[I].mathe;
  S[I].average:=s[i].sum/2
 End;
 …………
 {如果程序要求打印或排序,只需在此增加这些功能语句}
end.