Проверка на принадлежность к множеству

Бинарная операция сравнения со знаком IN . Первый операнд – элемент множества, второй операнд множество. Результат типа BOOLEAN - TRUE, если элемент принадлежит множеству, FALSE в противном случае.

Синтаксис операции: <элемент множества> in <множество>

Синтаксическое ограничение: тип первого операнда совпадает с типом компонента второго операнда.

2.3. Операция определения адреса

Унарная операция со знаком @. Операнд переменная множественного типа. Результат - указатель на участок оперативной памяти, в котором располагается переменная.

Задача обработки множеств

Постановка задачи

Было куплено 2 коробки одинаковых цветных карандашей. Какое-то время ими пользовались. Определить карандаши какого цвета имеются в наличии, какого отсутствуют, какого имеются в двух экземплярах.

Каждую из коробок можно представить в виде множеств из цветов возможных карандашей. Тогда нам потребуется вычислить три множества:

- множество наличных цветов карандашей (определяется как объединение двух исходных множеств);

- множество отсутствующих карандашей (определяется как вычитание из множества всех возможных цветов множества наличных цветов);

- множество дублирующих цветов карандашей (определяется как пересечение двух исходных множеств).

Структура программы

Проверка на принадлежность к множеству - student2.ru

Рис. 20.10. - Структурная диаграмма программы

Выделим в поставленной задаче три подзадачи:

- ввод с клавиатуры множества (содержимого коробки карандашей);

- вывод на экран содержимого множества из карандашей;

- вычисление множеств наличных, отсутствующих и дублирующих карандашей.

Структурная диаграмма программы представлена на рис. 20.10

Разработка подпрограммы ввода множества

Спецификация

1. Назначение: ввод с клавиатуры значения множества, элементами которого являются названия цветных карандашей

2. Имя: read_mn

3. Вид: процедура

4. Перечень параметров:

Таблица 20.1. Перечень параметров

Статус Назначение Имя Тип Вид
Выход Формируемое множество n tkorobka параметр-переменная

type

{названия возможных цветов карандашей}

tpalitra = (krasn, gelt, zelen, sini, korichn, chern);

tkorobka = set of tpalitra;{тип информационной модели коробки карандашей}

5. Заголовок: procedure read_mn(var n:tkorobka);

Метод решения

Суть метода решения заключается в том, что к исходному пустому множеству последовательно добавляются возможные наличные элементы (объединение множеств)

1. n:= Æ

2. " i Î { krasn, gelt, zelen, sini, korichn, chern }:если otvet='включить i в множество'Þn:=nÈ{i}

Информационная модель

Таблица 20.2. Информационная модель

Назначение Имя Тип
Очередной цвет i tpalitra
Ответ пользователя (да - включать/нет – не включать элемент) otvet char

type tpalitra = (krasn, gelt, zelen, sini, korichn, chern);

В алгоритме используется глобальная константа – массив с названиями цветов карандашей

const colors:array[tpalitra]of string=('красный', 'желтый', 'зеленый', 'синий',
'коричневый', 'черный');

Программная модель

procedure read_mn(var n:tkorobka);

var i:tpalitra;

otvet:char;

begin

n:=[];{коробка пуста - пустое множество}

{перебор возможных цветов}

for i:=krasn to chern do

begin

writeln('Есть ',colors[i],' карандаш? Ответьте: д/н');

readln(otvet);

if (otvet='Д')or(otvet='д')or(upcase(otvet)='L') then

begin

n:=n+[i];{добавление элемента в множество}

writeln(colors[i],' карандаш находится в коробке')

end

else writeln(colors[i],' карандаш отсутствует в коробке')

end

end;

Разработка подпрограммы вывода множества

Спецификация

1. Назначение: вывод на экран значения множества, элементами которого являются названия цветных карандашей

2. Имя: write_mn

3. Вид: процедура

4. Перечень параметров:

Таблица 20.3. Перечень параметров

Статус Назначение Имя Тип Вид
Вход Выводимое множество n tkorobka параметр-константа

type

{названия возможных цветов карандашей}

tpalitra = (krasn, gelt, zelen, sini, korichn, chern);

tkorobka = set of tpalitra;{тип информационной модели коробки карандашей}

5. Заголовок: procedure write_mn(const n:tkorobka);

Метод решения

1. Обнулить счетчик выведенных элементов k:= 0

Проверка на принадлежность к множеству - student2.ru Проверка на принадлежность к множеству - student2.ru 2. " i Î { krasn, gelt, zelen, sini, korichn, chern }:если i Î n Þ вывод (i)

k:=k+1

Проверка на принадлежность к множеству - student2.ru 3. Если k=0 Þ вывод ('множество пусто')

Информационная модель

Таблица 20.4. Информационная модель

Назначение Имя Тип
Очередной цвет i tpalitra
Количество выведенных значений k integer

type tpalitra = (krasn, gelt, zelen, sini, korichn, chern);

В алгоритме используется глобальная константа – массив с названиями цветов карандашей const colors:array[tpalitra]of string=('красный','желтый','зеленый','синий',
'коричневый','черный');

Программная модель

procedure write_mn(const n:tkorobka);

var k:integer;

i:tpalitra;

begin

k:=0;

for i:=krasn to chern do

if i in n then

begin

if k<>0 then write(', ');

k:=k+1;

write(colors[i])

end;

if k=0 then writeln('нет карандашей')

else if k=1 then writeln(' карандаш')

else writeln(' карандаши')

end;

Наши рекомендации