Что такое множество?
    , Описание типа "множество" и операций над ним
  ![]()  | 
Наши проекты:
 Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту  | 
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS | 
| [216.73.216.5] | 
 
 | 
		
  | 
    Правила ЧаВО (FAQ) разделов Паскаля
  
    Что такое множество?
    , Описание типа "множество" и операций над ним
  | 
         
         
         
          
           Сообщ.
           #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.  |