Пусть требуется составить программу, которая создает нетипизированный файл из 100 вещественных чисел и выводит на экран k-й элемент файла. Проиллюстрируем обработку созданного файла двумя разными способами: поиск элемента в файле данных прямого доступа по его номеру и поиск элемента в файле данных с последовательным доступом.
В разделе описания переменных опишем файловую переменную F, представляющую в программе нетипизированный файл вещественных чисел; вещественную переменную Р, которой будет присваиваться значение очередного элемента файла при заполнении файла случайными вещественными числами и искомого элемента файла; целую переменную типа byte К, значения которой будут указывать на номер элемента в файле.
Program UnTyped_File;
Uses Crt;
Var
F: File of real;
P: real;
К: byte;
procedure Mak_file; {Создание файла вещественных чисел}
begin
Assign(F,'a.dat');
Rewrite(F); {Открыть файл для записи}
Randomize;
for K:=l to 100 do
begin
P:=Random(100);
Write(F,P); {Записать в файл значение К-го элемента}
end;
Writeln('Создание файла вещественных чисел завершено');
|
|
Close(F); {закрыть файл}
end; {конец процедуры Mak_file}
procedure Find_Elem; {Поиск элемента в файле прямого доступа по его номеру}
begin
Assign(F,'a.dat');
Write('Введите номер нужного элемента ');
Readln(К);
Reset(F);
Seek(F,K-l); {Переместить указатель обработки на К-1-й элемент}
Read(F,P); {Присвоить значение элемента, на который указывает указатель обработки переменной Р}
Writeln(K,'-й элемент файла ',Р:6:2);
Close(F);
end; {процедура Find_Elem}
procedure Find_Fil_P; {Поиск элемента в файле последовательного доступа}
var N: byte;
begin
Assign(F,'a.dat');
Write('Введите номер нужного элемента ');
Readln(К);
Reset(F);
N:=0; {Поместить указатель обработки в начало файла}
While not Eof(F) do {Повторять, пока не будет просмотрен весь файл}
begin
Read(F,P); {Чтение элемента и смещение указателя обработки вправо на один элемент}
if N=K-1 then {Найден элемент с искомым номером}
begin
Writeln(K,'-й элемент файла равен ',Р:6:2);
Exit; {Прервать поиск, так как элемент найден}
end;
N:=N+1; (Увеличить числа элементов файла на 1}
end;
Close(F);
end; {конец процедуры Find_Fil_P}
Begin {Основная программа}
Mak_file; {Вызов процедуры создания файла вещественных чисел}
Find_Е1еm; {Вызов процедуры поиска элемента в файле прямого доступа}
Find_Fil_P; {Вызов процедуры поиска элемента в файле с последовательным доступом}
end.
При обработке файла a.dat как файла прямого доступа для чтения определенного элемента выполняется позиционирование указателя обработки на указанный элемент, а при обработке файла a.dat как файла последовательного доступа перемещение указателя на нужный элемент осуществляется последовательным чтением элементов, начиная с первого, до тех пор, пока указатель обработки не будет установлен на искомый элемент.