Партнерка на США и Канаду по недвижимости, выплаты в крипто
- 30% recurring commission
- Выплаты в USDT
- Вывод каждую неделю
- Комиссия до 5 лет за каждого referral
[1..10, 100..110] – множество целых чисел от 1 до 10 и от 100 до 110.
[Pn, Vt, Sr] – множество из 3-х элементов перечислимого типа.
[X.. 5*X] – множество целых чисел от текущего значения X до значения выражения 5*X.
Конструктор множества – это фактически множественная константа.
Порядок перечисления элементов в множестве не играет роли. Каждый элемент учитывается только один раз.
Например, множества [1, 2, 3] и [1, 3, 2] – это одно и тоже множество.
4.3. Задание множественного типа
При задании множественного типа необходимо задать базовый тип. В совокупность значений множественного типа входят все возможные множества, являющиеся произвольными комбинациями значений базового типа.
Синтаксис задания множественного типа имеет вид, который представляет рисунок 4.2.

Рисунок 4.2 – Синтаксическая диаграмма задания множественного типа
Как уже отмечалось, <Базовый_скалярный_тип> - это любой перенумерованный тип, значения которого попадают в диапазон 0 .. 255.
Например:
Set Of 1..3 – значениями этого множественного типа могут быть множества [], [1], [2], [3], [1, 2], [1, 3], [2, 3], [1, 2, 3].
Set Of Boolean – значениями этого множественного типа могут быть множества [True], [False], [True, False], [].
В качестве базового типа может быть использовано имя типа или задание типа.
Задание типа Set аналогично представлению множества с помощью массива:
Array [<Базовый_скалярный_тип>] Of Boolean.
Обработка таких массивов в Паскале неэффективна, поэтому используется тип Set.
Пример 4.3.
Объявление множественного типа.
Type
Ned = (Pn, Vt, Sr, Ch, Pt, Sb, Vs);
Denned = Set Of Ned; {Используется имя базового типа}
Log = Set Of Boolean; {Используется имя базового типа}
Var
Den: Denned;
L1, L: Log;
I1, I2, I: Set Of 1..10; {Используется задание базового типа}
B: Boolean;
В данном примере Den, L1, L, I1, I2, I – это множественные переменные (переменные-множества).
Для присваивания значений множественным переменным используются множественные выражения.
Множественное выражение – это выражение, значением которого является множество. Частным случаем множественных выражений являются множественные переменные и конструкторы множества.
Пример 4.4.
Использование множественных выражений. Для переменных, объявленных в примере 4.3, можно записать:
L1 := [True];
L := L1; {Значение L1 к этому моменту должно быть определено}
I := [1, 3, 5];
Den := [Sub, Vos];
4.4. Операции над множествами
Над множествами определены операции, которые представляет таблица 4.2.
Таблица 4.2 – Операции над множествами
Операция | Описание операции | Тип результата |
= | Равно | Boolean |
<> | Не равно | |
<= | Результат операции равен True, если левое множество является подмножеством правого | |
>= | Результат операции равен True, если правое множество является подмножеством левого | |
In | Результат операции равен True, если некоторое скалярное значение (левый операнд) является элементом множества (правый операнд) | |
Not *) | Дополнение множества (одноместная операция) | Set |
+ | Объединение множеств | |
* | Пересечение множеств | |
– | Разность множеств A – B = A * Not B | |
Xor *) | Исключающее объединение множеств A Xor B = A + B – A * B |
Здесь *) – операции, определенные не во всех версиях языка Паскаль.
Над множественными переменными определена одна встроенная функция – Sizeof(X), указывающая количество байт для представления значения X множественной переменной.
Операция In представляет собой операцию проверки вхождения элемента в множество. Левый операнд должен принадлежать базовому типу, правый операнд – множественному типу, построенному на основе этого базового типа.
Пример 4.5.
Операции над множествами. Пусть имеются объявления, приведенные в примере 4.3.
I := [1, 3, 5];
B := 2 In I {в B значение False}
B := [3, 5]<=I {в B значение True}
B := [4, 5]<=I {в B значение False}
I := Not I {в I значение [2, 4, 6..10] – дополнение множества}
В двухместных операциях оба операнда должны принадлежать одному и тому же множественному типу значений.
Объединение множеств (I2 := I + I1) – это множество, состоящее из элементов, входящих хотя бы в одно из исходных множеств I и I1. Объединение множеств иллюстрирует рисунок 4.3.

Рисунок 4.3 – Объединение множеств
Пересечение множеств (I2 := I * I1) – это множество, состоящее из элементов, входящих в оба исходных множества I и I1. Пересечение множеств иллюстрирует рисунок 4.4.

Рисунок 4.4 – Пересечение множеств
Разность множеств (I2 := I – I1) – это множество, состоящее из элементов множества I, не входящих в множество I1. Разность множеств иллюстрирует рисунок 4.5.

Рисунок 4.5 – Разность множеств
Пример 4.6.
Операции над множествами. Пусть имеются объявления, приведенные в примере 4.3.
I1 := [1, 2, 3];
I := [1, 3, 5];
I2 := I1 + I; {в I2 значение [1, 2, 3, 5]}
I2 := I1*I; {в I2 значение [1, 3]}
I2 := I – I1; {в I2 значение [5]}
Выражения, приведенные в примере 4.6, представляют собой множественные выражения.
Старшинство операций в множественных выражениях аналогично старшинству в арифметических выражениях: вначале вычисляются выражения в скобках, затем операция *, после этого операции + и – в порядке их следования слева направо.
Например, результатом вычисления множественного выражения
[1, 2, 5, 6, 7] * [2 .. 6] + [3, 9]
является множество
[2, 3, 5, 6, 9].
Пример 4.7.
Использование множественного типа. Подсчитать общее количество букв X, Y, Z в исходном тексте, оканчивающемся точкой.
Program Mno;
Var
Kol: Integer;
B: Char;
Begin
Kol := 0;
Read (B); {Чтение первой буквы текста}
While B<>’.’ Do
Begin
If B In [‘X’, ‘Y’, ‘Z’] Then {Если значение буквы входит в множество [‘X’, ‘Y’, ‘Z’]}
Kol := Kol + 1;
Read (B); {Чтение очередной буквы текста}
End;
Writeln (Kol);
End.
4.5. Ввод / вывод значения множественной переменной
Для ввода значения множественной переменной используется операция объединения множеств.
Пример 4.8.
Ввод значения переменной типа множества больших латинских букв из входного файла. Признак окончания ввода множества – точка.
Var
B: Char;
Mn: Set Of ‘A’..‘Z’; {Тип элементов вводимого множества}
Begin
Mn := []; {Начальное значение множества – пустое множество}
Repeat
Read (B); {Чтение очередного элемента множества}
Mn := Mn + [B] {Объединение множеств}
Until B = ’.’; {‘.’ – признак конца текста}
...
Во входном файле необходимо подряд записать все значения, составляющие значение данной множественной переменной.
Если очередное значение переменной B не относится к базовому типу множества, то оно в множество Mn не занесется.
Для вывода значения множественной переменной используется операция проверки вхождения элемента в множество.
Пример 4.9.
Продолжение примера 4.8. Вывод значения переменной типа множества латинских букв.
For B := ’A’ To ‘Z’ Do {Организация цикла по базовому типу множества}
If B In Mn Then {Анализ вхождения очередного значения базового типа в значение множественной переменной}
Write (B: 5);
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |


