Слайд 2 Множини належать до порівняно рідко використовуваних засобів мови Pascal. Однак
у ряді випадків використання множин дозволяє помітно підвищити компактність і
наочність програм.
Множина (set) – це структурований тип даних, елементи якого складаються зі скінченого набору до 256 даних одного типу, значення яких записують через кому в квадратних дужках.
Слайд 3 Потрібно звернути увагу на дві обставини. По-перше, всі значення базового
типу, що утворять конкретні значення множинного типу, повинні бути РІЗНІ.
По-друге, порядок "розташування" елементів у множині ніяк НЕ ФІКСУЄТЬСЯ. Це відповідає прийнятому в математиці трактуванню множини як безповторної невпорядкованої сукупності об'єктів.
Слайд 4 Turbo Pascal допускає як базові типи для множини дискретні типи
не більш ніж з 256 різними значеннями, причому (для цілих
типів) ці значення повинні лежати в діапазоні від 0 до 255. Таким обмеженням задовольняють тільки стандартні типи byte і char, перелічувані типи, а також обмежені типи, утворені з них.
Слайд 5 Множинний тип задається за допомогою двох службових слів - set
і of - і наступного за ним базового типу.
Наприклад:
type Digits = set of 1..5;
var S : Digits;
Слайд 6 Змінна S, визначена в прикладі, може приймати значення, що складаються
з наступних сукупностей цілих чисел:
1
1, 2
1, 2 ,
3
1, 5
1, 3, 4, 5
…
1, 2, 3, 4, 5
Слайд 7 В Pascal-програмі допускаються явні зображення значень множинних типів. Зображення множини
(або конструктор множини) будується зі списку елементів множини, розділених комами.
Весь список береться у квадратні дужки, наприклад:
[1,2,5]
[Red,Yellow]
Слайд 8 Як елементи в зображенні множини допускаються вирази, тип яких повинен
збігатися з базовим типом множини. Крім того, можна вказувати діапазони
значень, що складаються із пари граничних значень, розділених знаком .. (дві крапки); наприклад, два зображення множин [1..3,5] і [1,2,3,5] еквівалентні.
Порожня множина зображується двома квадратними дужками: [ ].
Слайд 9 Необхідно пам'ятати, що множина - це безповторна сукупність елементів, так
що, наприклад, наступні три зображення позначають одну й ту ж
множину:
[1,2,3]
[1,1,2,3]
[1,2,3,2,2,3,1].
Слайд 10Наведемо ще приклад опису множин.
type SetOfChar= set of char;
Digits=
set of 0..100;
var MyChars : SetOfChar;
MyDig1,MyDig2 : Digits;
Begin
…
MyChars := [ ' a ' . . ' z ', ' 0 ' . . ' 9 ', ' - ' ] ;
MyDig1 := [];
MyDig2 := MyDig1;
MyDig1 := [x..x+10,0,y-1,y+1];
…
Слайд 11Операції над множинами
Для множинних типів існують наступні групи операцій:
теоретико-множинне
об'єднання, перетин і віднімання множин;
перевірка приналежності елемента множині;
перевірка
на рівність і нерівність множин;
перевірка на входження (приналежність) однієї множини в іншу.
Слайд 12 Розглянемо докладніше перера-ховані операції.
1.Об'єднання, перетин та віднімання множин. Ці
операції позначаються, відповідно, символами '+', '*' і '-' і означають
традиційні дії із множинами, прийняті в математиці.
Слайд 13 * - перетин двох множин: результат містить елементи,
спільні для обох множин.
+ - об'єднання двох множин:
результат містить елементи першої множини, доповнені відсутніми елементами із другої множини.
- - різниця множин: результат містить елементи з першої множини, які не належать другій.
Слайд 14 Наступний приклад ілюструє наведені операції (у правому стовпчику показана множина
- результат операції):
[1,2] + [3,4]
[1,2,3,4]
[1..10] + [5..15] [1. .15]
[1..10] * [5..15] [5. .10]
[1,2] * [3,4] []
[1..10] - [5..15] [1. .4]
Слайд 152. Перевірка приналежності множині. Ця логічна операція позначається службовим словом
in. Правий операнд повинен бути множиною, лівий - значенням базового
типу множини. Результат true, якщо значення входить у множину, і false, якщо не входить. Наприклад:
2 in [1..10,12] true
5 in [1,2,7,10] false
Слайд 16 Операцію перевірки приналежності зручно використовувати для виключення більш складних перевірок.
Наприклад, оператор виду
if (ch='a') or (ch='b') or (ch='x') or
(ch='y')
then S
може бути переписаний у набагато більш компактній і наочній формі:
if ch in ['а','b','х','у'] then S
Помітимо, що другий варіант більш ефективний з погляду швидкодії.
Слайд 17 3. Перевірки на рівність, нерівність і включення множин. Ці бінарні
операції також мають звичайний теоретико-множинний зміст і позначаються наступними знаками:
= рівність (збіг) двох множин
<> нерівність множин
<= перевірка на входження множини з лівого операнда в множину з правого операнда
>= перевірка на входження множини із правого операнда в множину з лівого операнда
Слайд 18 Результатом всіх цих операцій буде логічне значення 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
Слайд 19Приклад: підрахувати кількість цифр в рядку використовуючи множини.
Program mn1;
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.
Слайд 20Program mn2;
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.