meili 发表于 2022-10-21 20:47:17

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

<p><strong>优学合肥奥数网讯:</strong>合肥市青少年信息学竞赛Pascal语言:记录与文件类型。</p><p><strong>1.记录的定义:</strong></p><p>type 类型标识符=record</p><p>字段名1:类型1;</p><p>字段名2:类型2;</p><p>...</p><p>字段名n:类型n;</p><p>end;</p><p>如:</p><p>type</p><p>studata=record</p><p>num:string;</p><p>name:string;</p><p>sex:boolean;</p><p>s:array of real;</p><p>end;</p><p>var</p><p>student:studata;</p><p>students:array of studata;</p><p><strong>2.记录的运用:</strong></p><p>(1)对记录中和个域的引用,要写出记录名和域名,如:student.num</p><p>(2)开域语句:with。</p><p>with 记录名 do 语句;</p><p>或</p><p>with 记录名1,记录名2,... do 语句;</p><p>注意:</p><p>1. 在do后面语句中使用的记录的域时,只要简单地写出域名就可以了, 域名前的记录变量和"."均可省略。</p><p>2. 在关键字with后面,语句可以是一个简单语句,了可以是一个复合语句。</p><p>3. 虽然在with后可以有多个记录变量名,但一般在with后只使用一个记录变量名。</p><p><strong>文件</strong></p><p>文件是一种构造型的数据类型。在程序中都需要产生一些输出,也需要接受若干个输入。这些输入、输出实际上是用文件的方法来实现的,在Pascal中用标准文件“input”和“output”来实现,它们分别对应标准输入设备和标准输出设备(可省略不写)这也就是一些程序的程序书写如下的原因了:</p><p>program ex(input,output);</p><p>...</p><p>但有时大量数据的读入和输出都是来是磁盘文件,这就要求我们必须熟练掌握对磁盘文件的操作。</p><p>对于我们来说,我们只必须掌握文本文件(或称正文文件,text)的读写即可:</p><p>1.文本文件的定义:</p><p>文本文件不是简单地由某类型的元素序列所组成,它的基本元素是字符,由它们构成行,若干行组成一份原文。由于各行的长度可以不同,所以文本文件只能顺序地处理。文本文件的定义如下:</p><p>var</p><p>fp:text;</p><p>2.文本文件的读操作:</p><p>(1)调用assign过程,把磁盘文件赋予文本文件变量;</p><p>assign(fp,filename);</p><p>(2)调用reset过程,为读操作做准备;</p><p>reset(fp);</p><p>(3)在需要读数据的位置调用read过程或readln过程。</p><p>readln(fp,var1,var2,...,varn);</p><p>3.文本文件的写操作:</p><p>(1)调用assign过程,把磁盘文件赋予文本文件变量;</p><p>assign(fp,filename);</p><p>(2)调用rewrite过程,为读操作做准备;</p><p>rewrite(fp);</p><p>(3)在需要读数据的位置调用write过程或writeln过程。</p><p>writeln(fp,var1,var2,...,varn);</p><p>4.文本文件的关闭操作:</p><p>close(fp);</p><p>5.文本文件的其他操作:</p><p>(1)EOF(fp)—布尔函数,用于判断文件结束否。</p><p>(2)EOLN(fp)—布尔函数,用于判断行结束否。</p><p>例1:下面是一个建立和使用文件的程序:</p><p>program wenjian;</p><p>const n=3; m=2;</p><p>type student=record</p><p>name:string;</p><p>score:array of 0..100;</p><p>end;</p><p>varst:array of student;</p><p>stfile:file of student ;</p><p>sumst:array of integer;</p><p>sumsub:array of integer;</p><p>sum:integer;</p><p>procedure newfile;</p><p>var i,j:integer;</p><p>begin</p><p>assign(stfile,'score.fil');</p><p>rewrite(stfile);</p><p>for i:=1 to n do</p><p>begin</p><p>writeln('Input student',i,'name and ',m,' score');</p><p>readln(st.name) ;</p><p>for j:=1 to m do</p><p>read(st.score);</p><p>readln;</p><p>write(stfile,st);</p><p>end;</p><p>close(stfile);</p><p>writeln ;</p><p>writeln;</p><p>end;</p><p>procedure jisuan;</p><p>var i,j:integer;</p><p>begin</p><p>assign(stfile,'score.fil');</p><p>reset(stfile);</p><p>for i:=1 to m do sumsub:=0;</p><p>for i:=1 to n do</p><p>begin</p><p>read(stfile,st);</p><p>with st do</p><p>begin</p><p>sumst:=0;</p><p>for j:=1 to m do</p><p>begin</p><p>sumst:=sumst+score;</p><p>sumsub:=sumsub+score;</p><p>end;</p><p>end;</p><p>end;</p><p>close(stfile);</p><p>sum:=0;</p><p>for i:=1 to n do</p><p>sum:=sum+sumst;</p><p>for i:=1 to n do</p><p>begin</p><p>with st do</p><p>begin</p><p>write(name);</p><p>for j:=1 to m do write(score:6);</p><p>end;</p><p>writeln(sumst:6);</p><p>end;</p><p>write('sum=');</p><p>for i:=1 to m do</p><p>write(sumsub:6);</p><p>writeln(sum:8);</p><p>end;</p><p>begin</p><p>newfile;</p><p>jisuan;</p><p>end.</p><p><strong>练习:</strong></p><p>编写程序从磁盘上读取一个由100个实数组成的实型数据文件(indata.dat),以此文件中所有大于平均值的实数建立一个名为“above.dat”的文件,其余的建立一个名为“rest.dat”的文件。</p><p><strong>往期最新阅读</strong>:信息学竞赛Pascal语言:集合类型(八)</p><p>信息学竞赛Pascal语言:子界与枚举类型(七)</p><p>更多内容,请参加优学合肥奥数网“<strong>杯赛竞赛</strong>”频道。</p>
页: [1]
查看完整版本: 信息学竞赛Pascal语言:记录与文件类型(九) 标签:信息学