Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курс лекций по дисциплине Объектно-ориентирован...doc
Скачиваний:
2
Добавлен:
01.07.2025
Размер:
14.3 Mб
Скачать

Лекция №8 Тема: Структурные типы данных

План:

  1. Указатели

  2. Файлы

  3. Массивы

  4. Записи

1. Указатели

Указатель является величиной, указывающей на некоторый адрес в памяти, где хранятся какие-то данные. Указатели бывают типизированные, указывающие на данные определенного типа, и нетипизированные (типа pointer), которые могут указывать на данные произвольного типа. Чаще всего указатели используются для работы с объектами в динамически распределяемой области памяти, особенно при работе с записями.

В Object Pascal имеется ряд предопределенных типов указателей. Это прежде всего типы указателей на строки: PAnsiChar и PWideChar, представляющие собой соответственно указатели на значения AnsiChar и WideChar. Имеется также родовой тип PChar, определяющий указатель на Char (т.е. пока указывающий на AnsiChar). Эти указатели используются при работе со строками с нулевым символом в конце.

Объявление своего типизированного указателя на любой тип имеет вид:

type <имя типа указателя> = А<тип данных>; Например, предложения:

type Pint = 'integer; var PI, P2: Pint;

2. Файлы

Различают файлы трех видов: текстовые файлы, типизированные файлы и нетипизированные файлы.

Текстовые файлы состоят из последовательностей символов, разбитых на строки. В Object Pascal предопределен тип TextFile, соответствующий текстовому файлу. Таким образом, объявление файловой переменной может иметь вид:

var <имя файловой переменной>: TextFile;

Запись данных в текстовый файл осуществляется процедурой

procedure Write(var F: TextFile; <список выражений>);

Чтение данных из текстового файла осуществляется последовательно от его начала процедурой

Аналогичная процедура Readln отличается от Read только тем, что после чтения переводит текущую позицию в файле на новую строку. Если в процедуре Readln не задан список переменных, то она просто пропускает текущую строку и переходит к следующей.

Типизированные файлы являются двоичными файлами, содержащими последовательность однотипных данных. Объявление файловых переменных таких файлов имеет вид:

var <имя файловой переменной>: file of <тип данных>;

Процедуры чтения и записи Read и Write не отличаются от рассмотренных ранее для текстовых файлов. Только типы выражений при записи и переменных при чтении должны соответствовать объявленному типу данных файла. Процедур, аналогичных Readln и Writeln для типизированных файлов нет. Зато есть процедура Seek, позволяющая перемещаться по файлу не только последовательно, как в текстовых файлах, но сразу переходить к требуемому элементу. Ее синтаксис:

procedure Seek(var F: File, N: Longint);

где N — номер элемента. Эта процедура перемещает текущую позицию в файле на нужный элемент. Имеется также функция FilePos:

function FilePos(var F): Longint; которая возвращает текущую позицию в файле.

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

Тип файловой переменной нетипизированного файла объявляется следующим образом:

var <имя файловой переменной>: file;

Открытие нетипизированных фалов осуществляется теми же процедурами Reset и Rewrite, но их синтаксис несколько отличен от аналогичных процедур для других видов файлов:

procedure Reset(var F: File; Recsize: Word);

procedure Rewrite(var F: File; Recsize: Word);

В этих процедурах Recsize — необязательный параметр, который указывает размер одной записи в файле (одного элемента файла) в байтах. Если параметр Recsize не задан, то размер одной записи предполагается равным 128 байтам.

Вместо процедур записи и чтения Read и Write в нетипизированных файлах