FREEPASCAL入门-文件输入与输出_第1页
FREEPASCAL入门-文件输入与输出_第2页
FREEPASCAL入门-文件输入与输出_第3页
FREEPASCAL入门-文件输入与输出_第4页
FREEPASCAL入门-文件输入与输出_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、使用文件输入输出数据任何程序都需要产生一些输出,有时也需要接受若干个输入。这些输入、输出实 际上是可以用文件的方式来实现的,在PascaI中可以用标准文件“ input”和“ output ”来实现,它们分别对应标准的输入设备和标准输出设备(可省略不写), 这也就是一些程序的首部如下书写的原因:program ex(i nput,output);对于大量数据的输入和输出都是用文件来实现的,因此,这就要求我们必须熟练掌握在程序中实现对文件的操作。第1节 产生随机数文件【问题描述】编写一个程序,产生500个1000以内的随机正整数,存放在 data.out文件中,并同时统计从其中大于等于500的数

2、据个数。【问题分析】本题有两个问题需要解决,一要掌握随机数的生成原理,让计算机自动生成随机 数;二是将计算机产生的随机数据存入文件中。【程序实现】Program p4_1(i nput,output);const n=500;n为控制随机数个数的变量vari,a,s:i nteger;i为循环变量、a为暂时存放随机数的变量、s为=500的数的个数f:text;定义f为文本文件变量begi nassig n( f,data.out);关联文件变量f到一个外部文件data.outrewrite (f);以新建写文件的方式打开文件 ran domize;设置随机种子s:=0;统计变量清零for i:

3、=1 to n dobegi na:=random(1001);产生随机数write(f,a:5);将随机数写到文件里if i mod 10 =0 then writel n(f);每写10个数换一行if a=500 the n s:=s+1;统计=500的数的个数end;close(f);关闭文件write(=500 :, s);在屏幕上打印=500的数的个数s end.【相关知识】1. pascal程序中写文件的5个步骤在Pascal程序重创建文件并写入数据要经历 5个步骤,即:定义文件变量、关联、写准备、写数据、关闭文件变量。 定义:在变量说明部分定义文件变量,变量名自己取,类型定义为t

4、ext型 关联:将一外部磁盘文件名赋于文本文件变量,使该文本文件与一相应外部 磁盘文件相关联。命令格式为:assig n(f,n ame)其中f为定义的文本文件变量,name为实际磁盘上文件的文件名如:assign(file1, fileout.dat )或:assign(f1,e:aq2006a1.out )磁盘文件如包含路径,如e:aq2006a1.out ,则表示将文件存放到 e:aq2006文件夹中,文件名为al.out,如果不加路径,则存放在pascal工作目录中, 如果工作目录没有更改,Free PascaI默认的工作目录一般为“ ”。经过关联后,在程序中,如果对文本文件变量fil

5、e1或f1的操作,也就是对外部实际磁盘文件fileout.dat 或e:aq2006a1.out 的操作。 写准备:如果要向文件中写入数据,则在写入数据之前应先以写入方式打开。 具体的写打开方式有两种:命令格式1: rewrite(f)功能:创建并打开新文件准备写,若已有同名文件则删除再创建命令格式2: 即pe nd(f)功能:打开已存在的文件并追加 写数据:写入数据时,就使用输出语句 write和writeln 语句,写入的效果 就如同将屏幕上的数据原样写入文件中。只是在使用这两条语句时,必须先使用 文件变量指明写入对象。如:Write(f,s)或 writel n(file1,a (5),

6、a(6)前者含义为向文件f中写入变量s的值,后者的含义为向文件file1写入数组变 量a(5)、a(6)的值。注意,这些数据实际上是写入这些文件变量所关联的磁盘 文件中。 关闭:文件写完后,必须关闭,关闭的格式为:Close(f),即关闭文件变量f。2 查看文本文件由于文本文件是以ASCII码的方式存储,故查看文本文件的内容是极为方便,在DOS犬态可使用DOS中TYPE等命令进行查看,在Pascal中可以象取程 序一样取出文件进行查看。而在windows操作系统中,最方便的方法是按下键盘 上空格键两边的windows键,切换到桌面,再找到刚才程序生成的数据文件, 用 记事本查看该数据文件的内容

7、,如图1.1图4.1所示的就是用记事本打开示例数 据文件的效果。dal a. out 一记麥亦BMW-1QJ 2d文件婕)立件虫)格式迎)査看雀)随机数i1泗円干巳1 V V10忖496972438561臥占323621S685309705859301745427询13312624997691036921534768bwtwtJ1739U914331U18Q9570038996590962787SS378985678671MH7095015 3717100636时675308159176U726699BB&7U968119B67116873989U92618744369813266131610

