
Archive / 1_семетр-1 / Лабораторные работы / Labtp_1s / LabTp_7_mn
.docЛ.В.Рибакова МОДУЛЬ № 2 Лабораторна робота 11
ЛАБОРАТОРНА РОБОТА № 11
ТЕМА: М Н О Ж И Н И.
Мета роботи: Навчитися користуватися записним типом для розв'зку задач .
Теоретичні відомості.
МНОЖИНА - це структурований тип даних, який являє собою набiр взаємопов'язаних по якiй-небудь ознацi чи групi ознак об'єктiв, якi можна розгля-дати як одне цiле.
Тип елементу множини називається баэовим типом. Базовим типом може бути скалярний чи обмежений тип (крiм дiйсного типу).
Таким чином , множина значень множинного типу , це множина всiх пiдмножин базового типу, враховуючи i пусту множину.
Тип множинний описується у роздiлi типів наступним чином :
TYPE (iм'я)=SET OF (базовий тип)
Наприклад:
а)TYPE beta =SET OF integer;
б)TYPE glas =SET OF char;
в)TYPE color =(green,yellow,blue,red,black);
kraska =SET OF color;
г)TYPE number =SET OF 1,...,100;
Змiннi множинного типу описуються у роздiлi змiнних.
Наприкад:
а)var A,B:betta;
б)var lletter,fletter:glas;
в)var last,first:kraska;
г)var sinit:number;
Якщо у роздiлi типiв множинний тип не описаний, це можна зробити у роздiлi змiнних:
а)var A,B:SET OF integer;
б)var lletter,fletter:SET OF char;
в)var last,first:SET OF color;
г)var sinit:SET OF 1,...,100;
КОНСТРУКТОР МНОЖИНИ.
Множини будуються з своїх елементiв за допомогою конструктора множини. Конструктор представляє собою перечислення через кому елементiв множини чи вiдрiзкiв базового типу , заключене у квадратнi дужки [і]. Пуста мно-жина позначається через [].
Нaприклад:
[] (пуста множина)
[2,5..7] (множина{2,5,6,7})
['A'..'Z','0'..'9'](множина,складена з усiх
латинських букв i цифр)
[i+j..i+2*j] (множина ,складена з усiх цiлих
чисел мiж i+j та i+2*j)
Присвоєння змiнним значень iншого типу (базового типу) викликає програмне преривання..
ОПЕРАЦIЇ ТА ВIДНОШЕННЯ.
До операцiй над множинами А i В застосованi наступнi операцiї
A+B (об’єднання A B)
A*B
(перетин A
В)
A-B (рiзниця А - B)
Мiж A i B означенi такi вiдношення :
A=B , A<>B,
A<B, A<=B,
A>B, A>=B.
Якщо А - множина , та X - елемент базового типу , то означені вiдношення приналежностi X i А. Кожне з вiдношень являється операцiєю, результат якої належить до типу Boolean. Таким чином , якщо inite - змiнна типу Boolean , можливо присвоєння inite :=A<B. Можливi такi порiвняння (A=B)=(C=D).
Наявнiсть операцiї над множинами дозволяє використовувати у програмах оператори присвоєння , в лiвiй частинi яких стоїть змiнна типу множини, а в правiй - вираз того ж типу .
Наприклад:
А:=[]; A:= A+['r']; А:=A+B; B:=(A+B)*['A'..'Z'].
При реалiзацiї Турбо Паскаля розмiри множин завжди обмеженi конста-нтою , яка кратна довжинi машинного слова (0..255).
Для включення елементу до множини використовується стандартна функція :
Include(A,i),
де А – множина, що складається з елементів одного з дозволених для формування множин типів;
і – змінна, того ж типу, що і елементи множини А.
Операцiя IN використовується для перевiрки приналежностi якого-небудь значення данiй множинi. Використовується в умовних операторах.
Наприклад:
FOR X:='A' TO 'Z' DO
IF (X='A') OR (X='E') OR (X='I') OR(X='O') OR (X='U')
THEN S1
ELSE S2
краще написати
FOR X:='A' TO 'Z' DO
IF X in ['A','E','I','O','U']
THEN S1 ELSE S2.
Остання форма запису не тiльки читається, але й швидше обчислюється.
Приклад 1:
З множини 20 перших натуральних чисел видiлити пiдмножину чисел кратних 6 i множину чисел, кратних 2 чи 3.
Для рiшення цiєї задачi за допомогою ЕОМ введемо позначення:
N2-множина кратних 2;
N3-множина кратних 3;
N6-множина кратних 6;
N23-множина кратних 2 чи 3;
program primer
const n=20;
var N2,N3,N6,N23:set of integer;
k:integer;
begin
N2:[];N3:=[];
(*iнiцалiзацiя циклу*)
for k:=1 to n do
begin if kmod2=0 then n2:=n2+[k];
if kmod3=0 then n3:=n3+[k];
end;
n6:=n2*n3;
n23:=n2+n3;
writeln ('на 6 дiляться')
for k:=1 to N do
if k in N6 then write(k:3,'');
writeln('на 2 дiляться:')
for k:=1 to N do
if k in N2 THEN write(k:3,'');
writeln('на 3 дiляться:')
for k:=1 to n do
if k in N3 then write(k:3,'');
writeln('на 2 та 3 дiляться:');
for k:=1 to N do
if k in n23 then write (k:3,'');
end.
Приклад2
З множини натуральних чисел вiд 2 до N вибрати пiдмножину простих чисел.
Просте число - це те,що дiлиться на 1 та саме на себе. (1,2,3,5,7....)
Складне - те, що дiлиться i на iншi числа (4 - на 2, 6 - на 2 i на 3, 12 - на 3 i на 4,....)
Алгоритм
1. Вiзьмемо числа вiд 2 до N.
2. Виберемо тi, якi дiляться на iншi числа (для чого беремо число К i перевiряємо на ознаку дiлення без залишку на числа вiд 2 до К-1) i помiщаємо цi числа у множину складених чисел А.
3. Числа вiд 1 до N помiщаємо у множину В.
4. Видiляємо iз множини В пiдмножину С простих чисел (С:=B-A).
5. Виводимо на друк множину прости чисел використовуючи прийом попереднього прикладу.
ХIД РОБОТИ.
1. Написати програму контрольного завдання ,використовуючи множиннi типи даних.
2. Вiдредагувати i виконати цю програму для кiлькох значень константи, яка обмежує розмiри задачi.
3. Текст програми ,вхiднi значення константи i результати роботи програми оформити в зошитi для лабораторних робiт.
ЗАВДАННЯ.
1. З множини чисел [1..n] видiлити пiдмножину простих чисел виду 4k+1.
2. З множини чисел [1..n] видiлити пiдмножину повних квадратiв виду 6k+1.
3.З множини чисел [1..n] видiлити пiдмножину простих чисел виду к2+m2
4. З множини чисел [1..n] видiлити пiдмножину чисел виду р2, де p - просте .
5.З множини чисел [1..n] видiлити пiдмножину чисел виду p-q, де p та q простi.
6.З множини чисел [1..n] видiлити пiдмножину простих чисел p,таких що p+2-теж простi(пошук "близнюкiв").
7.З множини чисел [1..n] видiлити перетин пiдмножин –чисел виду 4k+1 та 5k+4.
8.З множини чисел [1..n] видiлити об'єднання пiдмножин чисел виду 4к+3 та 5k+2.
9.З множини простих чисел,менших нiж n видiлити пiдмножину чисел виду 2k+1 та 2k-1.
10.З множини чисел [1..n] видiлити пiдмножину простих чисел виду к2+1.
11.З множини чисел [1..n] видiлити пiдмножину складових чисел .
12.З множини чисел [1..n] видiлити пiдмножину складових чисел виду 6к+1.
13.З множини чисел [1..n] видiлити пiдмножину складових чисел виду к2+1.
14.З множини чисел [1..n] видiлити пiдмножену простих чисел виду p*q+1, де p та q - простi.
15.З множини чисел [1..n] видiлити пiдмножину простих чисел виду 6к+1 та складових чисел виду 6к+1.
16.З множини чисел [1..n] видiлити пiдмножину простих чисел p, таких що p+2,p-2 -складовi.
17.З множини чисел [1..n] видiлити перетин пiдмножин i рiзниця пiдмножин чисел виду 4к+3 та 5k+2.
18.З множини чисел [1..n] видiлити пiдмножину завершених чисел (число зветься завершеним ,якщо воно дорiвнює добутку своiх складових дiлителiв. Наприклад,6=3+2+1).
19.З множини чисел [1..n] видiлити пiдмножину складових чисел виду pq+1, де p i q -простi.
20.З множини чисел [1..n] видiлити пiдмножену простих чисел виду pq+1, де p i q -простi.
КОНТРОЛЬНI ЗАПИТАННЯ.
Як описуються множиннi типи та змiннi у цих типах?
Як означується конструктор множини? Для чого вiн використовується?
Якi операцiї виконуються над множинами ?
Якi вiдношення означенi для даного типу "множини"?
Як одержати доступ до елемента множини ?
Чи можна використовувати множини, складенi з дiйсних чисел? Масивiв? Записiв?
Як органiзувати виведення та введення множини ?