Читаем Песни о Паскале полностью

      TStates = array ['A'..'Z'] of TBoundSet;


      { Процедура чтения множества чисел (границ) из строки файла }

procedure ReadSet(var aFile: text; var aSet : TBoundSet);

var k : integer;

begin

      while not Eoln(aFile) do begin

      Read(aFile, k);

      aSet:= aSet+[k];

      end;

      Readln (aFile);

end;

      { Глобальные переменные }

var FileIn : text;       { Входной файл, полученный со спутника }

      States : TStates;       { Массив множеств границ }

      Names : TNameSet;       { Множество имен всех стран на карте }

      C1, C2 : char;       { Имена стран "откуда" и "куда" }

      C       : char;       { Рабочая переменная для имен стран }

      EmpireB: TBoundSet; { Границы империи }

      Temp : TBoundSet; { Предыдущие границы империи }

      EmpireN: TNameSet;       { страны империи }

      Counter: integer;       { Счетчик пересечений границ (результат) }


begin       {--- Главная программа ---}

{ Открываем входной файл }

Assign(FileIn, 'P_38_3.in'); Reset(FileIn);


{ Готовим цикл чтения массива множеств }

Names:=[ ]; { Названия стран }

C:= 'A'; { Первый индекс в массиве стран }

while not Eof(FileIn) do begin { Цикл чтения массива множеств }

      ReadSet(FileIn, States[C]); { Чтение одного множества }

      Names:= Names+[C];       { Добавляем имя страны }

      C:= Succ(C);       { Переход к следующей букве }

end;

Close(FileIn); { Теперь входной файл можно закрыть }

repeat { «Упрямый» цикл чтения правильных имен стран }

      Write('Откуда: '); Readln(C1);

      Write('Куда : '); Readln(C2);

      { Переводим имена стран в верхний регистр }

      C1:= UpCase(C1); C2:= UpCase(C2);

      { Если имена не совпадают и оба достоверны, значит ввод правильный,

      в таком случае выходим из цикла, а иначе повторяем ввод }

      if (C1<>C2) and (C1 in Names) and (C2 in Names)

      then Break

      else Writeln('Ошибка! Повторите ввод имен стран');

until False;

{ Подготовка к присоединению стран }

EmpireB:= States[C1]; { Империя начинает расширяться от страны C1 }

EmpireN:= [C1];       { Здесь накапливаются имена присоединенных стран }

Counter:= 0;       { Счетчик "завоевательных кампаний" }

{ Цикл, пока не будет присоединена страна C2 }

repeat

      { Подготовка к "завоевательной кампании" }

      C:='A';       { Первый индекс в массиве множеств границ }

      Temp:= EmpireB; { Запоминаем предыдущие границы империи }

      { Цикл очередной "завоевательной кампании" по всем странам массива }

      while C in Names do begin

      { Если страна имеет общую границу, присоединяем её к империи }

      if (Temp * States[C]) <> [] then begin

      EmpireB:= EmpireB + States[C]; { Добавляем границы }

      EmpireN:= EmpireN + [C]; { Добавляем имя страны }

      end;

      C:= Succ(C); { Следующий индекс в массиве множеств границ }

Перейти на страницу:

Похожие книги

Сломанная кукла (СИ)
Сломанная кукла (СИ)

- Не отдавай меня им. Пожалуйста! - умоляю шепотом. Взгляд у него... Волчий! На лице шрам, щетина. Он пугает меня. Но лучше пусть будет он, чем вернуться туда, откуда я с таким трудом убежала! Она - девочка в бегах, нуждающаяся в помощи. Он - бывший спецназовец с посттравматическим. Сможет ли она довериться? Поможет ли он или вернет в руки тех, от кого она бежала? Остросюжетка Героиня в беде, девочка тонкая, но упёртая и со стержнем. Поломанная, но новая конструкция вполне функциональна. Герой - брутальный, суровый, слегка отмороженный. Оба с нелегким прошлым. А еще у нас будет маньяк, гендерная интрига для героя, марш-бросок, мужской коллектив, волкособ с дурным характером, балет, секс и жестокие сцены. Коммы временно закрыты из-за спойлеров:)

Лилиана Лаврова , Янка Рам

Современные любовные романы / Самиздат, сетевая литература / Романы