Получить множество всех продуктов, которые есть во всех магазинах - Turbo Pascal
Формулировка задачи:
Описать процедуру Nal(sh, A), которая по информации из массива Sh типа shop (Sh(i) – это множество продуктов, имеющихся в i-м магазине) присваивает параметру A типа assort множество всех продуктов, которые есть во всех магазинах.
Есть следующий код:
Решение задачи: «Получить множество всех продуктов, которые есть во всех магазинах»
textual
Листинг программы
uses crt;
type food = ( bread,butter,milk,meat,fish,salt,cheese,saucers,sugar,tea,cafe);
assort = set of food;
shop = array[1..20] of assort;
const n=5; //количество магазинов, раз нет в параметрах процедуры
//значит константа
k=10;//количесиво продуктов
pr:array[0..k] of string=('хлеб','масло','молоко','мясо','рыба','соль',
'сыр','соус','сахар','чай','кофе');
//как перевести saucers незнаю,
//вероятно ошибка в написании как и в broad
procedure nal(sh:shop; var a:assort);
var i:food;
k,m,j:integer;
begin
a:=[];
for i:=bread to cafe do
begin
k:=0;
for j:=1 to n do
if i in sh[j] then k:=k+1;
if k=n then
begin
a:=a+[i];
k:=1;
end;
end;
if a=[] then writeln('Нет продуктов, которые есть во всех магазинах')
else
begin
writeln('Продукты, которые есть во всех магазинах');
for i:=bread to cafe do
if i in a then write(pr[ord(i)],' ');
end;
end;
var m:shop;
a:assort;
i:food;
j,v:byte;
begin
clrscr;
//формируем множества
writeln('Перечислите в каком из ',n,' магазинов какие продукты)');
for j:=1 to n do
begin
writeln('Магазин ',j);
m[j]:=[];
writeln('Выберите продукты');
writeln('0-хлеб 1-масло 2-молоко 3-мясо 4-рыба 5-соль');
writeln('6-сыр 7-соус 8-сахар 9-чай 10-кофе 11-выход');
repeat
readln(v);
if v in [0..k] then m[j]:=m[j]+[food(v)];
until v=11;
clrscr;
end;
//выведнм на экран что получилось
writeln('Полный список продуктов:');
for i:=bread to cafe do
write(pr[ord(i)],' ');
writeln;
writeln('Список продуктов по магазинам:');
for j:=1 to n do
begin
write(j,' - ');
for i:=bread to cafe do
if i in m[j] then write(pr[ord(i)],' ');
writeln;
end;
nal(m,a);
readln;
end.
Объяснение кода листинга программы
- Создаётся тип данных
food, который представляет собой набор продуктов. - Создаётся переменная
shop, которая представляет собой массив из 20 элементов типаassort. - Создаётся константа
nдля обозначения количества магазинов. - Создаётся константа
kдля обозначения количества продуктов. - Создаётся переменная
pr, которая представляет собой массив из 12 элементов типаstring, каждый элемент представляет собой название продукта. - В процедуре
nalпроисходит следующее:- Создается пустой массив
aдля хранения продуктов, которые есть во всех магазинах. - Для каждого продукта
iотbreadдоcafeпроисходит следующее:- Инициализируется переменная
kдля подсчета количества продуктов данного типа в текущем магазине. - Если продукт
iприсутствует во всех магазинах (k равноn), то добавляем его в массивaи обнуляемk. - Если продукт
iотсутствует во всех магазинах, выводим сообщениеНет продуктов, которые есть во всех магазинах.
- Инициализируется переменная
- Выводим список продуктов, которые есть во всех магазинах.
- Если массив
aне пустой, выводим список продуктов по магазинам.
- Создается пустой массив
- Создается переменная
m, которая представляет собой магазин. - В цикле
forпользователь выбирает продукты для каждого магазина. - Если выбранный продукт присутствует в магазине, добавляем его в соответствующий магазин.
- После выбора всех продуктов для всех магазинов вызывается функция
nal. - Выводится полная информация о продуктах.
- Выводится информация о продуктах по магазинам.