Проверка на принадлежность к множеству
Бинарная операция сравнения со знаком IN . Первый операнд – элемент множества, второй операнд множество. Результат типа BOOLEAN - TRUE, если элемент принадлежит множеству, FALSE в противном случае.
Синтаксис операции: <элемент множества> in <множество>
Синтаксическое ограничение: тип первого операнда совпадает с типом компонента второго операнда.
2.3. Операция определения адреса
Унарная операция со знаком @. Операнд переменная множественного типа. Результат - указатель на участок оперативной памяти, в котором располагается переменная.
Задача обработки множеств
Постановка задачи
Было куплено 2 коробки одинаковых цветных карандашей. Какое-то время ими пользовались. Определить карандаши какого цвета имеются в наличии, какого отсутствуют, какого имеются в двух экземплярах.
Каждую из коробок можно представить в виде множеств из цветов возможных карандашей. Тогда нам потребуется вычислить три множества:
- множество наличных цветов карандашей (определяется как объединение двух исходных множеств);
- множество отсутствующих карандашей (определяется как вычитание из множества всех возможных цветов множества наличных цветов);
- множество дублирующих цветов карандашей (определяется как пересечение двух исходных множеств).
Структура программы
Рис. 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
2. " i Î { krasn, gelt, zelen, sini, korichn, chern }:если i Î n Þ вывод (i)
k:=k+1
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;