Иллюстрированный самоучитель по Turbo Pascal

Множества

Множества – это наборы однотипных логически связанных друг с другом объектов. Характер связей между объектами лишь подразумевается программистом и никак не контролируется Турбо Паскалем. Количество элементов, входящих в множество, может меняться в пределах от 0 до 256 (множество, не содержащее элементов, называется пустым). Именно непостоянством количества своих элементов множества отличаются от массивов и записей.

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

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

type
digitChar= set of '0'..'9';
digit = set of 0..9;
var
s1,s2,s3:digitChar;
s4,s5,s6:digit;
begin
…..
s1: = ['1','2','3'];
s2: = ['3','2','1'];
s3: = ['2','3'];
s4: = [0..3.6];
s5: = [4.5];
s6: = [3..9];
…..
end.

В этом примере множества S1 и S2 эквивалентны, а множество S3 включено в S2, но не эквивалентно ему.

Описание типа множества имеет вид:

<имя типа> = SET OF <баз.тип>

Здесь:

  • <имя типа> – правильный идентификатор;
  • SET, OF – зарезервированные слова (множество, из);
  • <баз.тип> – базовый тип элементов множества, в качестве которого может использоваться любой порядковый тип, кроме WORD, INTEGER, LONGINT.

Для задания множества используется так называемый конструктор множества: список спецификаций элементов множества, отделяемых друг от друга запятыми; список обрамляется квадратными скобками (см. предыдущий пример). Спецификациями элементов могут быть константы или выражения базового типа, а также – тип-диапазон того же базового типа.

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

  • * пересечение множеств; результат содержит элементы, общие для обоих множеств; например, S4*S6 содержит [3], S4*S5 – пустое множество (см. выше);
  • + объединение множеств; результат содержит элементы первого множества, дополненные недостающими элементами из второго множества:
S4+S5 содержит [0.1.2.3.4.5.6];
S5+S6 содержит [3.4.5.6.7.8.9];
  • - разность множеств; результат содержит элементы из первого множества, которые не принадлежат второму:
S6-S5 содержит [3.6.7.8.9];
S4-S5 содержит [0.1.2.3.6];
  • = проверка эквивалентности; возвращает TRUE, если оба множества эквивалентны;
  • <> проверка неэквивалентности; возвращает TRUE, если оба множества неэквивалентны;
  • <= проверка вхождения; возвращает TRUE, если первое множество включено во второе;
  • >= проверка вхождения; возвращает TRUE, если второе множество включено в первое;

IN проверка принадлежности; в этой бинарной операции первый элемент – выражение, а второй – множество одного и того же типа; возвращает TRUE, если выражение имеет значение, принадлежащее множеству:

3 in s6 возвращает TRUE;
2*2 in s1 возвращает FALSE.

Дополнительно к этим операциям можно использовать две процедуры.

  • INCLUDE – включает новый элемент во множество. Обращение к процедуре:
INCLUDE (S,I)

Здесь S – множество, состоящее из элементов базового типа TSetBase; I – элемент типа TSetBase, который необходимо включить во множество.

  • EXCLUDE – исключает элемент из множества.

Обращение:

EXCLUDE(S,I)

Параметры обращения – такие же, как у процедуры INCLUDE.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.