Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
22
Добавлен:
02.05.2014
Размер:
64.51 Кб
Скачать

Работа с типизированными файлами

Типизированный файл - это последовательность компонент любого заданного типа (кроме типа "файл"). Доступ к компонентам файла осуществляется по их порядковым номерам. Компоненты нумеруются, начиная с 0. После открытия файла указатель (номер текущей компоненты) стоит в его начале на нулевом компоненте. После каждого чтения или записи указатель сдвигается к следующему компоненту.

Запись в файл:

Write(f, список переменных);

Процедура записывает в файл f всю информацию из списка переменных.

Чтение из файла:

Read(f, список переменных);

Процедура читает из файла f компоненты в указанные переменные. Тип файловых компонент и переменных должны совпадать. Если будет сделана попытка чтения несуществующих компонент, то произойдет ошибочное завершение программы. Необходимо либо точно рассчитывать количество компонент, либо перед каждым чтением данных делать проверку их существования (функция eof, см. выше)

Смещение указателя файла:

Seek(f, n);

Процедура смещает указатель файла f на n-ную позицию. Нумерация в файле начинается с 0.

Определение количества компонент:

FileSize(f): longint;

Функция возвращает количество компонент в файле f.

Определение позиции указателя:

FilePos(f): longint;

Функция возвращает порядковый номер текущего компонента файла f.

Отсечение последних компонент файла:

Truncate(f);

Процедура отсекает конец файла, начиная с текущей позиции включительно.

 

 

Представление алгоритма в виде Паскаль-программы

program lab_10;

uses crt;

type

zap=record

p1,p2,p3:integer;

end;

var

buf,min,max,zapom:zap;

f,g:file of zap;

i,j,n,k,l,d,s,n1:integer;

A:array[1..20] of integer;

begin

randomize;

clrscr;

assign(f,'c:\f.txt');

assign(g,'c:\g.txt');

writeln('Заполнениет файла элементами типа record');

write('Введите количество записей- ');

readln(n);

writeln('Элементы файла f');

reset(f);

for i:=1 to n do

begin

buf.p1:=random(20);

buf.p2:=random(20);

buf.p3:=random(20);

write(f,buf);

write(buf.p1:3);

end;

writeln;

k:=1;

close(f);

min.p1:=20;

{***********Сортировка элементов файла*********}

reset(g);

for i:=1 to n do

begin

reset(f);

while not eof(f) do

begin

read(f,buf);

if buf.p1<min.p1 then

begin

k:=filepos(f);

d:=0;

for j:=1 to i do

if k=A[j] then d:=1;

if d=0 then

begin

min:=buf;

s:=k;

end;

end;

end;

close(f);

write(g,min);

A[i]:=s;

min.p1:=20;

end;

close(g);

reset(g);

writeln('Элементы файла g');

while not eof(g) do

begin

read(g,buf);

write(buf.p1:3);

end;

writeln;

write('Введите сколько элементов вы хотите добавить- ');

readln(n1);

reset(g);

seek(g,n);

for i:=1 to n1 do

begin

buf.p1:=random(20);

buf.p2:=random(20);

buf.p3:=21;

write(g,buf);

end;

close(g);

reset(g);

writeln;

writeln('Элементы файла g');

while not eof(g) do

begin

read(g,buf);

if buf.p3=21 then textcolor(3);

write(buf.p1:3);

textcolor(7);

end;

writeln;

min.p1:=20;

k:=1;

reset(f);

for i:=1 to (n+n1) do

begin

reset(g);

while not eof(g) do

begin

read(g,buf);

if buf.p1<min.p1 then

begin

k:=filepos(g);

d:=0;

for j:=1 to i-1 do

if k=A[j] then d:=1;

if d=0 then

begin

min:=buf;

s:=k;

end;

end;

end;

close(g);

write(f,min);

A[i]:=s;

min.p1:=20;

end;

close(f);

reset(f);

writeln;

writeln('Элементы файла f');

while not eof(f) do

begin

read(f,buf);

if buf.p3=21 then textcolor(3);

write(buf.p1:3);

textcolor(7);

end;

reset(f);

reset(g);

seek(g,0);

seek(f,0);

truncate(g);

truncate(f);

readkey;

end.

Тестовые примеры

Пример 1:

Входные данные:

n:=5; n1:=3;

первое поле элементов файла f: 5 19 17 11 12

Выходные дынные:

элементы файла g: 5 11 12 17 19

элементы файла g c добавлением элементов: 5 11 12 17 19 14 11 8

элементы файла f с добавлением и сортировкой: 5 8 11 11 12 14 17 19

Элементы файла g

9 9 14 15

Элементы файла g

9 9 14 15 9 6

Элементы файла f

6 9 9 9 14 15

Пример 2:

Входные данные:

n:=4; n1:=2;

элементы файла f: 9 9 15 14

Соседние файлы в папке Лабораторная работа1