zadach199.PAS

{* Задача 199 *}

Unit ZADACH199;
Interface
Implementation
Begin
 writeln('Каждый из N посетителей кафе (N-заданное число) выбрал 3 блюда из предложенного списка, содержащего 10 наименований. Необходимо определить кол-во посетителей, чьи вкусы полностью совпали, напечатать номера выбранных блюд. Порядок перечисления блюд одним посетителем не важен, но каждый из них не может выбрать одно и то же блюдо несколько раз. Помогите, пожалуйста, если не трудно ');
End.

Program pas13720;

Uses zadach199.pas; {* Эту строку можно удалить *}
Uses crt; {* Подключаем внешние файлы *}
Type {* Используемые типы *}
  mn = Set Of byte;
Const {* Предопределенные *}
  cf = [1..10]; {для проверки правильности ввода}
Var {* Необходимые переменные *}
  ms : Array[1..100] Of mn; {массив множеств}
  n  : byte;
  a  : byte;
  b  : byte;
  c  : byte; {размер массива, 3 числа для ввода}
  i  : byte;
  j  : byte;
  k  : byte;
  l  : byte;
  p  : byte;
  t  : byte; {разные счетчики циклов}
Begin
  clrscr; {* Стираем всё с экрана *}
  write('n=');
  readln(n);
  writeln('Введите наборы номеров блюд:');
  For i := 1 To n Do {* Увеличиваем i от 1 до n с шагом 1 *}
  Begin
    ms[i] := []; {множество пустое}
    Repeat    write('a=');
      readln(a); {вводим 1 число}
    Until a In cf; {допустимое}
    include(ms[i], a); {заносим в множество}
    Repeat    write('b=');
      readln(b); {2 число}
    Until (b In cf)And(ba); {допустимое и не равно 1}
    include(ms[i], b); {в множество}
    Repeat    write('c=');
      readln(c); {3 число}
    Until (c In cf)And(ca)And(cb); {допустимое и не равно 1 и 2}
    include(ms[i], c); {в множество}
  End;
  For i := 1 To n Do {идем по массиву}
  Begin
    k := 0; {совпадений 0}
    For j := 1 To n Do {идем по "клону" массива}
      If ms[i] = ms[j] Then
        k := k + 1; {если совпало, считаем}
    If k > 1 Then {если больше одного(сам с собой не считаем)}
    Begin
      write('Блюда ');
      For l := 1 To 10 Do {* Переменная l увеличивается с 1 до 10 *}
        If l In ms[i] Then
          write(l, ' '); {выводим элементы множества}
      write('  ', k, ' человек'); {сколько человек}
      writeln; {* Вывод пустой строки *}
      For p := 1 To n Do {снова идем по массиву}
        If ms[p] = ms[i] Then {удаляем все найденные совпадения}
        Begin
          For t := p To n - 1 Do {* Цикл для t => [p .. n] *}
            ms[t] := ms[t + 1]; {сдвигом массива влево}
          n := n - 1; {уменьшаем размер массива}
        End;
      
    End;
    
  End;
  readln
End.