1. Множина (set) — це структурований тип даних, елементи якого складаються зі скінченого набору до 255 даних одного типу, значення яких записують через кому в квадратних дужках. За допомогою множин розв’язують задачі, де потрібно визначити, чи деякий елемент належить певному набору даних чи ні тощо. Для множин існують операції об'єднання, перетину, різниці, порівняння, а також операція визначення, чи деякий елемент належить множині.
| a + b (об'єднання) — множина, яка містить усі елементи множин a i b без повторень; a * b (перетин) — множина, яка містить елементи, які є спільними для множин a i b; a – b (різниця) — множина, яка складається з елементів, які є у множині а, але немає у множині b; =, <>, <=, >= (порівняння) — результатом порівняння є дане логічного типу.
| Приклад. Нехай задано множини а=[1,2,3,4,5,6] та b=[1,2,3,4]. Тоді a+b=[1,2,3,4,5,6]; a–b=[5,6]; a*b=[1,2,3,4]. Порівняння цих множин дає такі результати: a=b — false; a<>b — true; a>=b – true; a<=b — false. Порядок розташування елементів у множині значення не має: [1, 2, 3, 4] і [2, 4, 1, 3] – це одна й та ж множина. Множина без елементів називається порожньою: [ ]. Загальний вигляд конструкції опису типу множини такий:
type <назва типу>=set of <базовий тип>;
Базовим типом може бути символьний, перерахований, діапазонний тип даних потужністю до 255 елементів. Приклад. Задамо сталу множину а, опишемо тип множини symbol і оголосимо змінні number, s та y відповідних типів:
| const a = [1,2,5,9]; type symbol = set of char; var number : set of 1..100; s : symbol; y : set of (green, black, red);
|
| {Задаємо сталу множину} {Описуємо множину символів} {Оголошуємо змінні number, s, y} {відповідних множинних типів}
| Значення змінній типу множина надають за допомогою команди присвоєнн
<ім'я змінної> := <вираз>;
Типи множин, з яких складається вираз, мають збігатися. Приклад. Оголошеним вище змінним можна надати таких значень:
| number := [ ]; number := [15, 12, 7, 99]; number := number + [1, 2, 6, 7] * [3, 4, 6, 7] – [4, 7]; s:=['s', 'g', 'T', '5', '$', '*']; s := ['a', 'b', 'd'] * ['d'] + ['1', 'r']; y:=[red]; y:=[ ], де [ ] — порожня множина.
| 2. Пошук даних у множині. Потрібний елемент у множині можна знайти за допомогою операції in. Для визначення чи елемент належить множині використовують таку конструкцію
if <елемент> in <множина> then <команда 1> else <команда 2>;
Приклад. Перевірити чи є число 25 у множині а=[21, 4, 12, 25] можна так:
| n := 25; а := [21, 4, 12, 25]; if n in a then write('Число ', n, ' є у множині') else write('Числа ', n, ' у множині немає');
| Приклад. Складемо процедуру, яка визначає число n – кількість цифр у деякий множині символів s типу symbol.
| procedure Poshuk(s: symbol; var n : integer); var cyfra: '0'..'9'; begin n:=0; for cyfra:= '0' to '9' do if cyfra in s then n:=n+1 end;
| Задача 1. Менеджер комп’ютерного магазину-салону регулярно отримує інформацію про техніку, яка надходять на склади A, B, C. Українським назвам виробів поставлено у відповідність номери 1–9 та англійські назви t1–t9. Англійські назви описані за допомогою перерахованого типу tovary. Скласти програму, яка дає інформацію про вироби, що є на складах A або B, але немає на складі C.
| program Sklady; uses Crt; type tovary = (t1, t2, t3, t4, t5, t6, t7, t8, t9); {це інформація про наявність товарів на складах} const A: set oftovary = [t1, t3, t4, t5, t6, t9]; B: set of tovary = [t1, t2, t3, t5, t6, t8, t9]; C: set of tovary = [t3, t5, t6, t8]; var tovar : tovary; begin clrscr; writeln('У нас є такі товари:'); for tovar := t1 to t9 do if tovar in A + B – C then case ord (tovar)+1 of 1 : writeln('Комп''ютери Dell Dimension'); 2 : writeln('Комп''ютери IBM PC 300'); 3 : writeln('Комп''ютери Celebris XL, GL'); 4 : writeln('Принтери Epson серій LX, LQ'); 5 : writeln('Принтери HP LJ 5L та 5PM'); 6 : writeln('Сканер Epson GT9000'); 7 : writeln('Дисковід CD-ROM'); 8 : writeln('Дискети Verbatim 1.44Мб'); 9 : writeln('Дискети Polaroid 1.44Мб') end; writeln; writeln('Ми чекаємо на вас!'); end.
| Після виконання програми на екрані отримаємо:
| У нас є такі товари: Комп'ютери Dell Dimension Комп'ютери IBM PC 300 Принтери Epson серій LX, LQ Дискети Polaroid 1.44Мб Ми чекаємо на вас!
| Завдання. Розв’яжіть задачу № 22 свого варіанта.
|