Чтение онлайн

на главную - закладки

Жанры

Шрифт:

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); { Следующий индекс в массиве множеств границ }

end; { очередная кампания завершена }

Inc(Counter); { Наращиваем счетчик "завоевательных кампаний" }

until C2 in EmpireN; { Пока не будет присоединена страна C2 }

{ Печать результата }

Writeln('Пересечений границ: ', Counter); Readln;

end.

Так была решена задача о минимальной сумме пошлин. Купцы, было, обрадовались, но вскоре явились с новым поклоном. Много ль толку от знания расходов, если не знаешь пути, по которому

надо двигаться? «Сделай нам, братан, что-то типа навигатора для поиска кратчайшего пути между странами. Так, чтобы нам меньше этих пошлин платить, – умоляли купцы, – мы не поскупимся!» Ник обещал подумать, и продолжение истории следует.

Крестики-нолики

Кто не любовался яркой световой рекламой? Рекламный щит составлен из лампочек, а изображение «рисуется» их включением и отключением, – этим управляет микропроцессор. Компьютер у нас под рукой, почему бы не соорудить такой рекламный щит прямо на экране? Научим компьютер выполнять с изображением на нашем щите три действия: два зеркальных отражения (относительно горизонтальной и вертикальной осей), а также инверсию изображения (рис. 113).

Рис.113 – Операции с изображением на щите

Прежде всего, определим, как представить исходное изображение так, чтобы ввод его в компьютер был по возможности прост. Неплохим вариантом будет текстовый файл, где исходная картинка нарисована двумя символами, например, крестиком и ноликом. Присмотревшись к рис. 114, вы разглядите в правом верхнем углу изображенную таким способом букву «F».

Рис.114 – Исходный файл для представления рекламного щита, крестиками нарисована буква «F»

Размер картинки выберем таким, чтобы она помещалась на экране монитора. В текстовом режиме экран содержит 25 строк по 80 символов в каждой. Мы ограничимся 20 строками по 40 символов. Тогда воображаемая вертикальная ось нашего щита пройдет между 20-м и 21-м столбцами, а горизонтальная – между 10-й и 11- строками.

Разобравшись с видимым представлением щита, обратимся к невидимому: придумаем способ хранения в памяти «лампочек» щита. Годятся ли символьные переменные, – те же крестики и нолики? Да, но мне приглянулся способ, лучше отвечающий природе рекламного щита. Ведь каждая из лампочек может быть либо включена либо погашена, – их состояние можно отразить в булевых переменных. А сколько их понадобится? Не так уж мало – 800 штук (20 строк по 40 в каждой). Разумеется, нужен массив, но каким он будет? Предположим, что тип «рекламный щит» (Desk) объявлен так:

Поделиться:
Популярные книги

(Не)нужная жена дракона

Углицкая Алина
5. Хроники Драконьей империи
Любовные романы:
любовно-фантастические романы
6.89
рейтинг книги
(Не)нужная жена дракона

Я граф. Книга XII

Дрейк Сириус
12. Дорогой барон!
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Я граф. Книга XII

Позывной "Князь"

Котляров Лев
1. Князь Эгерман
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Позывной Князь

Темный Лекарь 6

Токсик Саша
6. Темный Лекарь
Фантастика:
аниме
фэнтези
5.00
рейтинг книги
Темный Лекарь 6

Купец I ранга

Вяч Павел
1. Купец
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Купец I ранга

Газлайтер. Том 12

Володин Григорий Григорьевич
12. История Телепата
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Газлайтер. Том 12

Имперец. Земли Итреи

Игнатов Михаил Павлович
11. Путь
Фантастика:
героическая фантастика
боевая фантастика
5.25
рейтинг книги
Имперец. Земли Итреи

Законы Рода. Том 5

Flow Ascold
5. Граф Берестьев
Фантастика:
юмористическое фэнтези
аниме
5.00
рейтинг книги
Законы Рода. Том 5

Кодекс Крови. Книга V

Борзых М.
5. РОС: Кодекс Крови
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Крови. Книга V

Инкарнатор

Прокофьев Роман Юрьевич
1. Стеллар
Фантастика:
боевая фантастика
рпг
7.30
рейтинг книги
Инкарнатор

Система Возвышения. (цикл 1-8) - Николай Раздоров

Раздоров Николай
Система Возвышения
Фантастика:
боевая фантастика
4.65
рейтинг книги
Система Возвышения. (цикл 1-8) - Николай Раздоров

Мастеровой

Дроздов Анатолий Федорович
Фантастика:
фэнтези
боевая фантастика
альтернативная история
7.40
рейтинг книги
Мастеровой

Черный маг императора 3

Герда Александр
3. Черный маг императора
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Черный маг императора 3

Чехов. Книга 2

Гоблин (MeXXanik)
2. Адвокат Чехов
Фантастика:
фэнтези
альтернативная история
аниме
5.00
рейтинг книги
Чехов. Книга 2