- •Лабораторна робота №7 тема: мова програмування турбо паскаль. Опрацювання множин
- •Короткі теоретичні відомості
- •Операції над множинами
- •Самостійна підготовка до виконання лабораторної роботи
- •Порядок виконання роботи:
- •3. Виконати відповідні практичні завдання з варіантів (варіант вибирається згідно номеру комп’ютера) для самостійного виконання.
- •Питання для самостійної роботи
- •Література
- •Звіт до роботи
Операції над множинами
|
НАЗВА |
ФОРМА |
ПОЯСНЕННЯ, ПРИКЛАДИ ВИКОРИСТАННЯ |
= |
Перевірка на рівність |
S1 = S2 |
Результатом є логічне значення, рівне TRUE, якщо S1 і S2 складаються з однакових елементів незалежно від порядку слідування, і FALSE у протилежному випадку. [1,2,3] = [1,3,2]; [] = []; ['a'..'c'] = ['a','b','c'] |
<> |
Перевірка на нерівність |
S1<>S2 |
Результатом є логічне значення, рівне TRUE, якщо S1 і S2 відрізняються хоча б одним елементом, і FALSE у протилежному випадку. [1,2] <> [1]; [] <> [3]; ['a'..'c'] <> ['a','c'] |
<= |
Перевірка на підмножину |
S1<=S2 |
Результатом є логічне значення, рівне TRUE, якщо всі елементи S1 містяться і в S2 незалежно від їх порядку слідування, і FALSE у протилежному випадку. ['a','b'] <= ['a'..'z']; [] <= [4]; [1,2] <= [1,2,3] |
>= |
Перевірка на надмножину |
S1>=S2 |
Результатом є логічне значення, рівне TRUE, якщо всі елементи S2 містяться в S1, і FALSE у протилежному випадку. ['x'..'z'] >=['y']; [1..10] >=[1..5]; [5,7] >=[] |
in |
Перевірка входження елемента у множину |
E in […] E in S1 |
Результатом є логічне значення, рівне TRUE, якщо значення Е належить базовому типу множини і входитьу множину […] (S1). Якщо множина не містить у собі значення К, то результатом є FALSE. 5 in [0..5]; 's' in ['a'..'z']; not (7 in [9..20]) |
+ |
Об’єднання множин |
S1 + S2 |
Результатом об’єднання є множина, отримана злиттям елементів цих множин і виключенням елементів, що повторюються. [1,2]+[2,3,4] = [1,2,3,4]; {[1..4]} ['s'] + [] = ['s'] |
– |
Різниця множин |
S1 – S2 |
Результатом операції отримання різниці S1 – S2 є множина, складена з елементів, які входять в S1, але не входять в S2. [5,7,9] – [7] = [5,9]; ['1','2'] – ['8','9'] = ['1','2'] |
* |
Перетин множин |
S1 * S2 |
Результатом перетину є множина, що складається лише з тих елементів S1 і S2, які містяться одночасно і у S1, і у S2. [3,4,5,6,7] * [4,5,8] = [4,5]; ['x'] * [] = [] |
Переваги типу множина: компактність подання – один елемент множини займає один біт пам’яті; відсутність необхідності заздалегідь вказувати кількість елементів множини – по ходу програми множина може розширятись або скорочуватись; покращення наочності програм і гнучкості мови програмування. Основним недоліком є те, що Турбо Паскаль не дозволяє виводити множини на екран і отримувати окремі елементи з множин. Введення множин можливе лише по елементам.
Розглянемо прості приклади використання типу даних множина при розв’язуванні задач засобами мови ТР.
Задача 1. В порядку спадання вивести всі цілі числа з діапазону 1..4900, які можна подати у вигляді n2 + 2k2, але не можна подати у вигляді 7ij + j + 3 (n, k, i, j ≥ 0).
Uses Crt;
Type S = 1..4900;
SS = Set of S;
Var p: S;
S1, S2: SS;
n, k : integer;
Begin
S1 :=[]; S2 :=[]; {Ініціалізація множин}
for n:= 0 to 70 do
for k:= n to 70 do
begin
S1 := S1 +[n*n +2*k*k];
S2 := S2 + [7*n*k + k + 3]
end;
for p := 4900 downto 1 do
if (p in S1) and (not (p in S2))
then writeln(p)
End.
Задача 2. Дана послідовність латинських літер, яка закінчується крапкою. Вивести перші входження літер у послідовність, зберігаючи їх початковий взаємний порядок. (Наприклад, вхідний текст – qqwerrtyy., вихідний текст – qwerty).
Uses Crt;
Var Let : Set of 'a'..'z';
ch : Char;
Begin
ClrScr;
Let := []; {Множина літер у розглянутій частині тексту}
Read(ch);
while ch <> '.' do
begin
if not (ch in Let) then {Перше входження літери}
begin
Write(ch);
Let := Let + [ch]
end;
Read(ch)
end
End.