Лабораторная работа № 1.
Операции над множествами
Цель работы:
Закрепление теоретических знаний и получениепрактических навыков выполнения операций над множествами.
Программа работы:
1. Изучить теорию.
2. Разработать программу на алгоритмическом языке,реализующую операции над множествами.
3. Выполнить вычислительные эксперименты.
Используемые программно-технические средства:
1. Персональный компьютер типа IBM PC.
2. Turbo Pascal 7.0.
Краткая теория:
Множество — совокупность объектов одной природы.
Операции над множествами.
Предположим, существуют два множества А и В,принадлежащие какому-то универсальному множеству U.Тогда:
1. Объединение множеств.
Объединением или суммой множеств А и В называетсямножество С, состоящее из элементов, входящих в оба множества.
2. Пересечение множеств.
Пересечением множеств А и В называется множествоС, состоящее из элементов, принадлежащих обоим множествам.
3. Разность множеств.
Разностью множеств А и В называется множество С,содержащее те и только те элементы множества А, которые не принадлежатмножеству В.
4. Симметричная разность множеств.
Симметричной разностью множеств А и В называетсямножество С, содержащее элементы множества А, не входящие во множество В, иэлементы множества В, не входящие во множество А.
5. Декартовое произведение множеств.
Декартовым произведением множеств А и В называетсямножество С, содержащее упорядоченные пары элементов множеств, причем первыйэлемент пары принадлежит множеству А, второй — множеству В.
Математическая постановка задачи:
Реализовать на одном из языков программированияпрограмму, способную выполнять следующие операции над множествами: объединение,пересечение, разность, симметричная разность, декартовое произведение.
Описание метода решения задачи:
/>
/>/> /> /> /> /> /> /> /> />
Описание программы:
Данная программа, написанная на языке Паскаль,начинается с раздела переменных, полный список которых представлен в Таблице 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] ofstring;
zoopark2: array [1..33] ofstring;
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] ofstring;
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 (‘Rezultatrawen->>’);
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
begin
zoopark1[x]:=’ ‘;
zoopark2[y]:=’ ‘;
end;
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 (‘Rezultatrawen->>’);
for i:=1 to v+w do
begin
if rezultat[i] ‘ ‘ then
writeln (rezultat[i]);
end;
end;
procedure raznost;
begin
for x:=1 to v do
begin
rezultat[x] :=zoopark1 [x] ;
for i:=1 to v do
for j:=1 to w do
begin
if rezultat[i]=zoopark2[j] then
rezultat[i]:=’ ‘;
end;
clrscr;
writeln (‘Rezultat rawen->>’);
for i:=1 to w do
begin
if rezultat[i] ‘ ‘ then
writeln (rezultat[i]);
end;
end;
end;
proceduredekartovoe_proizvedenie;
begin
i:=0;
for x:=1 to v do
for y:=1 to w do
begin
inc (i);
str:=’ ‘;
if zoopark1[x]zoopark2[y]then rezultat[i]:=zoopark1[x]+’ * ‘+zoopark2[y];
end;
clrscr;
writeln (‘Rezultatrawen->>’);
for i:=1 to v*w do
begin
if rezultat[i] ‘ ‘ then
writeln (rezultat[i]);
end;
end;
begin
clrscr;
textbackground(white);
textcolor(black);
writeln (‘Wwedite kolichestwogiwotnih 1 zooparka:’);
readln(v);
writeln (‘Wwedite kolichestwogiwotnih 2 zooparka:’);
readln(w);
write(‘Wwedite giwotnih 1zooparka ‘);
writeln(‘,w konce nagat Enter:’);
for k:=1 to v do
begin
readln (zoopark1[k]);
end;
write(‘Wwedite giwotnih 2zooparka ‘);
writeln(‘,w konce nagat Enter:’);
for i:=1 to w do
begin
readln (zoopark2[i]);
end;
for i:=1 to v do
zpark1[i] :=zoopark1[i];
for i:=1 to w do
zpark2[i] :=zoopark2[i];
menu:
writeln (‘Wwesti nomer operacii:’);
writeln (‘1->>Peresechenie’);
writeln (‘2->>Obedinenie’);
writeln (‘3->>Simmetricheskaraznost’);
writeln (‘4->>Raznost’);
writeln (‘5->>Dekartowoeproizwedenie’);
writeln (‘6->>Wihod’);
writeln (‘Wi Wibrali:’);
readln (wiborka);
case wiborka of
‘1’: peresechenie;
‘2’: obedinenie;
‘3’: simmetrichnaya_raznost;
‘4’: raznost;
‘5’: dekartovoe_proizvedenie;
‘6’: exit;
end;
readln;
clrscr;
for i:=1 to v*w do
rezultat[i]:= ‘ ‘;
for i:=1 to v do
begin
zoopark1[i]:= zpark1[i];
end;
for i:=1 to w do
begin
zoopark2[i]:=zpark2[i];
end;
goto menu;
end.
/>