Приклад програми, що здійснює вивід складу множини

Завдання (інструкційна картка) для лабораторної роботи

Тема дисципліни.Робота з множинами в Turbo Pascal

Інструкційна картка

Лабораторного заняття № 12

Тема. Множини

Мета заняття. Сформувати практичні вміння та навички створювати програми з використанням множин та операцій над множинами, розглянути приклади створення програм з використанням множин та операцій над ними. Формувати якості особистості студентів та пізнавальний інтерес; показати значення теми для програмування та розв’язування задач; спонукати до пізнавальної, наукової, творчої діяльності; розвивати самостійність, увагу, відповідальність та творче мислення.

 

Методичне забезпечення

1. Глинський Я. М. Паскаль: навчальний посібник / Глинський Я. М., Анохін В. Є., Ряжська В. А. – Львів: СПД Глинський, 2010. – 192 с.

2. Нога Л. В. Конспект лекцій з дисципліни “Основи програмування та алгоритмічні мови” Частина 1 і 2 / Нога Л. В. – Херсон: Веселка, 2006. – 134 с.

3. Інструкційні картки.

Матеріально-технічне забезпечення

1. Комп’ютери, конспекти лекцій, конспекти практичного заняття.

2. Інструкційні картки до лабораторного заняття, роздруковані завдання по варіантах.

Питання для актуалізації опорних знань

1. Що таке список?

2. Дайте визначення лінійного списку.

3. Назвіть види лінійних списків.

4. Що таке стек?

5. Як описується вершина стеку?

6. Дайте визначення черги.

7. Як можна описати нелінійний список?

8. Назвіть приклади нелінійного списку.

9. Що таке текст?

10. Дайте визначення графа, двійкового дерева.

Правила техніки безпеки

Перед початком роботи потрібно перевірити стан обладнання, робочого місця.

Під час роботи потрібно дотримуватися правил експлуатації комп’ютерного обладнання.

При роботі за комп’ютером слід дотримуватись правил особистої безпеки, зберігати відстань від рівня очей до монітора, від робочого стола до тіла.

Забороняється ходити по комп’ютерній лабораторії, розливати рідину на підлогу, столи, обладнання, заходити з їжею, розмовляти між собою.

 

Загальні відомості з теми

Множина (Set) – це структурований тип даних, який подає набір взаємопов’язаних за певною ознакою або групою ознак об’єктів, які можна розглядати як єдине ціле. Кожний об’єкт у множині називається елементом множини. Всі елементи множини повинні належати одному зі скалярних типів, крім дійсного. Цей тип називається базовим типом множини. Базовий тип задається діапазоном або переліком. Область значень типу множина – набір можливих підмножин, складених з елементів базового типу. Якщо базовий тип має N значень, то тип множина для нього буде мати 2N варіантів різних значень.

Для опису множинного типу використовується словосполучення Set of (множина з).

Формат:

Type

<ім’я типу> = Set of <базовий скалярний тип>;

Var

<ім’я змінної> : <ім’я типу>;

Можна задати множинний тип і без попереднього опису:

Var

<ім’я змінної>: Set of <базовий скалярний тип>;

Приклад

Type

SetChar = Set of Char; {множина з символів}

SetByte = Set of Byte; {множина з чисел}

SetDigit = Set of 0..9; {множина з чисел від 0 до 9}

SetDChar = Set of '0'..'9'; {множина з символів '0', '1',…,'9'}

SetSpring = Set of (March, April, May); {множина з весняних місяців, базовий перелічувальний тип визначений користувачем};

SetGolosn = Set of ('А', 'О', 'У', 'І', 'Є', 'И', 'Ї' ); {множина з великих голосних літер}.

В Турбо Паскалі дозволяється визначати множини, які складаються не більше, ніж з 256 елементів. Стільки ж елементів містять типи Byte (0..255) i Char, і це ж число є обмеженням кількості елементів у будь-якому іншому перелічувальному базовому типі множини, який задає користувач. Кожному елементу перелічувального типу приписується певний номер. Для типу Byte номер дорівнює значенню числа, у типі Char номером символа є його ASCII–код. Нумерація здійснюється від 0 до 255. З цієй причини не можуть бути базовими для множин типи ShortInt (–128..127), Word (0..65535), Integer

(–32768..32767), LongInt ( –2147483648..2147483647).

Змінна типу множина підлягає певному синтаксису. Елементи множини повинні братися у квадратні дужки.

Приклад

SByte:= [1,2,3,4,10,20,30,40];

SChar:= ['a', 'b', 'c'];

SChar:= [ 'd'];

SSpring:= [April];

SDiap:= [1..4]; {те ж саме, що [1,2,3,4]}

SComp:= [1..4, 5,7,10..20];

Empty:= [];

Порожня множина записується як [].

Порядок слідування елементів всередині дужок не має значення, не має значення і кількість повторення елементів. Повторні входження елементів ігноруються. Записи ['a','b','b','a'] i ['a','b'] еквівалентні.

Операції над множинами

  НАЗВА ФОРМА ПОЯСНЕННЯ, ПРИКЛАДИ ВИКОРИСТАННЯ
