Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[35.175.200.199] |
|
Сообщ.
#1
,
|
|
|
Множества.
Тип «множество» задаёт интервал значений, который является множеством всех подмножеств базового типа. Множество описывается в разделе var с помощью зарезервированного слова set. Базовым типом множества может быть любой тип, состоящий не более чем из 256 элементов. Вот пример описания множества: Var s:set of char; Для того чтобы пояснить особенность данного типа, рассмотрим пример. Если переменная типа «множество» описана как set of 1..3, то она может принимать значения из следующего множества: {(1,2,3),(1,2),(1,3),(2,3),(1),(2),(3),()}. Константы множественного типа записываются с помощью квадратных скобок [ ] и списка элементов. Примеры: Const alphabet = ['A'..'Z','a'..'z']; empty = []; digits = [0..9]; Отсутствие списка элементов в квадратных скобках обозначает пустое множество. Операции над множествами. 1) Присваивание. Например: S:=[ ]; Множества языка Паскаль обладают свойствами математических множеств. В частности, над ними можно выполнять те же операции. Если S1 и S2 – константы или переменные множественного типа, то: 2) Объединение. S1+S2 будет их объединением. Объединением математических множеств s1 и s2 называется множество, состоящее из элементов, принадлежащих или множеству s1, или множеству s2, или обеим множествам. 3) Пересечение. S1*S2 будет их пересечением. Пересечение множеств состоит из элементов, одновременно принадлежащих обоим множествам. 4) Разность S1-S2 будет их разностью. Разностью называется множество, состоящее из элементов, принадлежащих первому, но не принадлежащих второму множеству. 5) Операции отношений: = (равенство), <> (неравенство), <= (является подмножеством), >= (является надмножеством) 6) Зарезервированное слово in используется для определения принадлежности элемента множеству. И иногда в операторе if гораздо удобнее использовать множественный тип: if ch in ['A'..'Z','a'..'z'] then … Чем, например пару операций сравнения: if ((ch >= 'A')and(ch<='Z'))or((ch>='a')and(ch<='z')) then … Рассмотрим пример. Данный фрагмент программы формирует множество всех заглавных букв с нечетными кодами: Var S:set of 'A'..'Z'; Ch:char; Begin S:=[ ]; Ch:='A'; Repeat S:=S+[ch]; Inc(ch); Inc(ch); Until ch>='Z'; end. Альтернативой оператору S:=S+[ch]: является оператор Include(S,ch). Имеется и обратная процедура Exclude исключения элемента из множества. У этих процедур два параметра: первый указывает множество, а второй элемент |
Сообщ.
#2
,
|
|
|
Если уж речь зашла.
Как устроены переменные типа Set Of ...? |
Сообщ.
#3
,
|
|
|
Цитата KiRiK, 14.02.04, 02:15 Если уж речь зашла. Как устроены переменные типа Set Of ...? Упакованный битовый массив. Х-й (0-7) бит У-ого (0-31) байта содержит 1, если в множестве есть элемент с индексом 8*У+Х. Собственно, из-за этого они медленнее, чем array[0..9] of byte. Если в множестве число эл-тов не кратно 8, то старшие биты последнего байта не в счет. Данные из ВР7.0. |