КАТЕГОРИИ:
АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
Другие операции над множествами ⇐ ПредыдущаяСтр 2 из 2 Над множествами можно выполнять четыре операции сравнения: =, <>, >=, <=. Два множества A и B равны (A = B), если каждый элемент множества A является элементом множества B и наоборот. Два множества A и B не равны (A <> B), если они отличаются хотя бы одним элементом. Множество A является подмножеством множества B (A <= B, или B >= A), если каждый элемент из A присутствует в B. Имеется также возможность выяснить, принадлежит ли данный элемент некоторому множеству. Для этого служит операция in. Пусть A – множество элементов некоторого базового типа, а x – переменная (константа, выражение) этого типа. Тогда выражение x in A истинно, если значение x является элементом множества A. Все операции сравнения множеств, а также операция in возвращают логическое значение true или false. В сложных выражениях над множествами операции имеют следующие приоритеты: 1. * 2. +, - 3. =, <>, <=, >=, in
Задача 1. В городе имеется n высших учебных заведений, которые производят закупку компьютерной техники. Есть шесть компьютерных фирм: «Диалог», «Avicom», «Нэта», «Сервер», «Декада», «Dega.ru». Ответить на следующие вопросы: Решим задачу с использованием множеств. Для удобства дальнейших манипуляций в порядке следования занумеруем компьютерные фирмы, начиная с единицы. Занесём информации о месте закупок компьютеров каждым из вузов в отдельное множество. Ответ на первый вопрос можно получить, выполнив пересечение всех таких множеств. Ответ на второй вопрос – результат объединения множеств. И, наконец, на последний – разность множества всех фирм и множества фирм, где хотя бы один вуз делал покупки. 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); writelnend; {Процедура, дающая ответ на первый вопрос}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.
Задача 2. Сгенерировать n множеств (нумерацию начать с 1). Вывести элементы, которые входят во все множества с номерами, кратными трём, но не входят в первое множество. program ex_set_2;type mn = set of byte; v = array[1..30] of mn;{процедура ввода информации в очередное множество}procedure vvod(var a: mn);var i, n, vsp: byte;begin a:= []; n := 1 +random(200); for i := 1 to n do begin vsp:= random(256); a:=a+[vsp] end;end;{процедура вывода элементов множества}procedure Print(a : mn);var i: byte;begin for i := 0 to 255 do if i in a then write(i:4); writelnend; {Процедура, дающая ответ на вопрос}procedure Rez(a: v; n : byte; var b : mn);var i : byte;begin b := [0..255]; i:= 3; while i <= n do begin b := b * a[i]; i := i + 3 end; b := b - a[1]end; var a: v; n, i : byte; c : mn; begin randomize; write('Сколько множеств? '); readln(n); for i := 1 to n do begin vvod(a[i]); print (a[i]) end; Rez(a, n, c); Print(c);end.
Задача 3. Дана строка. Сохранить в ней только первые вхождения символов, удалив все остальные. 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.
|