人人终身学习知识网~是各类综合知识资源信息分享,提升综合素质与提高知识技能的终身学习网络平台

 找回密码
 立即注册

QQ登录

只需一步,快速开始

微信登录

微信扫码,快速开始

信息学竞赛Pascal语言:记录与文件类型(九) 标签:信息学

[复制链接]

优学合肥奥数网讯:合肥市青少年信息学竞赛Pascal语言:记录与文件类型。

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后只使用一个记录变量名。

文件

文件是一种构造型的数据类型。在程序中都需要产生一些输出,也需要接受若干个输入。这些输入、输出实际上是用文件的方法来实现的,在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:下面是一个建立和使用文件的程序:

program wenjian;

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[i].name) ;

for j:=1 to m do

read(st[i].score[j]);

readln;

write(stfile,st[i]);

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[i]:=0;

for i:=1 to n do

begin

read(stfile,st[i]);

with st[i] do

begin

sumst[i]:=0;

for j:=1 to m do

begin

sumst[i]:=sumst[i]+score[j];

sumsub[j]:=sumsub[j]+score[j];

end;

end;

end;

close(stfile);

sum:=0;

for i:=1 to n do

sum:=sum+sumst[i];

for i:=1 to n do

begin

with st[i] do

begin

write(name);

for j:=1 to m do write(score[j]:6);

end;

writeln(sumst[i]:6);

end;

write('sum=');

for i:=1 to m do

write(sumsub[i]:6);

writeln(sum:8);

end;

begin

newfile;

jisuan;

end.

练习:

编写程序从磁盘上读取一个由100个实数组成的实型数据文件(indata.dat),以此文件中所有大于平均值的实数建立一个名为“above.dat”的文件,其余的建立一个名为“rest.dat”的文件。

往期最新阅读:信息学竞赛Pascal语言:集合类型(八)

信息学竞赛Pascal语言:子界与枚举类型(七)

更多内容,请参加优学合肥奥数网“杯赛竞赛”频道。

回复

使用道具 举报

小黑屋/人人终身学习知识网~是各类综合知识资源信息分享,提升综合素质与提高知识技能的终身学习网络平台

Powered by 5wangxiao

© 2007-2021 5wangxiao.Com Inc.

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