Pascal的记录

OI爱好者(OIFans.cn)
www.oifans.cn

    记录是描述同一对象的一组类型可能不同的数据的集合。使用记录类型实现了数据逻辑关系和存放形式上的一致。定义记录类型的一般形式          
      记录类型名=record
        域名1:类型1;                
        域名2:类型2;                
        ……                
        域名m:类型m;             
      end;

例如:表示学生信息的记录定义
type
  stype=record
  name:string[20];
  number:integer;
  sex:(male,female);
  class:1..20
  address:string
end;

    域为记录类型的元素。记录的每个域都有名称,不同域的数据类型可以各不相同,这一点是数组所不能做到的。引用记录变量的元素采用以下标记法:
(1)直接引用,其形式为记录变量名.域名
    例如:var str1,str2:stype;
    则str1.name表示学生str1的姓名,str2.sex表示学生str2的性别。

(2)使用with开域语句,其形式为with 记录变量名 do 语句
    在with语句中,引用记录变量名不再冠以记录变量名,以简化对记录中域的引用写法。例如描述100个学生的数据信息,引入元素类型为stype的数组students。   

var
students:array[1..100]of stype;
number_of_boy,number_of _girl,k:integer;

例如下面是一段统计一个班级中男生人数和女生人数的程序。  
begin
  number_of_boy:=0;number_of_girl:=0;
  for k:=1 to 100 do
  with student[k] do
  if sex=male then number_of_boy:=number_of_boy+1
   else number_of_girl:=number_of_girl+1
end;
  with语句的嵌套结构的一般形式:
  with <记录变量名1> do
   with <记录变量名2> do
    ……      
               with <记录变量名n> do
      <语句>;
    使用with嵌套结构时,with的嵌套顺序必须和所打开的记录的嵌套顺序一致,以就是说外层with打开外层记录,内层with打开内层记录。上面的嵌套格式也可以简写为:   
      with <记录变量名1,记录变量名2,……,记录变量名n> do
        <语句>;
   
    若记录是由一部分固定不变和另一部分变化部分是随固定部分中的某个数据项的具体取值而定的数据项所组成的称为记录变体。带记录变体的记录类型定义有以下形式:   
    type
      <类型标识符>=record
       <域名1>:<类型1>;
      <域名2>:<类型2>;
       ……      
         <域名n-1>:<类型n-1>;
           case <标志域>:<类型n> of
            <常量表1>:<域表1>;
            <常量表2>:<域表2>;
        ……
            <常量表m>:<域表m>;
    end;

例:重新定义描述学生信息的记录类型stype,对于大专生,不需要增加其他信息,对于本科生,增加专业信息。
type
  stype=record
    name:string[20];
    number:integer;
    sex:(male,female);
    class:1..20
    address:string
    case studtype:(s,u) of
    s:( );
    u:(major:string);
end;