Лабораторна робота № 1.
Операції над множинами
Мета роботи:
Закріплення теоретичних знань та отримання практичних навичок виконання операцій над множинами.
Програма роботи:
1. Вивчити теорію.
2. Розробити програму на алгоритмічній мові, реалізовує операції над множинами.
3. Виконати обчислювальні експерименти.
Використовувані програмно-технічні засоби:
1. Персональний комп'ютер типу IBM PC.
2. Turbo Pascal 7.0.
Коротка теорія:
Безліч - сукупність об'єктів однієї природи.
Операції над множинами.
Припустимо, існують два безлічі А і В, належать якомусь універсальному безлічі U. Тоді:
1. Об'єднання множин.
Об'єднанням або сумою множин А і В називається безліч С, що складається з елементів, що входять в обидва безлічі.
2. Перетин множин.
Перетином множин А і В називається множина С, що складається з елементів, що належать обом множинам.
3. Різниця множин.
Різницею множин А і В називається множина С, містить ті і тільки ті елементи множини А, які не належать безлічі В.
4. Симетрична різниця множин.
симетрично різницею множин А і В називається безліч С, що містить елементи множини А, що не входять в безліч В, і елементи множини В, що не входять в безліч А.
5. Декартового добутку множин. </p>
декартового добутку множин А і В називається безліч С, що містить впорядковані пари елементів множин, причому перший елемент пари належить безлічі А, другий - множині В.
Математична постановка задачі:
Реалізувати на одній з мов програмування програму, здатну виконувати наступні операції над множинами: об'єднання, перетин, різниця, симетрична різниця, декартовій твір.
Опис методу рішення задачі:
Опис програми:
Дана програма, написана на мові Паскаль, починається з розділу змінних, повний список яких представлений у Таблиці 1. В основі алгоритму програми лежать п'ять процедур, кожна з яких відповідає за закріплену за нею операцію над безліччю. (Див. Таблицю 2) Вибір необхідної операції відбувається шляхом використання оператора case.
Робота програми починається з виведення повідомлення про необхідності ввести кількість елементів першого і другого множин. Далі програма вимагає ввести елементи множин, закінчуючи введення кожного елемента натисканням клавіші Enter. Після введення елементів множин необхідно вибрати операцію, яка повинна бути виконана над ними. Результат виконання операції виводиться на екран.
Таблиця 1.
Список ідентифікаторів змінних:
Ідентифікатор
Тип
Застосування
Zoopark1
Zoopark1: array [1 .. 33] of string
Зберігає елементи першого зоопарку
Zoopark2
Zoopark2: array [1 .. 33] of string;
Зберігає елементи другого зоопарку
Rezultat
rezultat: array [1 .. 75] of string;
Зберігає результат виконання операції
Zpark1
zpark1: array [1 .. 33] of string;
Для тимчасового зберігання першого зоопарку
zpark2
zpark2: array [1 .. 33] of string;
Для тимчасового зберігання другий зоопарк
x, y, i, j, d, t, k
integer
Для організації циклів
V
integer
Розмір першого безлічі
w
integer
Розмір другого безлічі
wiborka
char
Зберігає номер вибраної операції
Таблиця 2.
Список процедур:
Ім'я процедури
Формальні параметри
Виклик процедури
Застосування
obedinenie
немає
obedinenie
Операція об'єднання множин
peresechenie
немає
peresechenie
Операція перетину множин
Ім'я процедури
Формальні параметри
Виклик процедури
Застосування
raznost
немає
raznost
Операція різниці множин
simmetrichnaya_raznost
немає
simmetrichnaya_raznost
Операція симетричної різниці множин
dekartovoe_proizvedenie
немає
dekartovoe_proizvedenie
Операція декартового добутку множин
Висновок:
У результаті всієї проведеної роботи ми закріпили теоретичні знання та отримали практичні навички виконання операцій над множинами, також нами було розроблено програму на мові Паскаль, реалізує операції над множинами: об'єднання, перетин, різниця, симетрична різниця, декартовій твір.
Додаток
Лістинг програми:
program giwotnie_zooparka;
uses CRT;
label menu;
var
zoopark1: array [1 .. 33] of string;
zoopark2: array [1 .. 33] of string;
zpark1: array [1 .. 33] of string;
zpark2: array [1 .. 33] of string;
j, i: integer;
x, y: integer;
d, k, t: integer;
v, w: integer;
str: string;
rezultat: array [1 .. 75] of string;
wiborka: char;
procedure peresechenie;
begin
for x: = 1 to v do
for y: = 1 to w do
begin
if zoopark1 [x] = zoopark2 [y] then
rezultat [x]: = zoopark2 [y];
end;
clrscr;
writeln ('Rezultat rawen->> ');
for i: = 1 to v + w do
begin
if rezultat [i] <> '' then
writeln (rezultat [i]);
end;
end;
procedure obedinenie;
begin
for x: = 1 to v do
for y: = 1 to w do
begin
if zoopark1 [x] = zoopark2 [y] then
zoopark1 [x]: = '';
end;
for j: = 1 to v do
begin
rezultat [j]: = zoopark1 [j];
end;
t: = 0;
for d: = j +1 to v + w do
begin
t: = t +1;
rezultat [d]: = zoopark2 [t];
end;
clrscr;
writeln ('Rezultat rawen->> ');
for i: = 1 to v + w do
begin
if rezultat [i] <> '' then
writeln (rezultat [i]);
end;
end;
procedure simmetrichnaya_raznost;
begin
for x: = 1 to v do
for y: = 1 to w do
begin
if zoopark1 [x] = zoopark2 [y] then