Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Плещёв ВУМИП 2012-07-06.doc
Скачиваний:
66
Добавлен:
13.05.2015
Размер:
9.35 Mб
Скачать

1.1.4.4. Множества

Множествоэто набор однотипных, логически связанных объ­ек­тов: <имя типа> = set of <базовый тип элемента множества>

Переменную типа «множество» можно определить сразу в разделе пере­мен­­ных без предварительного описания типа в виде:

<имя переменной ‑ множества>: set of <базовый тип элемента>

Правила:

1. В качестве базового типа элемента множества может исполь­зо­вать­ся любой порядковый тип, кроме Word, Integer, LongInt. Обычно он задается диапазоном или перечислением.

2. Количество элементов множества ограничено 256. Номер значения базы от 0 до 255.

3. В выражении значение элементов задается конструктором мно­жества ([ ] ‑ пустое множество).

Пример:

type prostoi, nomer = set of 3..99;

var pr : prostoi; n : nomer ; p: set of 'a'..'z'; begin pr:=[3,5,7,11,13]; ...

Пример множества заданного перечислением:

type dni=(vosk,pon,vtor,sreda,chetv,pjtn,sub);

var dnirab,weekend: set of dni; ...

begin weekend:=[sub,vosk]; dnirab:=[pon..pjtn]

Пример объявления глобальной переменной типа множества:

Implementation //исполнимый раздел модуля

Var NumChar: set of Char=['0'..'9', '+', '‑', ’.’]; //допустимые символы числа

Константы типа «множество» задаются в виде ([...]).

Пример. TypeDays= set of 1..31; //объявление типа множества

ConstWorkdays:Days=[1..5, 8..12, 15..19, 22..26, 29, 30];

1.1.5. Типы строк

Строки представляют собой последовательность символов.

Название

Макси­мальная длина

Нулевой символ

в конце (#0)

Вид строки и директива компилятора

ShortString

255

Нет

Короткая строка со счетчиком длины

AnsiString

2 Гб

Есть

Длинная строка с символом #0 в конце

String

2 Гб

Есть

{$H+}‑ тип AnsiString

String [n]

255

Нет

{$H‑} или есть n ‑ тип ShortString

WideString

1 Гб

Есть

Строка 16‑битовых символов Unicode

Пример:

Type Fam=String; Var FamStud, FamPrep: Fam; Date: String [8]

Функция Length(s)возвращает длину текущего значения строки.

Процедура SetLength(s,n)переопределяет строку (s) с новой длиной вnсимволов; при этом сохраняются начальные символы и удаляются последние символы при уменьшении длины строки.

Строка трактуется как одномерный массив символов типов AnsiCharилиWideCharсоответственно. Доступ к отдельному символу строки можно осуществлять по его порядковому номеру (отсчет от 1 ‑ для коротких и от 0 - для длинных строк).

Пример:A:=Fam[5]; {выбирается пятый символ строки Fam}

Строку можно объявить в виде массива:

Type TS=Array [0..1000] Of Char; Var S1,S2 : TS;

К строкам можно применять операцию сцепления строк «+», стро­ко­вые процедуры и функции (п. 1.2.5).

Пример. Используя переменные fam, imj, otch,famio, присвоить переменнойfamioтекст «Иванов И.И.»

fam:='Иванов'; imj:='Иван'; otch:='Иванович';

famio:=fam+' '+copy(imj,1,1)+' . '+copy(otch,1,1)+'.'

1.1.6. Универсальные типы -Variant

В переменных типа Variantмогут храниться данные любого типа, кроме записей множеств, статических массивов, файлов, классов, ссылок на классы, указателей иInt64. Такие переменные занимают дополнительно два байта и содержат код типа и значение переменной или указатель на это значение. Работа с такими переменными требует больше машинного вре­ме­ни, и ошибки при несоответствии типов значений обнаруживаются толь­ко при выполнении, а не при компиляции программы.

При объявлении универсальным переменным присваиваются спе­циаль­ные значения константой Unassigned. Значение переменной Nullоз­на­чает ошибочное значение переменной.

Тип текущего значения можно установить функцией VarType(x), которая возвращает значения, соответственно, в виде именованных кон­стант: varEmpty (состояние Unassigned), varNull (null), varSmallInt, varInteger, varSingle, varDouble, varCurrency, Date (TdateTime), varOLEStr (ссыл­ка на динамически размещенную строку UNICODE), varDispatch, varError (код ошибки операционной системы), varBoolean(WordBool), varUnknown(неизвестный тип), varByte, VarString, varTypeMask (битовая мас­ка для извлечения кода типа), varArray (ссылка на массив Variant), varByRef (ссылка на тип Variant).