русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Отношения и операции над множествами


Дата добавления: 2015-08-14; просмотров: 2114; Нарушение авторских прав


Математика Pascal

В Pascal определены операции над множествами:

1. Объединение Математика: Pascal: Объединением двух множеств называется множество элементов принадлежащих обоим множествам. Пример: ['A', 'B'] + ['C', 'D'] = ['A', 'B', 'C', 'D']    
B
A

2. Пересечение Математика: Pascal: Пересечением двух данных множеств называется множество элементов принадлежащих одновременно и первому и второму множеству, общие элементы. Пример: ['A', 'B']*['C', 'D'] = [];

 

 

A
C
B

3. Исключение Математика: Pascal: Вычитанием двух множеств называется множество, состоящее из тех элементов первого множества, которые не являются элементами второго множества. Пример: ['A', 'B'] – ['C', 'D'] = ['A', 'B'];

 

A
B

 

 

Над значениями множественного типа определены и некоторые операции отношения. Операндами операций над множественными значениями в общем случае являются множественные выражения. Среди операций отношения над значениями множественного типа особое место занимает специальная операция проверки вхождения элемента во множества, обозначаемая служебным словом in. В отличие от остальных операций отношения, в которых значения обоих операндов относятся к одному и тому же множественному типу значений, в операции in первый операнд должен принадлежать базовому типу, а второй – множественному типу значений, построенному на основе этого базового типа. Результатом операции отношения, как обычно, является логическое значение (true или false).



‘a’ in glasn значение операции true;

‘o’ in soglasn значение операции false;

Операция сравнения на равенство множественных типов Паскаля. Множества считаются равными (эквивалентными), если все элементы одного множества присутствуют в другом и наоборот. Для операции сравнения на равенство или неравенство используются символы ‘=’ и ‘<>’.

A:= [2,1,3];

D:= [1,3,2];

Тогда операция A=D имеет значение true, а операция A<>D имеет значение false.

Проверка включения. Одно множество считается включенным в другое (одно множество является подмножеством другого), если все его элементы содержатся во втором множестве. Обратное утверждение может быть и несправедливым. Операции проверки включения обозначаются ‘<=’ и ‘>=’.

letter >= glasn;

soglan <= letter;

Для добавления множеству нового элемента в Паскаль есть операция Include:

Include(<множество>, <элемент>)

Для удаления из множества какого-либо элемента можно воспользоваться операцией Exclude:

Exclude(<множество>, <элемент>)

Необходимо помнить, что добавляемый/удаляемый элемент должен быть тождественного множеству типа.

 

Все значения множества представляются в памяти последовательностями битов одинаковой длины. За каждое значение базового типа "отвечает" один бит. Если множество содержит некоторый элемент, в "ответственном" за него бите хранится 1, если не содержит - хранится 0.

Внутреннее представление X

x:=[]; 000000000000000>

x:=[2,3,5]; 011010000000000>

x:=[1..15]; 111111111111111>

Операции над множествами сводятся к поразрядным логическим операциям над последовательностями битов, пример, объединение множеств выполняется путем поразрядного логического сложения битов:

x:=[2,3,5]; 011010000000000>

y:=[3,5,7,8]; 001010110000000>

z:=x+y; 011010110000000>

Поразрядные документы входят в набор команд процессора ЭВМ, поэтому выполняется быстро.

Средства работы с множествами позволяют в некоторых случаях сократить программы и сделать их более наглядными и эффективными за счет уменьшения числа проверок.

Примеры

Пример 1. Дана символьная строка. Подсчитать в ней количество знаков препинания (. - , ; : ! * ?).

Program P1;

Var S: String; I,K: Byte;

Begin

ReadLn(S); K:=0;

For I:=1 To Length(S) Do

If S[I] In ['.','-',',',';',':', '!', '*','?']

Then K:=K+1;

WriteLn('Число знаков препинания равно',К)

End.

Пример 2. Дана строка. Сохранить в ней только первые вхождения символов, удалив все остальные.

program ex_set_3;

var m : set of char;

s : string; i : byte;

begin

