1. Используют все процедуры и функции, рассмотренные ранее, кроме read, write, которые заменяются высокоскоростными.
2. Blockread(f,buf,c);- где buf – имя переменной, которая участвует в обмене данными с дисками, задает число, считываемых блоков;
3. Blockwrite(f,buf,c);- процедура предназначена для быстрой передачи в файл определенного числа записей из переменной buf.
Эти процедуры выполняют операции ввода – вывода блоками. Объем блока в байтах определяется по формуле: объем=c*recsize(f);,где recsize – размер записи файла, заданный при его открытии.
Задачи
1.Составить программу, которая создает типизированный файл, состоящий из 50 случайных чисел целого типа в диапазоне от –100 до 100. Найти максимальное среди этих чисел.
program zadacha_1;
uses crt;
var
f: file of integer; {файловая переменная}
a: array [1..50] of integer;
i,n, max: integer;
st: string;
begin
clrscr;
writeln('введите имя файла');
readln(st);
assign(f,st);
rewrite(f);
for i:=1 to 20 do
begin
a[i]:=-random(110)+67;
writeln('a[',i,']=',a[i]);
write(f,a[i]);
end;
readln;
close(f);
{$i-}
reset(f);
{$i+}
max:=a[1];
for i:=1 to 20 do
begin
read(f,a[i]);
if a[i]> max then max:=a[i];
end;
writeln('max=',max);
readln;
close(f);
end.
2.Создать текстовый файл и записать в него пять одинаковых фраз.
program zadacha_2;
uses crt;
var
f: text;{файловая переменная}
i: integer; {переменная счетчик}
s: string; {имя файла}
fr: string; {фраза}
begin
clrscr;
writeln('Введите имя файла');
readln(s);
assign(f,s);
rewrite(f);
fr:='Hellow! Goodbye!'
for i:=1 to 5 do
begin
writeln(f,fr);
end;
readln;
close(f);
end.
3.Составить программу, которая проверяет есть ли файл с заданным именем на диске.
program zadacha_3;
uses crt;
var
f: file;
st: string;
begin
clrscr;
writeln('введите имя файла: ');
readln(st);
assign(f,st);
{$I-}
reset(f);
{$I+}
if IOresult=0 then
begin
write('файл существует и нормально открыт');
close(f);
end
else
write('файл с именем ','"', st,'"', ' несуществует');
readln;
end.
4.Создайте текстовый файл. Запишите в него фразу "Здравствуй мир!"
program zadacha_4;
uses crt;
var
f: text;
st: string;
begin
clrscr;
writeln('Введите имя файла: ');
readln(st);
assign(f,st);
rewrite(f);
write(f,'Здравствуй, мир!');
close(f);
end.
5.Посчитать количество строк в текстовом файле.
program zadacha_5;
uses crt;
var
f: text;
st,st1: string;
k: integer;
begin
clrscr;
writeln('Введите имя файла: ');
readln(st);
assign(f,st);
{$i-}
reset(f);
{$i+}
while not eof(f) do
begin
readln (f,st1);
k:=k+1;
end;
close(f);
write ('k=',k);
readln;
end.
6.Найти длину строк текстового файла.
program zadacha_6;
uses crt;
var
f: text;
st,st1: string;
s: char;
k,m,i: integer;
begin
clrscr;
writeln('Введите имя файла: ');
readln(st);
assign(f,st);
{$i-}
reset(f);
{$i+}
while not eof(f) do
begin
readln (f,st1);
m:=length(st1);
write ('m=',m);
readln;
end;
close(f);
end.
7.Найти среднее арифметическое всех чисел текстового файла, расположенных на четных строках.
program zadacha_7;
uses crt;
var
f: text;
st,st1: string;
sr: real;
s: integer;
k,i,t,m: integer;
begin
clrscr;
writeln('Введите имя файла: ');
readln(st);
t:=1;
assign(f,st);
{$i-}
reset(f);
{$i+}
while not eof(f) do
begin
readln (f,st1);
k:=k+1;
if (k mod 2)=0 then
begin
val(st1,i,t);
s:=s+i;
m:=m+1;
end;
end;
close(f);
sr:=s/m;
write ('sr=',sr:15:2);
readln;
end.
8.Имеется текстовый файл. Переместить его строки в другой файл. Порядок строк в этом файле должен совпадать с порядком строк в заданном файле.
program zadacha_8;
uses crt;
label l;
var
f,f2: text;
st,st1,s: string;
procedure perepic (st1,s:string);
var
f1: text;
begin
assign (f1,s);
rewrite (f1);
writeln (f1,st1);
close (f1);
end;
procedure perepic1 (st1,s:string);
var
f2: text;
begin
assign (f2,s);
append (f2);
writeln (f2,st1);
close (f2);
end;
begin
clrscr;
write('Введите имя заданного файла: ');
readln(st);
write ('Введите имя нового файла');
readln (s);
assign(f,st);
{$i-}
reset(f);
{$i+}
while not eof(f) do
begin
readln (f,st1);
k:=k+1;
end;
close(f);
m:=k;
k:=0;
assign(f,st);
{$i-}
reset(f);
{$i+}
while not eof(f) do
begin
readln (f,st1);
k:=k+1;
if k<=m then
begin
if k=1 then
begin
perepic (st1,s);
end
else
begin
perepic1 (st1,s);
end;
end;
end;
close(f);
end.
9.Создать файл и записать в него десять случайных чисел от –100 до 100.
program zadacha_9;
uses crt;
var
f: file of integer;
a: array [1..10] of integer;
i,n: integer;
begin
clrscr;
assign(f,'row');
rewrite(f);
for i:=1 to 10 do
begin
a[i]:=-random(100)+65;
write('a[',i,']=',a[i]);
readln;
write(f,a[i]);
end;
close(f);
end.
10.Имеется текстовый файл. Напечатать все его строки, имеющие в качестве фрагмента заданный текст.
program zadacha_10;
uses crt;
var
f: text;
s,s1,s2: string;
i,l,l1: integer;
begin
clrscr;
writeln('Введите имя файла');
readln(s);
assign(f,s);
writeln('введите фразу для поиска');
readln(s1);
l1:=length(s1);
writeln;
writeln(' Строки с заданной фразой ');
writeln;
{$I-}
reset(f);
{$I+}
while not eof(f) do
begin
readln(f,s2);
l:= length(s2);
for i:=1 to l do
begin
if copy(s2,i,l1)=s1 then
begin
writeln (s2);
end;
end;
end;
readln;
close(f);
end.
11.Составить программу, которая проверяет правильность расстановки скобок в арифметическом выражении. Данные для проверки считывать из файла.
program zadacha_11;
uses crt;
var
f: text;
i,l,k,k1: integer;
s,st: string;
begin
clrscr;
assign(f,'input.txt');
{$I-}
reset(f);
{$I+}
while not eof(f) do
begin
read(f,s);
l:=length(s);
for i:=1 to l do
begin
if s[i]='(' then k:=k+1;
if s[i]=')' then k1:=k1+1;
end;
if k=k1
then
writeln('Правильно')
else
writeln('Не правильно');
end;
readln;
close(f);
end.
12.Составить программу, которая создает файл, состоящий из случайных чисел целого типа в диапазоне от –100 до 100. Найти максимальное среди чисел.
program zadacha_12;
uses crt;
var
a:array[1..50] of integer; {a-массив чисел в файле}
i:integer; {i-порядковый номер}
n:integer;
max:integer; {n-количество элементов в массиве}
f:file of integer; {файл}
begin
clrscr; {ввод случайных чисел}
randomize;
writeln('кол. элементов');
readln(n);
assign(f,'a'); {связь}
rewrite(f); {открытие файла для записи}
for i:=1 to n do begin
a[i]:=-random(200)+100;
writeln('a(',i,')=',a[i]); {выводим все элементы}
end;
max:=a[1];
for i:=1 to n do begin
if a[i]>max then begin
max:=a[i];
end;end;
writeln('Максимальное: ', max);
readln;
close(f);
end.
13.Имеется текстовый файл. Напечатать первые 10 символов первой строки.
program zadacha_13;
uses crt;
var
f:text; {текстовый файл}
st:string; {имя файла}
st1:string[10]; {первые 10 символов}
begin
clrscr;
writeln('Введите имя файла');
readln(st);
assign(f,st); {связь}
reset(f); {открытие файла для чтения}
begin
readln(f,st1);
writeln('Первые 10 символов: ',st1);
end;
readln;
close(f);
end.
14.В существующем файле, элементами которого являются числа, изменить на заданное число первый элемент
program zadacha_14;
uses crt;
var
f: text;
a: array [1..100] of integer;
st: string;
s: integer;
k: integer;
n: integer;
i: integer;
begin
clrscr;
writeln ('введите имя фала');
readln (st);
writeln ('введите число');
readln (k);
assign (f,st);
{$i-}
reset (f);
{$i+}
i:=1;
while not eof(f) do
begin
readln (f,s);
n:=n+1;
a[i]:=s;
i:=i+1;
end;
close (f);
a[1]:=k;
assign (f,st);
{$i-}
rewrite (f);
{$i+}
for i:=1 to n do
begin
writeln (f,a[i]);
end;
close (f);
end.
15.Имеется текстовый файл напечатать его пятую строку
program zadacha_15;
uses crt;
var
f:file of string;
n,i,k:integer;
sl,st:string;
begin
clrscr;
writeln('введите имя ');
readln(st);
assign(f,st);
{$I-}
reset(f);
{$I+}
while not eof(f) do
begin
read(f,sl);
k:=k+1;
end;
for i:=1 to k do
writeln(sl[5]);
readln;
close(f);
end.
16.Имеется текстовый файл. Получить слово, образованное вторыми буквами каждой строки.
program zadacha_16;
uses crt;
var
f: text;
st, st1: string;
s: string;
l: integer;
i: integer;
begin
clrscr;
writeln ('Введите имя файла');
readln (st);
assign (f,st);
{$i-}
reset (f);
{$i+}
s:='';
while not eof(f) do
begin
readln (f,st1);
l:= length (st1);
if l>=2 then
begin
s:=s+st1[2];
end;
end;
close (f);
writeln ('Слово получившееся из вторых букв каждой строки файла: ',s);
readln;
end.
17.Имеется типизированный файл, состоящий из 12 вещественных чисел. Найти их среднее арифметическое.
program zadacha_17;
uses crt;
var
f:file of integer; {описываю переменные}
n:integer;
k:integer;
sum:integer;
sa:real;
st:string;
begin
clrscr;
writeln('введите имя файла');
readln(st);
sum:=0;
k:=0;
assign(f,st); {устанавливаю связь с файлом}
{$I-}
reset(f);
{$I+}
while not eof(f) do {пока не конец файла}
begin
readln(n); {считываю файл}
sum:=sum+n;
k:=k+1;
end;
close(f);
sa:=sum/k;
writeln('среднее арифметическое равно',sa:5:2);
readln;
end.
18.Имеется текстовый файл. Напечатать все его строки, начинающиеся с буквы «r». Посчитать их количество.
program zadacha_18;
{Имеется текстовый файл. Напечатать все его строки, начинающиеся
while not eof (f) do begin {цикл: пока не кончится файл}
readln(f,st1);
k:=k+1;
if (k=1) and (st1[1]='r') then
{если номер строки равен 1,2,3, и первая буква="к", то}
begin
writeln('st1=',st1); {выводим строку}
readln;
s:=s+1; {считаем кол-во таких строк}
writeln('кол-во строк, начинающихся с "r" = ',s);
readln;
end;
if (k=2) and (st1[1]='r') then
begin
writeln('st2=',st1);
readln;
s:=s+1;
writeln('кол-во строк, начинающихся с "r" = ',s);
readln;
end;
if (k=3) and (st1[1]='r') then
begin
writeln('st3=',st1);
readln;
s:=s+1;
writeln('кол-во строк, начинающихся с "r" = ',s);
readln;
end;
end;
close(f);
end.
19.Имеется файл с числами. Поменять местами второе и последнее числа.
program zadacha_19;
uses crt;
var
a:array[1..50] of integer; {a-массив чисел}
i:integer; {i-порядковый номер}
n:integer; {n-количество элементов в массиве}
d:integer; {второе число}
f:file; {файл}
begin
clrscr;
randomize; {ввод случайных чисел}
writeln('Количество чисел');
readln(n);
assign(f,'fd'); {связь}
rewrite(f); {открытие файла для записи}
writeln('Исходный:');
for i:=1 to n do
begin
a[i]:=-random(200)+100;
writeln('a(',i,')=',a[i]); {выводим все элементы}
blockwrite(f,a[i],n); {запись в файл}
end;
d:=a[2]; {обмен}
a[2]:=a[n];
a[n]:=d;
writeln('Конечный:');
for i:=1 to n do
begin
writeln('a(',i,')=',a[i]); {выводим все элементы}
blockwrite(f,a[i],n); {запись в файл}
end;
readln;
close(f);
end.
20.Имеется текстовый файл. Найти длину самой длинной строки.
program zadacha_20;
uses crt;
var
f: text;
st,st1: string;
k,m,max: integer;
begin
clrscr;
writeln('Введите имя файла : ');
readln(st);
assign(f,st);
{$i-}
reset(f);
{$i+}
while not eof(f) do
begin
readln (f,st1);
m:=length(st1);
max:=m;
end;
close (f);
assign(f,st);
{$i-}
reset(f);
{$i+}
while not eof(f) do
begin
readln (f,st1);
m:=length(st1);
if m > max then
begin
max:=m;
end;
end;
close(f);
writeln ('Длина самой длинной строки ',max);
readln;
end.
Контрольные вопросы.
1. Верно ли, что элементы файла могут быть только одного типа?
2. Можно ли сравнивать файлы или присваивать один другому?
3. Установите, возможны ли приведенные ниже объявления файлов:
1) type WordFile=file of word;
var MyFile : WordFile;
2) var MyFile : file of Word.
12.10. Установите, какая задача решается программой
var FileName : string; {имя файла}
Fvar : file of char; {переменная файлового типа}
Letter : char; {читаемый из файла символ}
begin write('Введите имя файла ');
readln(FileName);
assign(Fvar,FileName);
{$I-} {отключен автоматический контроль ввода/вывода}
reset(FVar);
{$I+} {включен автоматический контроль ввода/вывода}
if ioresult<>0
then begin writeln('Не открыт файл ',FileName); Halt end;
while not eof(Fvar) do
begin read(Fvar,Letter);
Letter:=upcase(Letter);
seek(Fvar,filepos(Fvar)-1);
write(Fvar,Letter)
end;
close(Fvar)
end.
4. Какую работу выполняет функция? Напишите программу для создания файла, который может быть обработан представленной функцией, заполнив его подходящими случайными числами.
function max(var t:text):real;
var m,x:real;
begin reset(t);
read(t,m);
while not eof(t) do
begin read(t,x);
if x>m then m:=x
end;
max:=m
end.
5. Установите, есть ли ошибки в программе
var f:file of integer;
i:integer;
procedure pp(var fail:file of integer; var f:boolean);