Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебно-методическое пособие по Паскалю.doc
Скачиваний:
7
Добавлен:
25.04.2019
Размер:
398.34 Кб
Скачать

8.5 Нетипизированные файлы

Нетипизированные файлы объявляются как файловые переменные типа FILE и отличаются тем, что для них не указан тип компонентов. Отсутствие типа делает эти файлы, с одной стороны, совместимыми с любыми другими файлами, а с другой - позволяет организовать высокоскоростной обмен данными между диском и памятью.

При инициации нетипизированного файла процедурами RESET или REWRITE можно указать длину записи нетипизированного файла в байтах. Например, так:

var

f: file;

Begin

……

assign (f, ‘myfile.dat’);

reset (f, 512);

.........

end.

Длина записи нетипизированного файла указывается вторым параметром при обращении к процедурам RESET или REWRITE, в качестве которого может использоваться выражение типа WORD. Если длина записи не указана, она принимается равной 128 байтам.

Турбо Паскаль не накладывает каких-либо ограничений на длину записи нетипизированного файла, за исключением требования положительности и ограничения максимальной длины 65535 байтами (емкость целого типа WORD).

При работе с нетипизированными файлами могут применяться все процедуры и функции, доступные типизированным файлам, за исключением READ и WRITE, которые заменяются соответственно высокоскоростными процедурами BLOCKREAD и BLOCKWRITE. Для вывоза этих процедур используются следующие предложения:

BLOCKREAD (<ф.п.>, <буф>, <[,<NN>] )

BLOCKWRITE (<ф.п.>, <буф>, <[,<NN>] )

Здесь <буф> - буфер: имя переменной, которая будет участвовать в обмене данными с дисками;

<D> - количество записей, которые должны быть прочитаны или записаны за одно обращение к диску;

<NN> - необязательный параметр, содержащий при выходе из процедуры количество фактически обработанных записей.

За одно обращение к процедурам может быть передано до N*RECS байт, где RECS - длина записи нетипизированного файла. Передача идет, начиная с первого байта переменной <буф>. Программист должен позаботится о том, чтобы длина внутреннего представления переменной <буф> была достаточной для перемещения всех N*RECS байт при чтении информации с диска. Если при чтении указана переменная <буф> недостаточной длины или если в процессе записи на диск не окажется нужного свободного пространства, возникнет ошибка ввода-вывода, которую можно заблокировать, указав необязательный параметр <NN> (переменная типа WORD).

После завершения процедуры указатель смещается на <NN> записей. Процедурами SEEK, FILEPOS и FILESIZE можно обеспечить доступ к любой записи нетипизированного файла.

9 Указатели и динамическая память

Динамическая память – это оперативная память ПК, предоставляемая программе при ее работе, за вычетом сегмента данных и тела программы.

При динамическом размещении данных заранее не известны ни тип, ни количество размещаемых данных. К ним нельзя обращаться по именам, как к статическим переменным. Для управления динамической памятью используются указатели. Указатель – это переменная, которая в качестве своего значения содержит адрес байта памяти. С помощью указателя можно размещать в динамической памяти любой тип данных. Кроме того, указатели могут ссылаться на ещё не описанный тип данных.

Существует два вида указателей: типизированные и нетипизированные.

VAR

a : ^INTEGER; - типизированный (указатель типа INTEGER)

b : ^POINTER; - нетипизированный.

Нетипизированные указатели используются для размещения данных, структура и тип которых меняются во время работы программы.

Присваивать значение одного типизированного указателя другому можно, только если они связаны с одним типом данных.

VAR a, b: ^Integer;

c: ^real; d: pointer;

____________________

a:=b; - ПРАВИЛЬНО

a:=c; - НЕ ПРАВИЛЬНО

d:=b; a:=d; - ПРАВИЛЬНО