write('Введите строку: ');

readln(s);

m :=[];

i := 1;

while i <= length(s) do

if s[i] in m then delete(s, i, 1)

else begin m:=m+[s[i]]; i := i + 1 end;

writeln(‘результат: ’,s)

end.

Пример 3.Дан текст на русском языке. Найти количество согласных букв в последнем слове.

Program mn_7;

uses crt;

type let=' а'..'я';

var sogl:set of let;

s:string;

I,k:byte;

begin

writeln('введите текст, заканчивающийся точкой');

readln(s);

if s[length(s)]<>'.' then s:=s+'.';

sogl :=['п','ф','х','т','с','к','ч','ш','щ','ц', 'б','в','г','д','ж','з','л','м','н','р'];

i:= length(s);

while s[i]<>' ' do begin if s[i] in sogl then k:=k+1; i:=i-1;end;

writeln(k);

end.

Пример 4. В городе имеется n высших учебных заведений, которые производят закупку компьютерной техники. Есть шесть компьютерных фирм: «Диалог», «Avicom», «Нэта», «Сервер», «Декада», «Dega.ru». Ответить на следующие вопросы:

1) в каких фирмах закупка производилась каждым из вузов?

2) в каких фирмах закупка производилась хотя бы одним из вузов?

3) в каких фирмах ни один из вузов не закупал компьютеры?

Решим задачу с использованием множеств. Для удобства дальнейших манипуляций в порядке следования занумеруем компьютерные фирмы, начиная с единицы. Занесём информации о месте закупок компьютеров каждым из вузов в отдельное множество.

Ответ на первый вопрос можно получить, выполнив пересечение всех таких множеств.

Ответ на второй вопрос – результат объединения множеств.

И, наконец, на последний – разность множества всех фирм и множества фирм, где хотя бы один вуз делал покупки.

program ex_set_1;

type firma = set of 1..6;

v = array[0..20] of firma;

const f: array [1..6] of string[10] = ('Диалог', 'Avicom', 'Нэта', 'Сервер', 'Декада', 'Dega.ru');

 

{процедура ввода информации о закупке компьютеров в очередной фирме}

procedure vvod(var a: firma);

var i: byte; ans: 0..1;

begin

a:= [];

for i := 1 to 6 do

begin

Write('Вуз покупал компьютеры в фирме ', f[i], ' (1 - да, 0 - нет)? '); ReadLn(ans);

if ans = 1 then a:=a+[i]

end;

end;

 

{процедура вывода элементов массива, номера которых содержатся в множестве}

procedure Print(a : firma);

var i: byte;

begin

for i := 1 to 6 do if i in a then write(f[i]:10);

writeln

end;

 

{Процедура, дающая ответ на первый вопрос}

procedure Rez1(a: v; n : byte; var b : firma);

var i : byte;

begin

b := [1..6];

for i := 0 to n-1 do b := b * a[i];

end;

 

{Процедура, дающая ответ на второй вопрос}

procedure Rez2(a: v; n : byte; var b : firma);

var i : byte;

begin

b := [];

for i := 0 to n-1 do b := b + a[i];

end;

 

var a: v; n, i : byte; c : firma;

begin

write('Сколько вузов делали закупку? '); readln(n);

for i := 0 to n-1 do vvod(a[i]);

Rez1(a, n, c);

writeln('Каждый из вузов закупил компьютеры в фирмах: '); Print(c);

Rez2(a, n, c);

writeln('Хотя бы один из вузов закупил компьютеры в фирмах: '); Print(c);

writeln('Ни один из вузов не закупил компьютеры в фирмах: '); Print([1..6]-c);

end.

Пример 5. Из множества целых чисел 1..20 выделить: множество чисел, делящихся без остатка на 6; множество чисел, делящихся без остатка или на 2, или на 3.

program mnog2;

const n=20;

var n2,n3,n6,n23: SET OF 1..N;

k:1..N;

begin

n2:=[ ]; n3:=[ ];

for k:=2 to n do

begin

if (k mod 2)=0 then n2:=n2+[k];

if (k mod 3)=0 then n3:=n3+[k];

