记录与文件类型

[复制链接]
发表于 2023-12-22 17:49:33 | 显示全部楼层 |阅读模式
记录
1.记录的定义:
  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;
2.记录的运用:
  (1)对记录中和个域的引用,要写出记录名和域名,如:student.num
  (2)开域语句:with。
    with 记录名 do 语句;
   或
    with 记录名1,记录名2,... do 语句;
   注意:
   1. 在do后面语句中使用的记录的域时,只要简单地写出域名就可以了,域名前的记录变量和"."均可省略。
   2. 在关键字with后面,语句可以是一个简单语句,了可以是一个复合语句。
    3. 虽然在with后可以有多个记录变量名,但一般在with后只使用一个记录变量名。
10.2 文件
文件是一种构造型的数据类型。在程序中都需要产生一些输出,也需要接受若干个输入。这些输入、输出实际上是用文件的方法来实现的,在Pascal中用标准文件“input”和“output”来实现,它们分别对应标准输入设备和标准输出设备(可省略不写)这也就是一些程序的程序书写如下的原因了:
  program ex(input,output);
  ...
  但有时大量数据的读入和输出都是来是磁盘文件,这就要求我们必须熟练掌握对磁盘文件的操作。
  对于我们来说,我们只必须掌握文本文件(或称正文文件,text)的读写即可:
1.文本文件的定义:
   文本文件不是简单地由某类型的元素序列所组成,它的基本元素是字符,由它们构成行,若干行组成一份原文。由于各行的长度可以不同,所以文本文件只能顺序地处理。文本文件的定义如下:
    var
     fp:text;
2.文本文件的读操作:
   (1)调用assign过程,把磁盘文件赋予文本文件变量;
      assign(fp,filename);
   (2)调用reset过程,为读操作做准备;
      reset(fp);
   (3)在需要读数据的位置调用read过程或readln过程。
      readln(fp,var1,var2,...,varn);
3.文本文件的写操作:
   (1)调用assign过程,把磁盘文件赋予文本文件变量;
      assign(fp,filename);
   (2)调用rewrite过程,为读操作做准备;
      rewrite(fp);
   (3)在需要读数据的位置调用write过程或writeln过程。
      writeln(fp,var1,var2,...,varn);
4.文本文件的关闭操作:
   close(fp);
5.文本文件的其他操作:
   (1)EOF(fp)—布尔函数,用于判断文件结束否。
   (2)EOLN(fp)—布尔函数,用于判断行结束否。
例1:下面是一个建立和使用文件的程序:

programwenjian;
const n=3; m=2;
type student=record
       name:string;
       score:array[1..m] of 0..100;
        end;
var  st:array[1..n] of student;
     stfile:file of student ;
     sumst:array[1..n] of integer;
     sumsub:array[1..m] of integer;
     sum:integer;
procedure newfile;
var i,j:integer;
begin
assign(stfile,'score.fil');
rewrite(stfile);
for i:=1 to n do
begin
writeln('Input student  ',i,'  name and ',m,' score');
readln(st.name) ;
    for j:=1 to m do
    read(st.score[j]);
    readln;
write(stfile,st);
end;
close(stfile);
writeln ;
writeln;
end;
procedure jisuan;
var i,j:integer;
begin
assign(stfile,'score.fil');
reset(stfile);
for i:=1 to m do sumsub:=0;
for i:=1 to n do
  begin
  read(stfile,st);
  with st do
  begin
  sumst:=0;
  for j:=1 to m do
  begin
  sumst:=sumst+score[j];
  sumsub[j]:=sumsub[j]+score[j];
  end;
  end;
  end;
close(stfile);
sum:=0;
for i:=1 to n do
   sum:=sum+sumst;
for i:=1 to n do
    begin
    with st do
    begin
    write(name);
    for j:=1 to m do write(score[j]:6);
    end;
    writeln(sumst:6);
    end;
write('sum=');
for i:=1 to m do
write(sumsub:6);
writeln(sum:8);
end; begin  newfile;  jisuan; end.
回复

使用道具 举报

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

本版积分规则

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