版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、使用文件输入输出数据任何程序都需要产生一些输出,有时也需要接受若干个输入。这些输入、输出实际上是可以用文件的方式来实现的,在Pascal中可以用标准文件“input”和“output”来实现,它们分别对应标准的输入设备和标准输出设备(可省略不写),这也就是一些程序的首部如下书写的原因:program ex(input,output);或:program ex;对于大量数据的输入和输出都是用文件来实现的,因此,这就要求我们必须熟练掌握在程序中实现对文件的操作。第1节 产生随机数文件【问题描述】编写一个程序,产生500个1000以内的随机正整数,存放在data.out文件中,并同时统计从其中大于等
2、于500的数据个数。【问题分析】本题有两个问题需要解决,一要掌握随机数的生成原理,让计算机自动生成随机数;二是将计算机产生的随机数据存入文件中。【程序实现】Program p4_1(input,output);const n=500; n为控制随机数个数的变量vari,a,s:integer; i为循环变量、a为暂时存放随机数的变量、s为>=500的数的个数f:text;定义f为文本文件变量beginassign(f,'data.out');关联文件变量f到一个外部文件data.outrewrite(f);以新建写文件的方式打开文件randomize;设置随机种子s:=0
3、;统计变量清零for i:=1 to n dobegina:=random(1001);产生随机数write(f,a:5);将随机数写到文件里if i mod 10 =0 then writeln(f); 每写10个数换一行if a>=500 then s:=s+1; 统计>=500的数的个数end;close(f);关闭文件write('>=500 :', s); 在屏幕上打印>=500的数的个数s end.【相关知识】1pascal程序中写文件的5个步骤在Pascal程序重创建文件并写入数据要经历5个步骤,即:定义文件变量、关联、写准备、写数据、关闭
4、文件变量。 定义:在变量说明部分定义文件变量,变量名自己取,类型定义为text型。 关联:将一外部磁盘文件名赋于文本文件变量,使该文本文件与一相应外部磁盘文件相关联。命令格式为:assign(f,name)其中f为定义的文本文件变量,name为实际磁盘上文件的文件名如:assign(file1, ' fileout.dat ' ) 或:assign(f1,'e:aq2006a1.out ')磁盘文件如包含路径,如'e:aq2006a1.out ' ,则表示将文件存放到e:aq2006文件夹中,文件名为a1.out,如果不加路径,则存放在pasca
5、l工作目录中,如果工作目录没有更改,Free Pascal默认的工作目录一般为“C:”。经过关联后,在程序中,如果对文本文件变量file1或f1的操作,也就是对外部实际磁盘文件fileout.dat或e:aq2006a1.out的操作。 写准备:如果要向文件中写入数据,则在写入数据之前应先以写入方式打开。具体的写打开方式有两种:命令格式:rewrite(f)功能:创建并打开新文件准备写,若已有同名文件则删除再创建命令格式:append(f)功能:打开已存在的文件并追加 写数据:写入数据时,就使用输出语句write和writeln语句,写入的效果就如同将屏幕上的数据原样写入文件中。只是在使用这两
6、条语句时,必须先使用文件变量指明写入对象。如:Write(f,s) 或 writeln(file1,a(5),a(6)前者含义为向文件f中写入变量s的值,后者的含义为向文件file1写入数组变量a(5)、a(6)的值。注意,这些数据实际上是写入这些文件变量所关联的磁盘文件中。 关闭:文件写完后,必须关闭,关闭的格式为:Close(f),即关闭文件变量f。2查看文本文件由于文本文件是以ASCII码的方式存储,故查看文本文件的内容是极为方便,在DOS状态可使用 DOS中TYPE等命令进行查看,在Pascal中可以象取程序一样取出文件进行查看。而在windows操作系统中,最方便的方法是按下键盘上空
7、格键两边的windows键,切换到桌面,再找到刚才程序生成的数据文件,用记事本查看该数据文件的内容,如图1.1图4.1所示的就是用记事本打开示例数据文件的效果。图4.1 用记事本打开数据3文本文件的特点 行结构文本文件由若干行组成,行与行之间用行结束标记隔开,文件末尾有一个文件结束标记。由于各行长度可能不同,所以无法计算出给定行在文本文件中的确定位置,从而只能顺序地处理文本文件,而且不能对一文本文件同时进行输入和输出。 自动转换功能文本文件的每一个元素均为字符型,在将一个变量写入文本文件时,也会自动转移为字符型。与此相反,
8、在将文件元素读入到一个变量(整型,实型或字符串型)中时,Free Pascal会自动将其转换为与变量相同的数据类型。4计算机自动生成随机数随机数是计算机程序中方便获得大量模拟数据的一个重要手段。在pascal中,可以利用random 函数自动生成随机数,其格式为:random(range)不指定range时,结果是0,1之间的随机实数(0,1表示0并且1)。如果指定了range,range必须是整型表达式,结果为0,range之间的随机正整数,如果range为0则,返回0。随机数产生程序由randomize命令初始化,因此在使用random函数之前,应先使用randomize命令进行随机种子的
9、初始化。【同步练习】1已知斐波那契(faibonacci)数列的前几个数分别是0、1、1、2、3、5、8,编写程序求此数列的前100项,并将前100项输出到一个文件中。问题分析:此问题的解决利用以前章节所学的知识完全可以解决,只要掌握斐波那契数列从第3项开始,任意一项的值等于前两项值的和,即:F(n)= F(n-1)+ F(n-2)需要注意的是循环的次数要控制准确,因为第1项是从0开始的,而不想通常的题目是从1开始的。本题中练习的重点是如何将这些数输入到文件中,只要掌握的血文件的基本要领,本题是不难完成的。程序设计:略2照使用pascal语言程序写文件的步骤有如下5步,请将它们正确排序: 用w
10、rite或writeln向文件中写入数据。 用close命令关闭文件。 在程序说明的var区用text类型标志定义一个文件变量。 用rewrite或者用append命令以新建或追加方式打开文件,准备存放数据。 用assigh命令设定要操作的磁盘文件。正确的步骤是:_第2节 对文件中的数据进行排序【问题描述】在上一课由程序生成的文件data.out中,读入500个随机数,将它们排序后存放到datasort.out中。【问题分析】本例中先要打开data.out文件,将其中的数据读入到一个数组中,然后进行排序,最后将排序的结果输出到文件datasort.out 中。只要认真仔细的按照文件数据的读取和
11、写入的步骤来编程,程序的实现应该是不成问题的。【程序实现】Program p4_2(input,output);const n=500; n为控制随机数个数的变量vari,j,p,t:integer;f1,f2:text;定义f1、f2为文本文件变量a:array1.n of integer;定义数组abeginassign(f1,'data.out');关联文件变量f1到外部文件data.outreset(f1);复位文件指针,以读方式打开文件for i:=1 to n do read(f1,ai);读入数据存放到数组a中close(f1);for i:=1 to n-1 d
12、o选择法排序beginp:=i;for j:=i+1 to n doif aj<ap then p:=j;t:=ai;ai:=ap;ap:=t;end;assign(f2,'datasort.out');关联文件变量f2到输出文件datasort.outrewrite(f2);以新建写文件的方式打开文件f2for i:=1 to n dobeginwrite(f2,ai:5);将数组中的数依次写到文件里if i mod 10 =0 then writeln(f2); 每写10个数换一行end;close(f2);关闭文件end.程序运行后,用记事本程序打开datasort
13、.out文件,可以看到排列好的数据如图4.2所示。 图4.2 排序后的数据文件内容【相关知识】1pascal程序中读文件的5个步骤在Pascal程序中读入也要经历5个步骤,即:定义文件变量、关联磁盘文件、读准备、读数据、关闭文件变量。定义文件变量、关联磁盘文件、关闭文件变量等几步和写文件操作类似,这里就不再赘述了。读准备是在读数据之前,先以读方式,复位文件指针,命令格式是reset(文件变量)。读数据时,就使用读语句read和readln语句。和写文件数据一样,读数据时也要指定从那个文件变量中读入数据。如:rea
14、d(f,s) 或 readln(file1,a(5),a(6)即从文件f中读入数据,赋值给变量s;从文件file1中读入两个数据,赋值给数组变量a(5)、a(6)。以读文件方式时打开文件时,实际上有一个文件指针指向第1个数据,读完一个数据后,指针自动指向下一个数据,当程序中再有读数据操作时,将读入指针所指的数据。碰到readln语句时,读完readln语句所需数据后,文件指针自动换行,指向下一行的第1个数据。2与文本文件相关的函数:与文本文件相关的函数有两个,即eof(f)和eoln(f),它们的含义是:(1)eof(f) 布尔函数,用于判断文件结束否。其中f是文件变量,函数的返回结果为tru
15、e时,表示到达文件尾,反之则未到文件尾。eof是end of file的缩写。(2)eoln(f) 布尔函数,用于判断行结束否。其中f是文件变量,函数的返回结果为true时,表示到达本行结尾,反之则未到行尾。eoln是end of line的缩写。【同步练习】 1现有两个已经按从小到大排好序的整数文件f1和f2,请编写程序将f1和f2合并成一个文件f12,使得合并后的文件也是按从小到大排好序的。问题分析:解决本题需要处理好以下几个方面的问题。 本文题涉及到同时对三个文件的操作,同时从f1和f2中读取数据,再向f3中写数据。只要思路清晰,文件的读写部分难度不大。 由于数据量不定,读取数据用whi
16、le循环,循环的条件由eof(f)函数来控制。 合并的算法可以采用如下思路:先从f1和f2各读一个数a1、a2,比较大小,将小的(假如a2小)写入f3;接着再在f2中读一个数,跟a1比,小的写入f3,依此类推,直到某个文件中的数读完,再将另外一个文件中剩下的数依次写入f3。这个算法就好像两个已经按高矮排好队的队列合并成一个新队列一样。请你想象一下就会明白这个算法的思路了。2编写一程序,计算英文文章文本文件中,字母e出现了多少次。3编写一程序,统计一个文本文件f中共有多少行和多少字符。4编写程序从磁盘上读取一个由100个实数组成的实型数据文件(indata.dat),以此文件中所有大于平均值的实
17、数建立一个名为“above.dat”的文件,其余的建立一个名为“rest.dat”的文件。 第3节 利用文件测试程序【问题描述】某学习小组有10人,参加某次测验,考核6门功课, 统计每人的总分及各门的平均分,将原始数据及结果数据放入文本文件中。【问题分析】本文题的程序设计部分所涉及的知识都是前面学习过的文件知识,这里主要是讨论如何编写制作测试数据来检验程序的正确性。利用Windows的“记事本”程序建立原始数据文件textin.dat存贮在磁盘中,其内容如下:10 6 1 78 89 67 90 98 67 2 90 93 86 84 86 933 93 85 78 89 78 984 67
18、89 76 67 98 745 83 75 92 78 89 746 76 57 89 84 73 717 81 93 74 76 78 868 68 83 91 83 78 899 63 71 83 94 78 9510 78 99 90 80 86 70程序读入原始数据文件,求每人的总分及各门的平均分;同时建立结果数据文件,文件名为textout.dat。【程序实现】program p4_3(input,output); var f:text; i,j,n,m,s:integer; data:array 1.11,0.7 of integer; p:array 1.6 of integer
19、;begin assign(f,'textin.dat'); 从文本文件中读取数据 reset(f); read(f,n);readln(f,m); for i:=1 to n do for j:=0 to m do read(f,datai,j); close(f);fillchar(p,sizeof(p),0);将数组p中元素全部赋值为0 for i:=1 to n do begin s:=0; for j:=1 to m do 求每人总分,各科总分 begin s:=s+datai,j; pj:=pj+datai,j; end; datai,m+1:=s; end; fo
20、r i:=1 to n do显示输出数据 begin for j:=0 to m+1 do write(datai,j:4); writeln; end; write(' '); for j:=1 to m do 求各科平均分 begin pj:=pj div n; write(pj:4); end; writeln; assign(f,'textout.dat'); 将数据写入文件 rewrite(f); for i:=1 to n do begin for j:=0 to m+1 do write(f,datai,j:4); writeln(f); end;
21、 write(f,' '); for j:=1 to m do write(f,pj:4); writeln(f); close(f);end.【相关知识】1手工测试的问题实际上,我们在未使用文件来编写程序时,通过read语句输入数据时,可以在运行过程中换用不同的数据来测试程序,但是有些程序往往无法手工进行测试,这是由于有时数据量较大时,手工输入测试费时费力,而且容易出错,像本例中要测试一组数据要输入60个数据,非常麻烦;还有的时候,由于数据量太大,根本无法手工完成测试数据,比如,本章第1课中测试一组数据要500个数据,手工测试几乎不可能。因此,必须使用文件来测试程序2测试文件的制作程序所需测试数据文件的制作一般采用两种方法,一是利用“记事本”程序手工编写的方法,另一种是利用程序来自动生成。本章第2课问题中测试一组数据要500个随机数,这种情况往往需要另外编写一段程序来自动生成。这里我们重点讨论第1种方法。“记事本”程序是Windows自带的文本文件编辑程序,利用它可以快速的编写我们想要的数据文件。具体的操作步骤是: 按键盘上空格键两边的“Windows”键,切换回桌面。 进入需要建立测试数据的文件夹,如“2005pas”,按如错误!未找到引用源。所示操作,使Windows显示文件的扩展名。 图4.3
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 英语语音室建设方案(参考模板)
- 培训咨询成果保护合同
- 股东之间的股权转让协议
- 自营采购合同的格式要求
- 离婚协议书怎么拟写
- 广告公司购销合作协议范本
- 代理记账合同
- 招标文件方案技巧
- 小区物业服务竞标方案
- 专业解读实操经验
- 2024年01月11032成本管理期末试题答案
- 年高考新课标I卷语文试题讲评课件
- 2024年高中班主任德育工作计划(5篇)
- 浙江省嘉兴市2023-2024学年高二上学期1月期末检测数学试题
- 2024-2025学年语文二年级上册 部编版期末测试卷 (含答案)
- 废弃油管道注浆施工方案
- 2021-2022学年广东省深圳市龙岗区六年级上学期期末英语试卷
- 资金托盘业务协议
- 江苏省苏州昆山市2023-2024学年七年级上学期期末语文试题及答案
- 消防水带使用培训
- 电力设备维护保养计划手册
评论
0/150
提交评论