На главную
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила ЧаВО (FAQ) разделов Паскаля
В этом разделе разрешено создавать только темы, в которых описано РЕШЕНИЕ какой-либо общей проблемы, или описание какого-либо аспекта языка Паскаль.
Обсуждение уже созданных тем разрешено, но только конструктивное, например указание на ошибку или уточнение имеющегося текста.

Стоит почитать Структуры данных
Модераторы: volvo877, Romtek
  
> Что такое множество?, Описание типа "множество" и операций над ним
    Множества.
    Тип «множество» задаёт интервал значений, который является множеством всех подмножеств базового типа. Множество описывается в разделе var с помощью зарезервированного слова set. Базовым типом множества может быть любой тип, состоящий не более чем из 256 элементов.
    Вот пример описания множества:
    ExpandedWrap disabled
      Var s:set of char;

    Для того чтобы пояснить особенность данного типа, рассмотрим пример. Если переменная типа «множество» описана как set of 1..3, то она может принимать значения из следующего множества: {(1,2,3),(1,2),(1,3),(2,3),(1),(2),(3),()}.
    Константы множественного типа записываются с помощью квадратных скобок [ ] и списка элементов.
    Примеры:

    ExpandedWrap disabled
      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 гораздо удобнее использовать множественный тип:
    ExpandedWrap disabled
      if ch in ['A'..'Z','a'..'z'] then …

    Чем, например пару операций сравнения:
    ExpandedWrap disabled
      if ((ch >= 'A')and(ch<='Z'))or((ch>='a')and(ch<='z')) then …


    Рассмотрим пример. Данный фрагмент программы формирует множество всех заглавных букв с нечетными кодами:
    ExpandedWrap disabled
      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 исключения элемента из множества. У этих процедур два параметра: первый указывает множество, а второй элемент
      Если уж речь зашла.
      Как устроены переменные типа Set Of ...?
        Цитата
        KiRiK, 14.02.04, 02:15
        Если уж речь зашла.
        Как устроены переменные типа Set Of ...?

        Упакованный битовый массив. Х-й (0-7) бит У-ого (0-31) байта содержит 1, если в множестве есть элемент с индексом 8*У+Х. Собственно, из-за этого они медленнее, чем array[0..9] of byte.
        Если в множестве число эл-тов не кратно 8, то старшие биты последнего байта не в счет.
        Данные из ВР7.0.
        0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
        0 пользователей:


        Рейтинг@Mail.ru
        [ Script execution time: 0,0205 ]   [ 16 queries used ]   [ Generated: 22.06.21, 21:03 GMT ]