一、复习
用键盘输入一段文字,在屏幕上输出这段文字。
思路:
Program P9_01(input,output);
Var ch:char;
Begin
Read(ch);
While ch<>chr(10) do
begin
Write(ch);
Read(ch);
End;
Readln;
Readln
End.
技巧:
回车换行的表示:chr(10)或者eoln,这两者的区别是一个是字符型,一个是返回值为布尔型的函数。同样,eof是返回值为布尔类型的函数。
二、新课
1、导入,将上题改为:从磁盘文件shuru.txt中读入字符,并显示在屏幕上。
(1)文件的概念:文件被定义为同一类型元素组成的顺序集合。
(2)在PASCAL中,文件可以分为:文本文件、类型文件、无类型文件。
(3)文本文件:是以字符(ASCII码)形式存储的。类型文件是以二进制代码的形式存放的。无类型文件是一个低层的I/O通道,信息学奥赛不用这样的文件。
(4)程序代码如下:
program p9_0_2(input,output);
uses dos;
var f:text;
ch:char;
str1:string[15];
begin
writeln(‘please input file name’);
readln(str1);
assign(f,str1);
reset(f);
while not eof(f) do
begin
read(f,ch);
write(ch);
end;
close(f);
readln
end.
2、例1:从键盘输入一段正文,将它复制到指定的磁盘文件中,然后再在显示器上输出。
program p9_01(input,output);
var f:text;
ch:char;
begin
assign(f,’shuchu1.txt’);
rewrite(f);
writeln(‘Please input char’);
while not eoln do
begin
read(ch);
write(f,ch);
end;
close(f);
writeln;
reset(f);
while not eoln(f) do
begin
read(f,ch);
write(ch,’+++’);
end;
close(f);
readln;
readln
end.
3、例2:将文本文件f复制到文本文件g中。
program p9_2(input,output);
var f,g:text;
f1,g1:string;
ch:char;
begin
write(‘Please input f name:’);
readln(f1);
write(‘Please input g name:’);
readln(g1);
assign(f,f1);
assign(g,g1);
reset(f);
rewrite(g);
while not eof(f) do
begin
read(f,ch);
write(g,ch);
end;
close(f);
close(g);
writeln(‘The programm has successful!’);
readln
end.
4、例3:产生n个随机数(500以内),存放在text 类型的文件file1中,再从此文件中读取所有数据进行排序,把排序好的数存放在text类型文件file2中,最后把file2中的文件在显示器上输出。
program p9_3(input,output);
var a:array[1..500] of integer;
i,j,n,temp:integer;
file1,file2:text;
begin
assign(file1,’file1.txt’);
assign(file2,’file2.txt’);
randomize;
write(‘Please input n:’);
readln(n);
rewrite(file1);
for i:=1 to n do
write(file1,random(500):6);
close(file1);
reset(file1);
for i:=1 to n do
read(file1,a[i]);
close(file1);
for i:=1 to n-1 do
for j:=i+1 to n do
if a[i]>a[j] then
begin
temp:=a[i];
a[i]:=a[j];
a[j]:=temp
end;
rewrite(file2);
for i:=1 to n do
write(file2,a[i]:6);
close(file2);
for i:=1 to n do
write(a[i]:5);
readln
end.
5、例4:将1到20这20个整数写到file类型文件f中。
program p9_4(input,output);
var f1:file of integer;
str1:string;
i:integer;
begin
write(‘Please input f name:’);
readln(str1);
assign(f1, str1);
rewrite(f1);
for i:=1 to 20 do
write(f1,i);
close(f1);
end.
6、例5:将file类型文件f中的整数读入到数组中,并在屏幕上输出。
program p9_5(input,output);
var f1:file of integer;
str1:string;
a:array[1..500]of integer;
i:integer;
begin
write(‘Please input file name:’);
readln(str1);
assign(f1,str1);
rewrite(f1);
randomize;
for i:=1 to 500 do
begin
a[i]:=random(500);
write(f1,a[i]);
end;
close(f1);
reset(f1);
while not eof(f1) do
begin
read(f1,i);
write(i:6);
end;
close(f1);
readln
end.
7、例6:设有一个整数文件f,现要求将其中的偶数乘以2,奇数减1,形成一个偶数文件。
program p9_6(input,output);
var f1:file of integer;
i,j:integer;
str1:string;
begin
write(‘Please input file name:’);
readln(str1);
assign(f1,str1);
reset(f1);
while not eof(f1) do
begin
read(f1,i);
write(i:5);
end;
close(f1);
writeln;
writeln(‘++++++++++++’);
reset(f1);
j:=0;
while not eof(f1) do
begin
read(f1,i);
if odd(i) then i:=i-1
else i:=i*2;
writeln(‘i=’,i);
seek(f1,j);
write(f1,i);
j:=j+1;
end;
close(f1);
reset(f1);
while not eof(f1) do
begin
read(f1,i);
write(i:5);
end;
close(f1);
readln
end.
8、例7:设有两个已经排好序(从小到大)的整数文件t1和t2,请编程将t1和t2合并成一个新文件t,使得合并后的文件也是有序的。(从小到大)。
program p9_7_03(input,output);
var t1,t2,t:file of integer;
i,j,temp,n:integer;
a:array[1..500]of integer;
begin
assign(t1,’t1.txt’);
assign(t2,’t2.txt’);
assign(t,’t.txt’);
i:=1;
reset(t1);
while not eof(t1) do
begin
read(t1,a[i]);
i:=i+1;
end;
close(t1);
for temp:=1 to i-1 do
write(a[temp]:4);
writeln;
writeln(‘======================================’);
reset(t2);
j:=i;
while not eof(t2) do
begin
read(t2,a[j]);
j:=j+1;
end;
close(t2);
for temp:=i to j-1 do
write(a[temp]:4);
writeln;
writeln(‘=======================================’);
n:=j-1;
for i:=1 to n-1 do
for j:=i+1 to n do
if a[i]>a[j] then
begin
temp:=a[i];
a[i]:=a[j];
a[j]:=temp;
end;
rewrite(t);
for i:=1 to n do
begin
write(t,a[i]);
write(a[i]:4);
end;
close(t);
readln
end.