Получить множество всех продуктов, которые есть во всех магазинах - 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.

Объяснение кода листинга программы

  1. Создаётся тип данных food, который представляет собой набор продуктов.
  2. Создаётся переменная shop, которая представляет собой массив из 20 элементов типа assort.
  3. Создаётся константа n для обозначения количества магазинов.
  4. Создаётся константа k для обозначения количества продуктов.
  5. Создаётся переменная pr, которая представляет собой массив из 12 элементов типа string, каждый элемент представляет собой название продукта.
  6. В процедуре nal происходит следующее:
    • Создается пустой массив a для хранения продуктов, которые есть во всех магазинах.
    • Для каждого продукта i от bread до cafe происходит следующее:
      • Инициализируется переменная k для подсчета количества продуктов данного типа в текущем магазине.
      • Если продукт i присутствует во всех магазинах (k равно n), то добавляем его в массив a и обнуляем k.
      • Если продукт i отсутствует во всех магазинах, выводим сообщение Нет продуктов, которые есть во всех магазинах.
    • Выводим список продуктов, которые есть во всех магазинах.
    • Если массив a не пустой, выводим список продуктов по магазинам.
  7. Создается переменная m, которая представляет собой магазин.
  8. В цикле for пользователь выбирает продукты для каждого магазина.
  9. Если выбранный продукт присутствует в магазине, добавляем его в соответствующий магазин.
  10. После выбора всех продуктов для всех магазинов вызывается функция nal.
  11. Выводится полная информация о продуктах.
  12. Выводится информация о продуктах по магазинам.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 4 из 5
Похожие ответы