8、99715528889513253278USB98652K w rir* - ria126wrrwwK r r ri193 !砂2003 02riTHHB38B r r r78rLTHHKrriB 832r r w k r r r : w559 rraiHHHB zjj图4.1 用记事本打开数据3 文本文件的特点 行结构文本文件由若干行组成,行与行之间用行结束标记隔开,文件末尾有一个文件结 束标记。由于各行长度可能不同,所以无法计算出给定行在文本文件中的确定位 置,从而只能顺序地处理文本文件,而且不能对一文本文件同时进行输入和输出。 自动转换功能文本文件的每一个元素均为字符型, 在将一个变量写

9、入文本文件时,也会自动转 移为字符型。与此相反,在将文件元素读入到一个变量(整型,实型或字符串型) 中时,Free Pascal会自动将其转换为与变量相同的数据类型。4 计算机自动生成随机数随机数是计算机程序中方便获得大量模拟数据的一个重要手段。在pascal中,可以利用random函数自动生成随机数,其格式为:ran dom(ra nge)不指定range时,结果是0,1之间的随机实数(0,1表示0并且w 1)。如 果指定了 range , range必须是整型表达式,结果为0 , range之间的随机正整 数,如果range为0则,返回0。随机数产生程序由randomize命令初始化,因此

10、在使用random函数之前,应先 使用randomize命令进行随机种子的初始化。【同步练习】1. 已知斐波那契(faibonacci )数列的前几个数分别是0、1、1、2、3、5、8, 编写程序求此数列的前100项,并将前100项输出到一个文件中。问题分析:此问题的解决利用以前章节所学的知识完全可以解决,只要掌握斐波那契数列从 第3项开始,任意一项的值等于前两项值的和,即:F(n)= F(n-1)+ F( n-2)需要注意的是循环的次数要控制准确, 因为第1项是从0开始的,而不想通常的 题目是从1开始的。本题中练习的重点是如何将这些数输入到文件中, 只要掌握 的血文件的基本要领,本题是不难完

11、成的。程序设计:略2. 照使用pascaI语言程序写文件的步骤有如下 5步,请将它们正确排序: 用write或writeln向文件中写入数据。 用close命令关闭文件。 在程序说明的var区用text类型标志定义一个文件变量。 用rewrite或者用append命令以新建或追加方式打开文件,准备存放数据。 用assigh命令设定要操作的磁盘文件。正确的步骤是:第2节 对文件中的数据进行排序【问题描述】在上一课由程序生成的文件data.out中,读入500个随机数,将它们排序后存放至U datasort.out中。【问题分析】本例中先要打开data.out文件,将其中的数据读入到一个数组中,然

12、后进行排序, 最后将排序的结果输出到文件datasort.out中。只要认真仔细的按照文件数据的 读取和写入的步骤来编程,程序的实现应该是不成问题的。【程序实现】Program p4_2(i nput,output);const n=500;vari,j,p,t:i nteger;f1,f2:text;a:array1.n of integer;begi nassig n( f1,data.out);reset(f1);for i:=1 to n do read(f1,ai);close(f1);for i:=1 to n-1 don为控制随机数个数的变量定义f1、f2为文本文件变量定义数组a

13、关联文件变量f1到外部文件data.out复位文件指针,以读方式打开文件读入数据存放到数组a中选择法排序beg inP:=i;for j:=i+1 to n doif ajap the n p:=j;t:=ai;ai:=ap;ap:=t;end;assign(f2,datasort.out);关联文件变量 f2 到输出文件 datasort.outrewrite(f2);以新建写文件的方式打开文件f2for i:=1 to n dobegi nwrite(f2,ai:5);将数组中的数依次写到文件里if i mod 10 =0 then writeln(f2);每写 10 个数换一行end;c