end;

n6:=n2*n3;

n23:=n2+n3;

writeln('на 6 делятся числа:');

for k:=1 to n do

if k in n6 then write(k:3);

writeln;

writeln('на 2 или на 3 делятся числа:');

for k:=1 to n do

if k in n23 then write(k:3);

writeln

end.

Пример 6.Разгадывание ребусов.

+ МУХА

МУХА

СЛОН

Каждая буква - это цифра, разным буквам соответствуют разные цифры. Необходимо заменить буквы цифрами так, чтобы получилось верное равенство. Найти все решения. Для решения этой задачи используется метод перебора с возвратом. Используем множество S1 для хранения цифр слова МУХА, причем будем вносить в него цифры последовательно, учитывая уже внесенные цифры. Начальное значение S1 - пустое множество. после выбора всех цифр первого слова создаем его числовой эквивалент и числовой образ слова СЛОН. Выделяем цифры СЛОНа (множество S2)и если слова состоят из разных цифр (то есть пересечение S1 и S2 пустое) и все цифры СЛОНа разные (то есть пересечение множеств цифр тоже пустое), то выводим решение на экран. Если же нет, то идет возврат - удаляем из множества S1 последнюю внесенную цифру и пытаемся выбрать еще одно значение. Таким образом, мы перебираем все возможные варианты и выводим на экран только те, которые удовлетворяют равенству.

Заметим, что значение буквы М в слове МУХА может иметь значения от 1 до 4, а буква А в этом же слове не может быть равна 0.

Program Rebus;

Type

MN = set of 0..9;

Var

m, u, h, a : 0..9;

n1, n2 : Integer;

s, l, o, n : 0..9;

S1, S2 : MN;

Procedure Print(x, y : Integer);

Begin

writeln(x:5);

writeln('+');

writeln(x:5);

writeln(' ');

writeln(y:5);

End;

Begin

S1 := [ ];

S2 := [ ];

for m := 1 to 4 do

begin

S1 := S1+[m];

for u := 0 to 9 do

if Not(u in S1)

then

begin

S1 := S1+[u];

for h := 0 to 9 do

if Not (h in S1)

then

begin

S1 := S1+[h];

for a := 1 to 9 do

if Not (a in S1)

then

begin

S1 := S1+[a];

n1 := 1000*m+100*u+10*h+a;

n2 := 2*n1;

s := n2 div 1000;

l :=n2 div 100 mod 10;

o := n2 div 10 mod 10;

n := n2 mod 10;

S2 := [s, l, o, n];

if (S1*S2=[ ]) and ([s]*[l]*[o]*[n]=[ ])

then

Print (n1, n2);

S1 := S1-[a];

end;

S1 := S1-[h];

end;

S1 := S1-[u];

end;

S1 := S1-[m];

end;

End.

Контрольные вопросы

1. Что понимают под множеством в Pascal?

2. Что такое базовый тип множества?

3. Как задаются постоянные множества (множества-константы) в Pascal?

4. Напишите все способы описания множеств в Pascal?

5. Возможен ли прямой доступ к элементам множества?

6. Перечислите операции над множествами.

7. Что называется объединением множеств. Приведите пример.

8. Что называется пересечением множеств. Приведите пример.

9. Что называется исключением множеств. Приведите пример.

10. Перечислите операции отношения допустимые над множествами. Охарактеризуйте их.

11. С помощью какой операции поверяют вхождение элемента во множество?

12. Как значения множества представляются в памяти?

13. К чему сводятся операции над множествами?

14. Какая операция предназначена для добавления множеству нового элемента? Ее синтаксис.

15. Какая операция предназначена для удаления из множества нового элемента? Ее синтаксис.

Содержание отчета:

1. Лабораторная работа № 4

2. Тема лабораторной работы.

3. Цель работы.

4. Краткие теоретические сведения (в виде ответов на контрольные вопросы).

5. Решение задач.

6. Вывод о проделанной работе.



<== предыдущая лекция | следующая лекция ==>
Теоретические сведения | Система изучения данной темы по классам


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.133 сек.