Программа


Program SetOfPrinter;
{ Работа со множествами }
Type  Printer=(EPL_5200,SQ_870,LQ_860,LQ_570,LQ_100,FX_870,LX_1050);
                                                 { Тип принтер перечисляемый }
      PrinterSet=set of Printer;                   { Тип множество принтеров }
Const ArrayOfPrinterSet:array[1..5] of PrinterSet=
                                { Массив множеств принтеров в 5-и институтах }
            ([EPL_5200,       LQ_860,LQ_570,LQ_100,FX_870,LX_1050],
             [EPL_5200,       LQ_860,LQ_570,       FX_870        ],
             [EPL_5200,       LQ_860,LQ_570,LQ_100,FX_870        ],
             [EPL_5200,              LQ_570,       FX_870        ],
             [EPL_5200,       LQ_860,LQ_570,LQ_100,FX_870        ]);
Var Set1,Set2:PrinterSet;                { Первое и второе искомые множества }
    i:byte;                                             { Счетчик институтов }
    PrinterMeter:Printer;                                { Счетчик принтеров }
    PrinterInAll:boolean;         { Флаг наличия принтера во всех институтах }
Procedure WriteSet(SetPrn:PrinterSet);
  Begin
    for PrinterMeter:=EPL_5200 to LX_1050 do
                                      { перебор возможных значений принтеров }
        if PrinterMeter in SetPrn then case PrinterMeter of
   { если текущий принтер входит в сформированное множество, то вывод модели }
                                         EPL_5200:Write('EPL_5200 ');
                                         SQ_870  :Write('SQ_870 ');
                                         LQ_860  :Write('LQ_860 ');
                                         LQ_570  :Write('LQ_570 ');
                                         LQ_100  :Write('LQ_100 ');
                                         FX_870  :Write('FX_870 ');
                                         LX_1050 :Write('LX_1050 ')
                                       end;
    WriteLn;                                            { Вывод конца строки }
  End;
BEGIN
  Set1:=[];                                            { Обнуление множества }
  for PrinterMeter:=EPL_5200 to LX_1050 do { Цикл проверки наличия принтеров }
    Begin
      PrinterInAll:=true;
                       { Установка флага наличия принтера во всех институтах }
      for i:=1 to 5 do
                    { Цикл просмотра институтов на наличие текущего принтера }
        PrinterInAll:=PrinterInAll and (PrinterMeter in ArrayOfPrinterSet[i]);
                                         { Вычисление флага наличия принтера }
      if PrinterInAll then Set1:=Set1+[PrinterMeter] { Если принтер оказался
     во всех институтах, то добавление текущего принтера в искомое множество }
    End;
  WriteLn;                                            { Вывод конца строки }
  WriteLn('Принтеры имеющиеся во всех институтах: ');
                                       { Вывод сообщения о наличии принтеров }
  WriteSet(Set1);{ Вывод множества принтеров }



  Set2:=[];                                            { Обнуление множества }
  for PrinterMeter:=EPL_5200 to LX_1050 do
                        { Цикл проверки наличия принтеров по всем институтам }
    for i:=1 to 5 do                             { Цикл просмотра институтов }
      if PrinterMeter in ArrayOfPrinterSet[i] then Set2:=Set2+[PrinterMeter];
              { Если текущий принтер входит во множество принтеров института,
                                       то добавление его в искомое множество }
  WriteLn('Принтеры имеющиеся хотябы в одном институте: ');
                                       { Вывод сообщения о наличии принтеров }
  WriteSet(Set2);{ Вывод множества принтеров }
END.

Бесплатные примеры программ
Примеры написанных программ
Помощь студентам по программированию