Множини.ppt
- Количество слайдов: 20
МНОЖИНИ
Множини належать до порівняно рідко використовуваних засобів мови Pascal. Однак у ряді випадків використання множин дозволяє помітно підвищити компактність і наочність програм. Множина (set) – це структурований тип даних, елементи якого складаються зі скінченого набору до 256 даних одного типу, значення яких записують через кому в квадратних дужках.
Потрібно звернути увагу на дві обставини. По-перше, всі значення базового типу, що утворять конкретні значення множинного типу, повинні бути РІЗНІ. По-друге, порядок "розташування" елементів у множині ніяк НЕ ФІКСУЄТЬСЯ. Це відповідає прийнятому в математиці трактуванню множини як безповторної невпорядкованої сукупності об'єктів.
Turbo Pascal допускає як базові типи для множини дискретні типи не більш ніж з 256 різними значеннями, причому (для цілих типів) ці значення повинні лежати в діапазоні від 0 до 255. Таким обмеженням задовольняють тільки стандартні типи byte і char, перелічувані типи, а також обмежені типи, утворені з них.
Множинний тип задається за допомогою двох службових слів set і of - і наступного за ним базового типу. Наприклад: type Digits = set of 1. . 5; var S : Digits;
Змінна S, визначена в прикладі, може приймати значення, що складаються з наступних сукупностей цілих чисел: <порожньо> 1 1, 2 , 3 1, 5 1, 3, 4, 5 … 1, 2, 3, 4, 5
В Pascal-програмі допускаються явні зображення значень множинних типів. Зображення множини (або конструктор множини) будується зі списку елементів множини, розділених комами. Весь список береться у квадратні дужки, наприклад: [1, 2, 5] [Red, Yellow]
Як елементи в зображенні множини допускаються вирази, тип яких повинен збігатися з базовим типом множини. Крім того, можна вказувати діапазони значень, що складаються із пари граничних значень, розділених знаком. . (дві крапки); наприклад, два зображення множин [1. . 3, 5] і [1, 2, 3, 5] еквівалентні. Порожня множина зображується двома квадратними дужками: [ ].
Необхідно пам'ятати, що множина - це безповторна сукупність елементів, так що, наприклад, наступні три зображення позначають одну й ту ж множину: [1, 2, 3] [1, 2, 3, 2, 2, 3, 1].
Наведемо ще приклад опису множин. type Set. Of. Char= set of char; Digits= set of 0. . 100; var My. Chars : Set. Of. Char; My. Dig 1, My. Dig 2 : Digits; Begin … My. Chars : = [ ' a '. . ' z ', ' 0 '. . ' 9 ', ' - ' ] ; My. Dig 1 : = []; My. Dig 2 : = My. Dig 1; My. Dig 1 : = [x. . x+10, 0, y-1, y+1]; …
Операції над множинами Для множинних типів існують наступні групи операцій: n теоретико-множинне об'єднання, перетин і віднімання множин; n перевірка приналежності елемента множині; n перевірка на рівність і нерівність множин; n перевірка на входження (приналежність) однієї множини в іншу.
Розглянемо докладніше перераховані операції. 1. Об'єднання, перетин та віднімання множин. Ці операції позначаються, відповідно, символами '+', '*' і '-' і означають традиційні дії із множинами, прийняті в математиці.
ü * - перетин двох множин: результат містить елементи, спільні для обох множин. ü + - об'єднання двох множин: результат містить елементи першої множини, доповнені відсутніми елементами із другої множини. ü - - різниця множин: результат містить елементи з першої множини, які не належать другій.
Наступний приклад ілюструє наведені операції (у правому стовпчику показана множина - результат операції): [1, 2] + [3, 4] [1. . 10] + [5. . 15] [1. . 10] * [5. . 15] [1, 2] * [3, 4] [1. . 10] - [5. . 15] [1, 2, 3, 4] [1. . 15] [5. . 10] [] [1. . 4]
2. Перевірка приналежності множині. Ця логічна операція позначається службовим словом in. Правий операнд повинен бути множиною, лівий значенням базового типу множини. Результат true, якщо значення входить у множину, і false, якщо не входить. Наприклад: 2 in [1. . 10, 12] true 5 in [1, 2, 7, 10] false
Операцію перевірки приналежності зручно використовувати для виключення більш складних перевірок. Наприклад, оператор виду if (ch='a') or (ch='b') or (ch='x') or (ch='y') then S може бути переписаний у набагато більш компактній і наочній формі: if ch in ['а', 'b', 'х', 'у'] then S Помітимо, що другий варіант більш ефективний з погляду швидкодії.
3. Перевірки на рівність, нерівність і включення множин. Ці бінарні операції також мають звичайний теоретикомножинний зміст і позначаються наступними знаками: = рівність (збіг) двох множин <> нерівність множин <= перевірка на входження множини з лівого операнда в множину з правого операнда >= перевірка на входження множини із правого операнда в множину з лівого операнда
Результатом всіх цих операцій буде логічне значення true або false залежно від успіху перевірки. Нижче наводяться приклади використання цих операцій. [1, 2, 3] = [1, 2] false [1, 2, 3] >= [1, 2] true [S] <= [1. . 10] true, якщо S - ціле число з діапазону 1. . 10 [1, 2, 3] <> [1, 2, 2] true
Приклад: підрахувати кількість цифр в рядку використовуючи множини. Program mn 1; Const cyfra=[‘ 0’, ’ 1’, ‘ 2’, ’ 3’, ‘ 4’, ’ 5’, ‘ 6’, ’ 7’, ‘ 8’, ’ 9’]; Var s: string; i, k: word; Begin Writeln(‘Enter string’); readln(s); k: =0; For i: =1 to length(s) do if s[i] in cyfra then k: =k+1; Writeln(‘string contens’, k: 3, ’cyfr’); End.
Program mn 2; Var cyfra: set of char; s: string; i, k: word; Begin cyfra=[‘ 0’, ’ 1’, ‘ 2’, ’ 3’, ‘ 4’, ’ 5’, ‘ 6’, ’ 7’, ‘ 8’, ’ 9’]; Writeln(‘Enter string’); readln(s); k: =0; For i: =1 to length(s) do if s[i] in cyfra then k: =k+1; Writeln(‘string contens’, k: 3, ’cyfr’); End.


