- •Міністерство освіти і науки Україні
- •Закарпатський державний університет
- •Природничо-гуманітарний коледж
- •Методичні вказівки
- •До лабораторних робіт по дисципліні
- •Лабораторна робота № 1. Лінійні програми.
- •Короткі теоретичні відомості.
- •Структура програми.
- •Приклад розділу змінних
- •Тип даних Integer .
- •Тип даних Real.
- •Тип даних Сhar.
- •Тип даних Boolean (логічний).
- •Хід роботи
- •Контрольні питання.
- •Варіанти завдань.
- •Лабораторна робота № 2. Оператори повторення.
- •Короткі теоретичні відомості.
- •1. Оператор циклу з параметром.
- •2. Циклічні програми. Складність циклічної програми.
- •3. Оператори повторення While і Repeat.
- •4. Обмежені типи.
- •5. Мітки. Оператор переходу. Застосування оператора переходу для дострокового виходу з циклу.
- •Хід роботи.
- •Контрольні питання.
- •Лабораторна робота № 3. Масиви. Алгоритми сортування та пошуку.
- •Короткі теоретичні відомості.
- •1. Складні (складені) типи.
- •2. Регулярний тип. Масиви.
- •3. Пошук елемента в масиві.
- •4. Постановка задачі сортування.
- •Хід роботи.
- •Контрольні питання.
- •Лабораторна робота № 4 Рядки та засоби їх обробки. Короткі теоретичні відомості.
- •Хід роботи
- •Контрольні питання.
- •Лабораторна робота №5 Процедури та функції. Короткі теоретичні відомості.
- •1. Опис процедур.
- •2.Формальні параметри. Локальні і глобальні об’єкти.
- •3. Оператор процедури. Фактичні параметри.
- •4. Функції.
- •5. Рекурсивно-визначені процедури і функції.
- •Хід роботи
- •Контрольні питання.
- •Лабораторна робота № 5. Складні типи даних: записи. Короткі теоретичні відомості.
- •1. Записи.
- •2 .Записи з варіантами.
- •3.Оператор приєднання.
- •Хід роботи.
- •Контрольні питання.
- •Лабораторна робота № 6. Множини. Короткі теоретичні відомості.
- •1.Множинний тип.
- •2.Конструктор множини.
- •3. Операції і відношення.
- •4. Застосування множин у програмуванні.
- •Хід роботи.
- •Контрольні питання.
- •Лабораторна робота № 7 Файли. Управління файлами. Короткі теоретичні відомості.
- •Хід роботи.
- •Контрольні питання.
Лабораторна робота № 6. Множини. Короткі теоретичні відомості.
1.Множинний тип.
Ще одним складним стандартним типом даних, визначеним у мові Pascal, є множинний тип. Значенням множинного типу даних є множина, що складається з однотипних елементів. Тип елемента множини називається базовим типом. Базовим типом може бути скалярний або обмежений тип. Таким чином, множина значень множинного типу - це множина всіх підмножин базового типу, враховуючи і порожню множину. Якщо базовий тип містить N елементів, відповідний множинний тип буде містити 2N елементів.
Характерна відміна множинного типу - визначення на ньому найбільш поширених теоретико-множинних операцій і відношень. Це робить множинний тип схожим на прості типи даних. Множинні типи описуються в розділі типів наступним чином:
Type < ім’я типу > = Set of < базовий тип >
М
ножинний
тип
Наприклад,
а) Type Beta = Set of 100..200;
б) Type Glas = Set of char ;
в) Type Color = (red, orange, yellow, green, light_blue, blue, violet);
Paint = Set of Color;
г) Type TwoDigNum = Set of 10..99;
Var A, B: Beta;
llet, flet: Glas;
last, first: Paint;
Sinit: TwoDigNum;
2.Конструктор множини.
Множини будуються зі своїх елементів за допомогою конструктора множин. Конструктор представляє собою перелік через кому елементів множини або відрізків базового типу, взятий у дужки [ , ]. Порожня множина позначається через [ ].
конструктор
Елемент
конструктора
Наприклад:
[ ] - порожня множина
[2, 5 ..7] - множина {2, 5, 6, 7}
['A'..'Z', 'O'..'9'] - множина, що складається з всіх великих латинських букв і цифр
[i + j .. i + 2*j] - множина, що складається з всіх цілих чисел між i + j і i + 2j
Відмітимо, що якщо у виразі [v1..v2] v1 > v2, множина [v1 .. v2] - порожня.
3. Операції і відношення.
До операндів - однотипних множин А і В, можна застосувати такі дії:
А + В - об’єднання А В
А * В - перетин А В
А - В - різниця А \ В
Між А і В визначені також відношення порядку і рівності
А = В, А <> В, А < В, А <= В, А > В, А >= В;
Відношення порядку інтерпретуються як теоретико-множинні включення.
Якщо А - множина і х - елемент базового типу, то визначено відношення належності х in A - x належить A ( x A ).
Кожне з відношень, описаних вище, по суті є операцією, результат якої має тип Boolean. Таким чином, якщо Init - змінна типу Boolean, можливе присвоювання Init := A < B. Можливі такі порівняння ( А = В ) = ( С = D ).
Наявність операцій над множинами дозволяє застосовувати в програмах оператори присвоювання, в лівій частині яких стоїть змінна типу множини, а в правій - вираз того ж типу. Наприклад:
А := А * [1 .. 10] + B ; B := (А + B)*['A' .. 'Z'] ;
4. Застосування множин у програмуванні.
При реалізації мови розміри множин завжди обмежені константою, що залежить від реалізації. Звичайно ця константа кратна довжині машинного слова. Це відбувається тому, що множини реалізовані у вигляді логічних (двійкових) векторів наступним чином: кожній координаті двійкового вектора однозначно відповідає один з елементів базового типу. Якщо елемент а належить множині А, що представляється, то значення координати вектора, відповідне а, дорівнює 1. У протилежному випадку значення відповідної координати дорівнює 0.
Наприклад, якщо множина А описана як Set of 0..15, то його представляє 16-ти мірний двійковий вектор, координати якого перенумеровані від 0 до 15, і і-тій координаті відповідає елемент і базового типу.
Базовий тип : 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Двійковий вектор : 0 0 1 1 0 1 0 1 0 0 0 1 0 1 0 0
Представлена множина : A = [2, 3, 5, 7, 11, 13]
Такий спосіб реалізації дозволяє швидко виконувати операції над множинами і перевірки теоретико-множинних відношень. Тому, наприклад, замість
For X := 'A' to 'Z' do
If (X ='A') or (X ='E') or (X ='I') or (X ='O') or (X='U')
then Statement1
else Statement2
краще написати
For X := 'A' to 'Z' do
If X in ['A','E','I','O','U']
then Statement1
else Statement2
Остання форма запису не тільки краще читається, але й значно швидше обчислюється.
У системі Turbo-Pascal максимальна кількість елементів у множині дорівнює 256. Таким чином, у якості базового типу можна вибирати, наприклад, Char або відрізок 0..255.
Приклад. Побудувати множину простих чисел з відрізку 2..n (n 255).
Program EratosfenGrating;
Const n = 255;
Var Grating, Prime: set of 2 .. n ;
i, Min : integer ;
Begin
Grating := [2 .. n] ; Prime := [] ; Min := 2; {ініціалізація}
While Grating <> [] do begin {основний цикл}
While not(Min in Grating) do {пошук найменьшого елементу }
Min := Min + 1;
Prime := Prime + [Min] ; {доповнення множини простих чисел}
For i := 1 to n div Min do {виключення кратних чисел}
Grating := Grating - [i*Min];
end;
Writeln('Primes: '); {виведення множини простих чисел}
For i := 1 to n do
If i in Prime then write(i, ', ')
End.
Відмітимо, що доступ до елемента множини у мові не передбачений. У цьому - ще одна якісна відміна множинного типу від інших типів даних. Тому наприклад, для виведення множини Prime доводиться перебирати всі елементи базового типу і кожний із них перевіряти на належність Prime.