14、lose(f2);关闭文件end.程序运行后,用记事本程序打开datasort.out文件,可以看到排列好的数据如图4. 2所示。图4.2 排序后的数据文件内容【相关知识】在Pascal程序中读入也要经历5个步骤,即:定义文件变量、关联磁盘文件、 读准备、读数据、关闭文件变量。定义文件变量、关联磁盘文件、关闭文件变量等几步和写文件操作类似,这里就 不再赘述了。读准备是在读数据之前,先以读方式,复位文件指针,命令格式是reset(文件变量)。读数据时,就使用读语句read和readln语句。和写文件数据一样,读数据时也 要指定从那个文件变量中读入数据。如:read(f,s)或 readl n(f

15、ile1,a (5) ,a(6)即从文件f中读入数据,赋值给变量s;从文件filel中读入两个数据,赋值给 数组变量a(5)、a(6)。以读文件方式时打开文件时,实际上有一个文件指针指向第1个数据,读完一个 数据后,指针自动指向下一个数据,当程序中再有读数据操作时,将读入指针所 指的数据。碰到readln语句时,读完readln语句所需数据后,文件指针自动换 行,指向下一行的第1个数据。2. 与文本文件相关的函数:与文本文件相关的函数有两个,即 eof(f)和eoln(f),它们的含义是:eof(f) 布尔函数,用于判断文件结束否。其中f是文件变量,函数的返回结果为true时,表示到达文件尾,

16、反之则未到文件尾。 eof是end of file的缩写。eoln(f)布尔函数,用于判断行结束否。其中f是文件变量,函数的返回 结果为true时,表示到达本行结尾,反之则未到行尾。eoln是end of line 的 缩写。【同步练习】1 现有两个已经按从小到大排好序的整数文件fl和f2,请编写程序将fl和f2合并成一个文件f12,使得合并后的文件也是按从小到大排好序的。问题分析:解决本题需要处理好以下几个方面的问题。 本文题涉及到同时对三个文件的操作,同时从 fl和f2中读取数据,再向f3 中写数据。只要思路清晰,文件的读写部分难度不大。 由于数据量不定,读取数据用while循环,循环的条

17、件由eof(f)函数来控制。 合并的算法可以采用如下思路:先从fl和f2各读一个数al、a2,比较大小,将小的(假如 a2小)写入f3;接 着再在f2中读一个数,跟al比,小的写入f3,依此类推,直到某个文件中的数 读完,再将另外一个文件中剩下的数依次写入f3。这个算法就好像两个已经按高矮排好队的队列合并成一个新队列一样。请你想象一下就会明白这个算法的思路了。2 编写一程序,计算英文文章文本文件中,字母e出现了多少次。3 编写一程序,统计一个文本文件f中共有多少行和多少字符。4编写程序从磁盘上读取一个由100个实数组成的实型数据文件(indata.dat),以 此文件中所有大于平均值的实数建立

18、一个名为 “above.da的文件,其余的建立一 个名为“rest.da的文件。第3节利用文件测试程序【问题描述】某学习小组有10人,参加某次测验,考核6门功课,统计每人的总分及各门的 平均分,将原始数据及结果数据放入文本文件中。【问题分析】本文题的程序设计部分所涉及的知识都是前面学习过的文件知识,这里主要是讨论如何编写制作测试数据来检验程序的正确性。利用Windows的“记事本”程序建立原始数据文件 textin.dat存贮在磁盘中,其内容如下:10 61 78 89 67 90 98 672 90 93 86 84 86 933 93 85 78 89 78 984 67 89 76 67

19、 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(i nput,output);varf:text;i,j, n, m,s:i nteger;data:array 1.11,0.7 of in teger;p:array 1.6 of in teger;beg in

20、assig n( f,text in. dat);从文本文件中读取数据reset (f);read(f, n);read ln( f,m);for i:=1 to n dofor j:=0 to m doread(f,datai,j); close(f);fillchar(p,sizeof(p),0);for i:=1 to n do将数组p中元素全部赋值为0beg ins:=0;for j:=1 to m dobeg in s:=s+datai,j; pj:=pj+datai,j;end;datai,m+1:=s; end;for i:=1 to n dobeg infor j:=0 to

21、m+1 dowrite(datai,j:4);求每人总分,各科总分显示输出数据write In;end;write();for j:=1 to m do 求各科平均分beg inPj:=Pj div n; write(pj:4);end;write In;assign(f,textout.dat); 将数据写入文件rewrite (f);for i:=1 to n dobegi nfor j:=0 to m+1 dowrite(f,datai,j:4);writel n(f);end;write(f,);for j:=1 to m dowrite(f,pj:4);writel n(f);clo

22、se(f);end.【相关知识】1.手工测试的问题实际上,我们在未使用文件来编写程序时,通过read语句输入数据时,可以在运行过程中换用不同的数据来测试程序,但是有些程序往往无法手工进行测试,这是由于有时数据量较大时,手工输入测试费时费力,而且容易出错,像本例中 要测试一组数据要输入60个数据,非常麻烦;还有的时候,由于数据量太大, 根本无法手工完成测试数据,比如,本章第 1课中测试一组数据要500个数据, 手工测试几乎不可能。因此,必须使用文件来测试程序2 测试文件的制作程序所需测试数据文件的制作一般采用两种方法,一是利用“记事本”程序手工编写的方法,另一种是利用程序来自动生成。本章第2课问

23、题中测试一组数据要500个随机数,这种情况往往需要另外编写一段程序来自动生成。这里我们重点 讨论第1种方法。“记事本”程序是 Windows自带的文本文件编辑程序,利用它可以快速的编写 我们想要的数据文件。具体的操作步骤是: 按键盘上空格键两边的 Windows键,切换回桌面。 进入需要建立测试数据的文件夹,如2005pas”,按如错误!未找到引用源所示操作,使Windows显示文件的扩展名單和耳云葩Qi畫环盲文棹霰a? t0环护忙肝审伐玄枠JIW | 的a工跖站聲伽消扇IQ曲誉毎虞国* ms交轉 疋匚丄片毛燧住圖匸如苗刃丄梗. m古g二到图4.3显示文件的扩展名 在2005pas”文件夹中,

24、按如图4.4所示操作,建立文本文件,并改名为textin .dat ”。!_! .?* 410諏.口 m W TF :,*: (ETk* J?J*i*l ihrrMf l 何辭啊 Jkctt iSB即耳yflirinwA hwvlMft !#!豪叫盘妙曲仮樺呼早击j i !:*(电$ )申tt !jA fi hfef lit fit*P-* *4 工*IN熙tO|图4.4 建立文本文件 新建的文件默认文件名为 新建文本文档.txt ”,右击该文件,选择重命名 菜单,按如所示操作,将文件改名为程序所需的测试文件名,如texti n. dat ”在出现可能会导致文件不可用”提示时,确认更改。图4.

25、5修改文件扩展名 按住键盘上的Shift (上档)键不放,右击该文件,选择 打开方式”菜单命 令,在弹出的 打开方式”对话框中按如图4.6A所示操作,将该文件关联到 记事 本”程序。d谄冉當扌测出丼收祕卫护mm打4切Iw Viibdwn*2 liiitfT-lbAmi Rii fl 睿*i 阳担片粗诵;tut. 和Ed时EIL. E Ai Lex 生“ 1*4/* E7IPJ5S5|t问哎柯卉軒(n:u*柯f肌A调整打开方式B输入数据图4.6制作测试文本文件 双击该文件,在打开的记事本界面中输入测试数据,最后选择 文件” 一保存” 菜单命令保存。 单击桌面底端任务栏上的freepascal程序

26、,修改好程序中调用测试文件的路 径和文件名,运行程序,测试程序的正确性。【同步练习】1 有两个文本文件name.in和age.in,两个文件的行数相同,其中第1个 文件中每行是人名,第2个文件中每行是年龄。编写一程序生成一个新的文件 i nfo.out,它的每一行由name.in人名和age.in年龄的对应行数据组成。利用记事本事先制作好name.in和age.in这两个测试文件When you are old and grey and full of sleep,And no ddi ng by the fire, take dow n this book,And slowly read,

27、and dream of the soft lookYour eyes had once, and of their shadows deep;How many loved your mome nts of glad grace,And loved your beauty with love false or true,But one man loved the pilgrim soul in you,And loved the sorrows of your cha nging face;And bending dow n beside the glow ing bars,Murmur, a

28、 little sadly, how love fledAnd paced upon the mountains overheadAnd hid his face amid a crowd of stars.The furthest dista nee in the worldIs not betwee n life and deathBut whe n I sta nd in front of youYet you dont know thatI love you.The furthest dista nee in the worldIs not whe n I sta nd in front of youYet you cant see my loveBut whe n un doubtedly knowing the love from bothYet cannot be together.The furthest dista nee in the worldIs not being a

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论