Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
5
Добавлен:
05.06.2015
Размер:
46.59 Кб
Скачать

Л.В.Рибакова МОДУЛЬ № 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 ЗАПИТАННЯ.

  1. Як описуються множиннi типи та змiннi у цих типах?

Як означується конструктор множини? Для чого вiн використовується?

  1. Якi операцiї виконуються над множинами ?

  2. Якi вiдношення означенi для даного типу "множини"?

  3. Як одержати доступ до елемента множини ?

  4. Чи можна використовувати множини, складенi з дiйсних чисел? Масивiв? Записiв?

  5. Як органiзувати виведення та введення множини ?

4

Соседние файлы в папке Labtp_1s