zadach477.PAS

{* Задача 477 *}

Unit ZADACH477;
Interface
Implementation
Begin
 writeln('Имеются две коробки, в которых могут быть одинаковые наборы карандашей. После длительного употребления определить карандаши какого цвета имеются в наличии.');
End.

Program zadach477;

Uses zadach477.pas; {* Эту строку можно удалить *}
Type {названия возможных цветов карандашей}
  palitra = (krasn, gelt, zelen, sini, korichn, chern);
  korobka = Set Of palitra; {тип информационной модели                                 коробки карандашей}
Const {массив с символьными названиями цветов карандашей}
  colors : Array[palitra]Of String = ('красный''желтый',                'зеленый''синий''коричневый''черный');
Var {* В работе нам потребуются переменные: *}
  n1    : korobka;
  n2    : korobka; {коробки с карандашами}
  i     : palitra; {для перебора цветов}
  otvet : String{строка с ответом пользователя}
  nal   : korobka;
  otsut : korobka; {результаты вычислений: наличие,                          отсутствие}
  k     : integer; {для подсчета количества карандашей                   при выводе результатов}
Begin
  {формируются два множества - n1, n2;
  показаны два способа ввода значений перечисляемого типа}

  {заполнение первой коробки}
  n1 := []; {коробка пуста - пустое множество}
  {перебор возможных цветов}
  For i := krasn To chern Do {* Переменная i увеличивается с krasn до chern *}
  Begin
    writeln('Есть ', colors[i], ' карандаш? Ответьте: д/н');
    readln(otvet);
    If (otvet[1] = 'Д')Or(otvet[1] = 'д'Then
    Begin
      n1 := n1 + [i]; {добавление элемента в мнжество}
      writeln(colors[i], ' карандаш находится в коробке')
    End;
    Else writeln(colors[i], ' карандаш отсутствует в коробке')
  End;
  n2 := [];
  Repeat      writeln('Введите цвет карандаша: красный, желтый, ');
    writeln('      зеленый, синий, коричневый, черный');
  writeln('или н, если карандашей больше нет.');
  readln(otvet);
  For i := krasn To chern Do {* Увеличиваем i от krasn до chern с шагом 1 *}
    If colors[i] = otvet Then
    Begin
      n2 := n2 + [i];
      writeln(colors[i], ' карандаш находится в коробке')
    End;
  Until (otvet[1] = 'Н')Or(otvet[1] = 'н'); {формирование результатов}
  nal := n1 + n2; {объединение двух множеств - коробок}
  otsut := [krasn, gelt, zelen, sini, korichn, chern] - nal; {вычитание из множества возможных цветов множества наличных цветов}
  {вывод названий имеющихся цветов}
  k := 0;
  write('В коробках ');
  For i := krasn To chern Do {* Увеличиваем i от krasn до chern с шагом 1 *}
    If i In nal Then
    Begin
      If k0 Then
        write(', ');
      k := k + 1;
      write(colors[i])
    End;
  If k = 0 Then
    writeln('нет карандашей')
  Else If k = 1 Then
    writeln(' карандаш')
  Else writeln(' карандаши'); {вывод названий отсутствующих цветов}
    k := 0;
  write('В коробках ');
  For i := krasn To chern Do {* Переменная i увеличивается с krasn до chern *}
    If i In otsut Then
    Begin
      If k0 Then
        write(', ');
      k := k + 1;
      write(colors[i])
    End;
  If k = 0 Then
    writeln('есть все карандаши')
  Else If k = 1 Then
    writeln(' карандаш отсутствует')
  Else writeln(' карандаши отсутствуют');
End.