Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Чернов Шафеева.doc
Скачиваний:
47
Добавлен:
21.05.2015
Размер:
1.39 Mб
Скачать

2.8.9. Множества

Множества  наборы однотипных, логически связанных друг с другом обьектов. Характер связи обьектов определяется программистом и не контролируется Турбо Паскалем. Количество элементов в множестве может меняться от 0 до 256. Множество, которое не содержит элементов, назы­вается пустым. От массивов множества отличаются тем, что количество элементов не постоянно. Его можно расширять и сокращать по ходу выпол­нения программы.

Описание типа производится в разделе TYPE в следующем виде:

<ИмяТипа> = SET of <базовый_тип>,

где <ИмяТипа> - правильный идентификатор ТП; <базовый_тип>  тип эле­ментов множества, в качестве которого может применяться любой порядко­вый тип кроме WORD, Integer, LogInt, ShortInt.

Пример:TYPE

dchar=SET of '1'..'9';

digit=SET of 1..9;

Переменные введенных типов-множеств описываются в разделе VAR. Пример:

VAR

S1, S2, S3: dchar;

S4, S5, S6, S7: digit;

Можно тип объявлять сразу при описании переменных, например:

VAR S1: set of '1'..'9';

Для задания множества может использоваться конструктор множества  список элементов множества, отделенных друг от друга запятыми. Список заключается в квадратные скобки. Спецификациями эле­ментов могут быть константы или выражения базового типа, а также тип-диапазон того же базового типа, например:

S1:=['1','2','3']; S4:=[0..3,7];

S2:=['2','1','3']; S5:=[4,6];

S3:=['1','2']; S6:=[3..8];

S7:=[]; (пустое).

Два множества считаются эквивалентными тогда и только тогда, когда все их элементы одинаковы причем порядок следования в множестве безразличен (S1 и S2 эквивалентны).

Если все элементы одного множества входят в другое множество то говорят, что первое включено во второе (S3 включено в S1).

Пустое множество считается включенным в любое другое.

Над множествами определены следующие операции:

1. Пересечение множеств (*) содержит элементы, общие для обоих множеств. Например, S4*S6 содержит [3,7]; S4*S5 образует пустое мно­жество.

2. Объединение множеств (+) содержит элементы первого множест­ва, дополненные недостающими элементами второго. Например,

S4+S5 содержит [0,1,2,3,4,6,7], S5+S6 содержит [3,4,5,6,7,8].

3. Разность множеств (-) содержит элементы из первого множества, которые не принадлежат второму. Например, S6-S5 содержит [3,5,7,8]);

S4-S5 содержит [0,1,2,3,7]), [ ]-S4 даст [ ].

4. Операции отношений:

операция эквивалентности (=) возвращает значение TRUE, если оба множества эквивалентны, например, S1=S2;

проверки неэквивалентности (<>) дает TRUE, если множества неэкви­валентны, например, [1,2] <> [1] и S3<>S2;

проверки вхождения (<=) принимает значение TRUE, если первое множество входит во второе, например, [1]<=[1,2];

проверки вхождения (>=) возвращает TRUE, если второе множество входит в первое;

проверки принадлежности (in) возвращает TRUE, если выражение име­ет значение, принадлежащее множеству. Структура этой бинарной операции имеет вид

<выражение> in <множество>;

Примеры:

3 in S6 , и [ ] in [0..5] возвращают TRUE;

2*2 in S4 дает FALSE.

Множества имеют компактное машинное представление.

Недостатком данного типа является невозможность вывода множеств на экран, поскольку отсутствует механизм изъятия элемента из множест­ва. Ввод множества возможен только поэлементно.

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

VAR S: SET of char; {объявленa переменная-множество S}

C: char; {элемент множества}

Begin

S:=[]; {обнуление значений}

while C <> '.' do {цикл до ввода "."}

begin

readln(C); {чтение символа в с}

S:=S+[C]; {добавление его к S}

end;

End.