Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
1 Информатика и программирование.doc
Скачиваний:
3
Добавлен:
01.03.2025
Размер:
326.66 Кб
Скачать

9 Множества (определение, примеры, операции). Представление множеств, примеры использования

Множества – сравнительно редко используемое средство языка, но в ряде случаев их применение позволяет заметно повысить наглядность, компактность и даже эффективность программ. Значения множественного типа, так же как и массивы, строятся из нескольких значений одного (базового) типа. Однако в отличие от массивов значение множественного типа может содержать любое количество различных элементов базового типа: от 0 элементов (пустое множество) до всех возможных значений базового типа. Т.е. возможным значением множественного типа являются все подмножества значений базового типа.

Тип множество

Type Digits=Set of 1..5;

Var S:Digits

Практически все реализации языка Pascal накладывают ограничения на базовый тип множества. Turbo Pascal допускает в качестве базового упорядоченные типы не более чем с 256 различными значениями. Причем для целых типов эти значения должны лежать в диапазоне от 0 до 255. Таким ограничения удовлетворяют только стандартные типы, а также перечисляемые типы и образованные от них.

Type

Color=(red, color, blue);

Colors = set of Color;

Var MyColors:Colors;

В Pascal программе допускается явное изображение значений множества.

Type Achar = set of char;

Var A:Achar;

A:=[‘A’..’Z’, ‘a’..’z’, chr(Digit+48)];

Тип выражения должен совпадать с базовым типом множества.

Допустимые операции для значений множественного типа

1)Объединение, пересечение, вычитание множеств

2)Проверка принадлежности элемента множеству

3)Проверка на равенство и неравенство множеств

4)Проверка на вхождение, принадлежность одного множества другому

1)A+B – объединение множеств – множество, состоящее из элементов принадлежащих множествам A и B

A*B – пересечение – множество, состоящее из элементов, принадлежащих обоим множествам

A-B – вычитание – множество, состоящее из тех элементов множества A, которые не принадлежат множеству B.

2)Оператор In. Правый операнд – множество, левый операнд – значение базового типа множества. Возвращает TRUE, если элемент входит во множество и FALSE в противном случае.

If ch in [‘a’,’b’,’c’,’d’] then S;

3) A=B, A<>B - проверка на равенство и неравенство множеств, соответственно.

4) A<=B – проверка на вхождение множества из левого операнда во множество из правого операнда. A>=B – проверка на вхождение множества из правого операнда в левое.

Множества представляются в памяти массивом логических значений, i-ая компонента которого означает наличие или отсутствие i-го значения базового типа в множестве.

Максимальное число элементов – 256, значит, множество не может занимать больше, чем 32 байта.

Пример использования

Поиск простых чисел в диапазоне от 2 до N.

  1. поместим все числа между 2 и п в решето

  2. выберем и вынем из решета наименьшее из чисел, оставшихся в решете

  3. поместим это число среди простых

  4. переберем и вынем из решета все числа кратные данному

  5. если решето непустое, повторим шаги со 2-го по 5.

Const N=255;

Var Sieve, Primes: Set Of 2..N;

Next:Byte;

J:Word;

Begin

Sieve := [2..N];

Primes := [];

Next := 2;

REPEAT

WHILE not (next in sieve) DO Inc(next);

Primes := Primes + [Next];

J:=Next;

WHILE J<=N DO

Begin

Sieve := Sieve – [J];

J := J + Next;

End;

UNTIL Sieve = [];

End.