= Перевірка на рівність 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. Вивчити теоретичний матеріал.

2. Виконати індивідуальне завдання.

3. Скласти звіт, в якому відповісти на теоретичні питання, описати алгоритм, описати програму, привести контрольний приклад виконання програми.

Індивідуальні завдання

Створити блок-схему та програму на мові Pascal для задачі згідно з індивідуальним завданням.


1.Оголошенi множини

Var a, b, c: set of 0..9;

з початковою iнiцiалiзацiєю:

a: = [0..3,9]; b: = [3,4,5];

Виведiть результати операцiї:

c: = a+b;

2.Оголошенi множини

Var a, b, c: set of 0..9;

з початковою iнiцiалiзацiєю:

a: = [0..2,5]; b: = [5,6,7];

Виведiть результати операцiї:

c: = a-b;

3.Оголошенi множини

Var a, b: set of char;

з початковою iнiцiалiзацiєю:

a: = [ 'a'..'z']; b: = ['a', 'm', 'x'];

Виведiть результати операцiї:

a:=b;

4.Оголошенi множини

Var a, b, c: set of 0..9;

з початковою iнiцiалiзацiєю:

a: = [0..4,7]; b: = [1,4,5,6,8];

Виведiть результати операцiї:

c: = a*b;

5.Оголошенi множини

Var a, b: set of char;

з початковою iнiцiалiзацiєю:

a: = [ 'a'..'z']; b: = ['a', 'm', 'x'];

Виведiть результати операцiї:

a>=b;

6.Оголошенi множини

Var a, b: set of char;

з початковою iнiцiалiзацiєю:

a: = [ 'a'..'z']; b: = ['a', 'm', 'x'];

Виведiть результати операцiї:

b<=a;

7.Оголошенi множини

Var a, b: set of char;

з початковою iнiцiалiзацiєю:

a: = [ 'a'..'z']; b: = ['a', 'm', 'x'];

Виведiть результати операцiї:

b:=['x','a','m'];

8.Оголошенi множини

Var a, b: set of char;

з початковою iнiцiалiзацiєю:

a: = [ 'a'..'z']; b: = ['a', 'm', 'x'];

Виведiть результати операцiї:

'k' in a;

9.Оголошенi множини

Var a, b: set of char;

з початковою iнiцiалiзацiєю:

a: = [ 'a'..'z']; b: = ['a', 'm', 'x'];

Виведiть результати операцiї:

'k' in b;

10.Враховуючи прiорiтет операцiй над множинами з базовим типом char, a:=['a'..'z']; b:=['k'..'r','x']; c:=['m']; обчислити та вивести результат виразу: (a-b*c) = ['n']) or ('b' in a).

11.Пiдрахувати та вивести кiлькiсть елементiв множини iз заданим базовим типом char: x:=['a'..'f','0'..'9'];

12.Написати процедуру, яка друкує в алфавiтному порядку всi елементи множини з типом type letters=set of 'a'..'z';

13.Пiдрахувати кiлькiсть символiв рядка Var s: packed array [1..100] of char; що входять в множину ['0'..'9', '+','-','*'].

14.Заданий рядок символiв: Var s: string [20]. Визначити кiлькiсть символiв (голосних), що входять в наступну множину ['a', 'e', 'i', 'o', 'u'].

15.Використовуючи роботу iз множинами надрукувати всi символи, що входять у рядок Var str: string [20]; бiльше одного разу.

16.Заданi множини елементiв з базовим типом Char: A={'a','b','c','d'}, B={'b','d','e','f'}. Вияснити чи є у них спiльнi елементи i вивести їх значення на друк.


Методичні РЕКОМЕНДАЦІЇ

1. Для виконання лабораторної роботи потрібно перш за все опрацювати теоретичний матеріал.

2. Виконати індивідуальне завдання.

3. Показати результат роботи викладачеві.

4. Скласти звіт, в якому відповісти на теоретичні питання, описати алгоритм, тобто створити блок-схему, описати програму (лістинг програми з коментарями), привести контрольний приклад виконання програми (результат роботи програми).

5. Здати робоче місце, а оформлений звіт – викладачеві на підпис.

6. Під час виконання лабораторної роботи дотримуватися правил безпеки.

Приклад програми, що здійснює вивід складу множини

Написати програму, яка здійснює вивiд складу множини.

Лістинг програми:

Program myProgram;

uses crt;

var a,b,c: set of byte; i:byte;

Begin

a:=[0..3,6];

b:=[3..7];

c:=a+b;

writeln('Rezyltat operaziji a+b:');

for i:=0 to 255 do

if i in c then writeln(i);

if c=[] then writeln('Porozhnja mnozhuna');

readkey;

End.

 

Результат роботи програми:

Rezyltat operaziji a+b: 0 1 2 3 4 5 6 7

 

 

Контрольні питання

1. Дайте визначення множини.

2. Як здійснюється перевірка на рівність, нерівність, підмножину, надмножину?

3. Яким методом можна перевірити входження елемента у множину?

4. Як об’єднати множини?

5. Що таке різниця множин?

6. Дайте визначення перетину множин.

7. Які оператори Ви використали при написанні програми?

 

Викладач ____________ М. О. Пашко