Длина любого компонента типизированного файла строго постоянна, что дает возможность организовать прямой доступ к каждому из них (т.е. доступ к компоненту по его порядковому номеру).
Перед первым обращением к процедурам ввода-вывода указатель файла стоит в его начале и указывает на первый компонент с номером 0. После каждого чтения или записи указатель сдвигается к следующему компоненту файла. Переменные в списках ввода-вывода должны иметь тот же тип, что и компоненты файла.
Чтение из типизированных файлов выполняется только процедурой Read, а запись – только процедурой Write.
Процедуры Readln и Writeln не применяются к типизированным файлам!
Seek(<файловая переменная>, <N компонента>);
Процедура Seek смещает указатель файла к требуемому компоненту. Здесь <N компонента> – выражение типа LongInt, указывающее номер компонента файла. Первый компонент файла имеет номер 0. Процедуру нельзя применять к текстовым файлам.
Filesize(<файловая переменная>);
Функция возвращает значение типа LongInt, которое содержит количество компонентов файла. Функцию нельзя использовать для текстовых файлов.
Filepos(<файловая переменная>);
Функция возвращает значение типа LongInt, содержащее порядковый номер компонента файла, который будет обрабатываться следующей операцией ввода-вывода. Функцию нельзя использовать для текстовых файлов. Первый компонент файла имеет порядковый номер 0.
Пример (типизированные файлы). Пусть имеется файл, хранящий сведения о книгах в некоторой библиотеке. Выяснить, сколько книг в библиотеке издано в 19 веке.
Type
X = Record
n: String[50];
g: Integer;
a: String[30];
End;
Var
f: File of X;
y: X;
s, i: Integer;
Begin
Assign(f, ’bibl.txt’);
Reset(f);
s := 0;
For i:= 1 to Filesize(f) do
Begin
Seek(f, I-1);
Read(f, y);
If (y.g > 1800) And (y.g < 1901) then s := s+1;
End;
Writeln(‘Количество книг 19 века = ’, s);
Close(f);
Readln;
End.
7. Процедуры и функции
Процедуры и функции представляют собой относительно самостоятельные фрагменты программы, оформленные особым образом и снабженные именем. Упоминание этого имени в тексте программы называется вызовом процедуры (функции).
Отличие процедуры от функции заключается в том, что результатом исполнения операторов, образующих тело функции, всегда является некоторое единственное значение, поэтому обращение к функции можно использовать в соответствующих выражениях наряду с переменными и константами.
Далее будем называть процедуру или функцию общим именем «подпрограмма».
Подпрограмма – это средство экономии памяти: каждая подпрограмма существует в программе в единственном экземпляре, в то время как обращаться к ней можно многократно из разных точек программы. При вызове подпрограммы активизируется последовательность образующих ее операторов, а с помощью передаваемых подпрограмме параметров нужным образом модифицируется реализуемый в ней алгоритм.
Использование подпрограмм соответствует методике нисходящего проектирования программ. Алгоритм представляется в виде последовательности относительно крупных подпрограмм, реализующих более или менее крупные самостоятельные смысловые части алгоритма. Подпрограммы в свою очередь могут разбиваться на менее крупные подпрограммы нижнего уровня и т.д. (см. рис.)