Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
учебник_Часть_2.doc
Скачиваний:
2
Добавлен:
01.04.2025
Размер:
1.12 Mб
Скачать

3.2. Структурированные типы

3.2.1. Множества

Множество - это коллекция значений перечислимого типа (не может быть больше 256):

type

TSomeInts = 1..250;

TIntSet = set of TSomeInts;

или

Var MySet: set of 'a'..'z';

...

MySet := ['a','b','c'];

Проверка вхождения некоторого значения в множество осуществляется с помощью операции in:

if 'a' in MySet then…

3.2.2. Массивы

Массивы делятся на статические и динамические.

Статические массивы:

var MyArray:array[1..100] of Char; (одномерные)

или

type TMatrix=array[1..10] of array[1..50] of Real;

(многомерные).

Динамические массивы:

Var FlexArray: array of Real;

длина устанавливается во время работы программы процедурой

SetLength(FlexArray, N); (N элементов от 0 до N - 1).

Можно применять многомерные динамические массивы:

Var Ints: array of array of Integer;

SetLength(Ints,10); (массив 10*10)

или

SetLength(Ints,10,5); (массив 10*5).

Используйте для работы с массивами функции Low и High (особенно в циклах), поскольку они делают код независимым от диапазона массива. Если позже вы измените объявленный диапазон индексов массива, то код, который использует Low и High, останется работоспособным, а код, который жестко привязан к диапазону массива, работать не будет. Функции Low и High облегчают поддержку вашего кода и делают его более надежным. Применение этих функций не приводит к лишним затратам на этапе выполнения. Во время компиляции они преобразуются в константные выражения, а не в действительные обращения к функциям.

3.2.3. Записи

type

TDateRec=record

Year:Integer;

Month:(Jan, Feb, Mar, Apr, May, Jun,

Jul, Aug, Sep, Oct, Nov, Dec);

Day: 1..31;

end;

Var Record1,Record2:tDateRec;

Доступ к полям записи осуществляется следующим образом:

Record1.Year:=1984;

Record1.Month:=Jun;

Record1.Day:=12;

или

with Record1

do begin

Year:=1984;

Month:=Jun;

Day:=12;

end;

Записи с вариантами:

Type

recordTypeName=record

fieldList1:type1;

...

fieldListn: typen;

case tag:ordinalType of

constantList1:(variant1);

...

constantListN: (variantN);

end;

3.2.4. Указатели

type

PInteger = ^Integer;

var

R: Single;

I: Integer;

P: Pointer;

PI: PInteger;

begin

...

P := @R;

PI := PInteger(P);

I := PI^;

end;

В языке Object Pascal имеются дополнительные ссылочные типы, которые представлены в табл. 3.6.

Таблица 3.6

Ссылочный тип

Тип указателя

Указывает на тип

Примечание

PAnsiString

AnsiString

Объявлен в SysUtils. Используется для динамически выделяемой памяти массивов

PByteArray

ByteArray

Стандартное объявление

Pcurrency

Сurrency

Стандартное объявление

PExtended

Extended

Стандартное объявление

PОleVariant

PоleVariant

Стандартное объявление

PShortString

ShortString

Стандартное объявление

PTextBuf

TextBuf

Стандартное объявление

PWideString

WideString

Стандартное объявление

PWordArray

WordArray

Объявлен в SysUtils. Используется для динамически выделяемой памяти для массивов двухбайтовых значений

PVarRec

ТVarRec

Объявлен в System

PVariant

Variant

Стандартное объявление

Тип Variant применяется для данных, тип которых невозможно определить на этапе компиляции. В программе следует выполнять приведение к конкретному типу. Значение типа Variant может быть приведено к любому известному в Object Pascal типу, кроме records, sets, static arrays, files, classes, class references, pointers и Int64. Строки Variant не могут быть индексированы.

var