信息学竞赛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语言:子界与枚举类型(七)
更多内容,请参加查字典合肥奥数网“杯赛竞赛”频道。
【信息学竞赛Pascal语言:记录与文件类型(九)】相关文章:
相关文章
网友关注
网友关注视频
精品推荐
分类导航
- 太原小学奥数第二讲—有余除法
- 太原小学奥数第一讲—找规律
- 武汉楚才作文登报作品《一件“伟大”事》
- 武汉楚才作文登报作品《又是一年银耳飘香》
- 武汉楚才作文登报作品《芬芳何处寻》
- 武汉楚才作文登报作品《我总想着这些事》
- 合肥市28届青少年信息学(计算机)竞赛获奖名单(小学组)
- 屯小13名选手参加包河区第四届青少年信息学计算机竞赛
- NOIP2013普及组初赛答案
- 2013全国青少年信息学奥林匹克竞赛时间日程
- 合肥中小学生参加信息学奥赛有哪些好处?
- 信息学竞赛Pascal语言 数组与字符串(五)
- 合肥市“讯飞”杯信息学竞赛(小学组)考试大纲
- 青少年信息学竞赛对小升初的作用?
- 合肥市青少年信息学竞赛(小学组)大纲
- 合肥市讯飞杯青少年信息学竞赛规则(小学组)
- 合肥“讯飞杯”信息学竞赛评分标准
- 青少年信息学竞赛33个初级篇试题