Студопедия

Главная страница Случайная страница

КАТЕГОРИИ:

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Конструктора






 

Наприклад:

[ ] - порожня множина

[2, 5..7] - множина {2, 5, 6, 7}

['A'..'Z', 'O'..'9'] - множина, що складається з всіх великих латинських букв і цифр

[i + j.. i + 2*j] - множина, що складається з всіх цілих чисел між i + j і i + 2j

Відмітимо, що якщо у виразі [v1..v2] v1 > v2, множина [v1.. v2] - порожня.

3. Операції і відношення.

До операндів - однотипних множин А і В, можна застосувати такі дії:

А + В - об’єднання А È В

А * В - перетин А Ç В

А - В - різниця А \ В

Між А і В визначені також відношення порядку і рівності

А = В, А < > В, А < В, А < = В, А > В, А > = В;

Відношення порядку інтерпретуються як теоретико-множинні включення.

Якщо А - множина і х - елемент базового типу, то визначено відношення належності
х in A - x належить A (x Î A).

Кожне з відношень, описаних вище, по суті є операцією, результат якої має тип Boolean. Таким чином, якщо Init - змінна типу Boolean, можливе присвоювання Init: = A < B. Можливі такі порівняння (А = В) = (С = D).

Наявність операцій над множинами дозволяє застосовувати в програмах оператори присвоювання, в лівій частині яких стоїть змінна типу множини, а в правій - вираз того ж типу. Наприклад:

А: = А * [1.. 10] + B; B: = (А + B)*['A'.. 'Z'];

4. Застосування множин у програмуванні.

При реалізації мови розміри множин завжди обмежені константою, що залежить від реалізації. Звичайно ця константа кратна довжині машинного слова. Це відбувається тому, що множини реалізовані у вигляді логічних (двійкових) векторів наступним чином: кожній координаті двійкового вектора однозначно відповідає один з елементів базового типу. Якщо елемент а належить множині А, що представляється, то значення координати вектора, відповідне а, дорівнює 1. У протилежному випадку значення відповідної координати дорівнює 0.

Наприклад, якщо множина А описана як Set of 0..15, то його представляє 16-ти мірний двійковий вектор, координати якого перенумеровані від 0 до 15, і і-тій координаті відповідає елемент і базового типу.

 

Базовий тип: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

Двійковий вектор: 0 0 1 1 0 1 0 1 0 0 0 1 0 1 0 0

Представлена множина: A = [2, 3, 5, 7, 11, 13]

 

Такий спосіб реалізації дозволяє швидко виконувати операції над множинами і перевірки теоретико-множинних відношень. Тому, наприклад, замість

For X: = 'A' to 'Z' do

If (X ='A') or (X ='E') or (X ='I') or (X ='O') or (X='U')

then Statement1

else Statement2

краще написати

For X: = 'A' to 'Z' do

If X in ['A', 'E', 'I', 'O', 'U']

then Statement1

else Statement2

Остання форма запису не тільки краще читається, але й значно швидше обчислюється.

У системі Turbo-Pascal максимальна кількість елементів у множині дорівнює 256. Таким чином, у якості базового типу можна вибирати, наприклад, Char або відрізок 0..255.

 

Приклад. Побудувати множину простих чисел з відрізку 2..n (n £ 255).

Program EratosfenGrating;

Const n = 255;

Var Grating, Prime: set of 2.. n;

i, Min: integer;

Begin

Grating: = [2.. n]; Prime: = []; Min: = 2; {ініціалізація}

While Grating < > [] do begin {основний цикл}

While not(Min in Grating) do {пошук найменьшого елементу }

Min: = Min + 1;

Prime: = Prime + [Min]; {доповнення множини простих чисел}

For i: = 1 to n div Min do {виключення кратних чисел}

Grating: = Grating - [i*Min];

end;

Writeln('Primes: '); {виведення множини простих чисел}

For i: = 1 to n do

If i in Prime then write(i, ', ')

End.

Відмітимо, що доступ до елемента множини у мові не передбачений. У цьому - ще одна якісна відміна множинного типу від інших типів даних. Тому наприклад, для виведення множини Prime доводиться перебирати всі елементи базового типу і кожний із них перевіряти на належність Prime.

 


Поделиться с друзьями:

mylektsii.su - Мои Лекции - 2015-2024 год. (0.006 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал