Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование лекции.doc
Скачиваний:
49
Добавлен:
12.11.2019
Размер:
5.53 Mб
Скачать

3.7. Ограниченные типы

Ограниченные типы данных являются производными. Они базируются на некотором базовом перечислимом типе. Ограниченный тип, или тип-диапазон, действительно ограничивает значения переменной. Например, если в переменной day хранится число дней в месяце, то оно явно не должно превышать 31, а также быть меньше 0. Следовательно, диапазон допустимых значений этой переменной – [1..31]. Так и напишем:

TYPE Tyear=1900..2100;

В нашем примере базовым типом для типа-диапазона является тип INTEGER.

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

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

4.Множества. Массивы

Множество – это особый тип данный, который строится на основе некоторого базового типа. Имея переменную типа "множество", можно получить ответ на вопрос: "присутствует ли во множестве искомое значение". Например, представьте себе последовательность чисел 1,12,43,55 (кстати, одинаковых элементов в множестве быть не может). Можно узнать, входит ли число 43 в множество или нет, можно добавить новое число в множество, удалить число из множества, узнать, какие числа входят в два множества сразу. Но само число 43 в множестве не содержится. Множество – это не массив! Нельзя обратиться к конкретному элементу множества, можно только узнать, присутствует ли данное значение в множестве или нет.

В Delphi множество описывается примерно так:

TYPE TS=SET OF CHAR;

Здесь CHAR – базовый тип множества. Что это значит? Дело в том, что в памяти компьютера каждый элемент множества кодируется одним битом. Если бит равен единице, то элемент, равный порядковому номеру этого бита, присутствует в множестве, если же нулю – отсутствует. Работать с длинными последовательностями нулей и единиц долго. Поэтому в Паскале введено ограничение – число элементов в множестве не должно превышать 256. Соответственно и базовым типом можно выбирать только такой, который принимает не более 256 различных значений. К ним относятся BYTE и CHAR, перечислимые типы и типы-диапазоны с числом элементов, не превышающим 256. При попытке создать множество на базе, к примеру, типа INTEGER (2 байта, 65535 различных значений) возникнет сообщение об ошибке "Set base type out of range":

TYPE TS=SET OF INTEGER;

Set base type out of range

Переменную типа "множество" нельзя непосредственно вывести на экран или ввести с клавиатуры. Как же тогда создать множество?

Рассмотрим следующий фрагмент программы:

TYPE ts=SET OF CHAR; VAR s:ts; … s:=[’A’,’B’,’C’,’D’..’H’];

Здесь создается множество с базовым типом CHAR и в него заносятся элементы 'A', 'B','C',D','E','F','G','H'. Как такое множество хранится в памяти, видно из Рис. 5 .6

Рис. 5.6. Представление множества в памяти (в нижнем ряду представлены коды символов).