Читаем Беседы об информатике полностью

Движемся по коридору лабиринта. Искушенный читатель мог бы сделать здесь и, наверное, сделает по меньшей мере два возражения. Первое, по его мнению, это то, что двигаться по плоскости (считаем лабиринт плоским) — это значит каждый раз вычислять координаты очередной точки. Следовательно, машина все-таки вычислительная? Все в конечном итоге сводится к вычислениям?

Ничего подобного! С той же легкостью, как с арифметическими операциями, машина оперирует и с отношениями, в частности с отношениями смежности. В таких условиях двигаться — это значит освобождать некоторый элемент площади (записывать в него нуль, если раньше была записана единица) и занимать соседний, смежный, элемент — заменять в нем нуль на единицу. Что такое «соседний», машина, как мы только что сказали, знает.

Второе возражение более серьезное. К чему оно сводится? По условию, движение совершается в лабиринте и перешагивать через стенки нельзя. Поэтому каждый шаг представляет собой не элементарное действие, а целую последовательность действий такого типа: ткнулись направо — уперлись в стенку, изменили направление движения — снова уперлись в стенку и так далее, пока впереди не обнаруживается свободное пространство и можно делать шаг.

Топ-топ, левой-правой! Выполняется естественная последовательность команд. Но вот обнаруживается разветвление коридоров. По какому из двух путей продолжать движение? Для выбора есть много способов.

Простейший — всегда поворачивать, например, только вправо. Точнее, в самый правый из нескольких коридоров при условии, что он уже однажды не был пройден.

Можно бросить монету. Да-да, бросить монету! Иначе говоря, совершить случайный выбор. Случайный выбор машина умеет делать гораздо лучше человека, и это подтверждается тем, что в орел и решку машина у человека всегда выигрывает.

Можно вычислить вероятность успеха для каждого из путей.

Наконец, можно заглянуть в память (машинную, конечно) и воспользоваться предыдущим опытом.

Но что важно? Все сказанное не имеет никакого отношения к программированию. Программист должен знать одно: попадая в точку разветвления, машина должна выбрать путь. Как она будет это делать, относится не к программе, а к существу задачи. Попутно выполняется небольшая проверка. Не достигнут ли конец лабиринта? Если достигнут, то машина, ликуя, сообщает о выполнении задания, если нет, она возвращается в исходную точку программы и все начинается сначала: топ-топ, левой-правой…

Рис. 8.

Вот и вся премудрость. Давайте рассмотрим внимательно рисунок 8. Начнем с самого верха, где написано: «Вход в программу». Логичнее было бы написать «начало», но дело в том, что относительно каждой программы трудно определить, где у нее начало. Каждая программа может быть частью другой, более сложной. Слова «Вход в программу» и означают, что, начиная с определенного момента, действует именно эта программа. Кроме того, здесь возможно выполнение некоторых вспомогательных действий, которые на данном уровне рассмотрения несущественны.

Вошли в программу. Минуем пока прямоугольник, на котором написано «Модификация», и обращаемся к прямоугольнику «Тело программы». Тело программы — это и есть цепочка команд, выполняемых в их естественной последовательности. Какие это команды, совершенно безразлично. Потому мы и выбрали в качестве примера отыскание пути в лабиринте, что эта задача напоминает другие, подчас гораздо более серьезные, например решение вопроса о том, увольнять или не увольнять некоторого сотрудника.

Тело программы предусматривает, кроме команд, наличие операндов, то есть объектов, над которыми выполняются команды. Операндом может быть все, что угодно. В нашем случае это элементы площади коридоров с пометками о том, заняты они или свободны, были однажды пройдены или нет. Каждый такой элемент содержит в себе список соседних элементов. Но все это не имеет никакого отношения к программированию. Программисту достаточно знать, что операнды существуют. Операнды, как и команды, нумеруются по порядку, причем порядковый номер операнда называется его адресом. В состав каждой команды входит адрес соответствующего операнда.

Дойдя до конца естественной последовательности, переходим в следующий прямоугольник, обозначенный как «формулирование условий». Здесь происходит следующее. Последовательно, позиция за позицией, просматривается список элементов площади, смежных с данным. Возможны три случая. Во-первых, в списке оказывается лишь один смежный элемент, причем этот единственный элемент либо уже пройден, либо еще не пройден. Во-вторых, в списке имеются два или более смежных элементов. В-третьих, единственный смежный элемент оказывается выходом из лабиринта.

При всех условиях из прямоугольника «Формулирование условий» мы переходим в ромб, на котором написано: «Принятие решения» (почему ромб, мы не знаем — такова общепринятая символика у программистов). В нашем случае ромб эквивалентен вопросу: является ли смежный элемент выходом из лабиринта? Если ответ положительный (на рис. 8 так и написано, «да»), работа программы заканчивается.

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

Все книги серии Эврика

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

102 способа хищения электроэнергии
102 способа хищения электроэнергии

Рассмотрена проблема хищений электроэнергии и снижения коммерческих потерь в электрических сетях потребителей. Приведены законодательно–правовые основы для привлечения к ответственности виновных в хищении электроэнергии. Изложены вопросы определения расчетных параметров средств учета электроэнергии, показаны схемы подключения счетчиков электрической энергии. Описаны расчетные и технологические способы хищения электроэнергии. Обсуждаются организационные и технические мероприятия по обнаружению, предотвращению и устранению хищений.Для работников энергоснабжающих организаций и инспекторского состава органов Ростехнадзора. Материалы книги могут быть использованы руководителями и специалистами энергослужб предприятий (организаций) для правильного определения расчетных параметров средств учета и потерь электроэнергии в электрических сетях.Если потенциальные расхитители электроэнергии надеются найти в книге «полезные советы», они должны отдавать себе отчет, что контролирующие структуры информированы в не меньшей степени и, следовательно, вооружены для эффективной борьбы с противоправной деятельностью.Настоящая книга является переработанным и дополненным изданием выпущенной в 2005 г. книги «101 способ хищения электроэнергии».

Валентин Викторович Красник

Технические науки / Образование и наука
Электроника для начинающих (2-е издание)
Электроника для начинающих (2-е издание)

В ходе практических экспериментов рассмотрены основы электроники и показано, как проектировать, отлаживать и изготавливать электронные устройства в домашних условиях. Материал излагается последовательно от простого к сложному, начиная с простых опытов с электрическим током и заканчивая созданием сложных устройств с использованием транзисторов и микроконтроллеров. Описаны основные законы электроники, а также принципы функционирования различных электронных компонентов. Показано, как изготовить охранную сигнализацию, елочные огни, электронные украшения, устройство преобразования звука, кодовый замок и др. Приведены пошаговые инструкции и более 500 наглядных рисунков и фотографий. Во втором издании существенно переработан текст книги, в экспериментах используются более доступные электронные компоненты, добавлены новые проекты, в том числе с контроллером Arduino.

Чарльз Платт

Радиоэлектроника / Технические науки
100 великих чудес инженерной мысли
100 великих чудес инженерной мысли

За два последних столетия научно-технический прогресс совершил ошеломляющий рывок. На что ранее человечество затрачивало века, теперь уходят десятилетия или всего лишь годы. При таких темпах развития науки и техники сегодня удивить мир чем-то особенным очень трудно. Но в прежние времена появление нового творения инженерной мысли зачастую означало преодоление очередного рубежа, решение той или иной крайне актуальной задачи. Человечество «брало очередную высоту», и эта «высота» служила отправной точкой для новых свершений. Довольно много сооружений и изделий, даже утративших утилитарное значение, тем не менее остались в памяти людей как чудеса науки и техники. Новая книга серии «Популярная коллекция «100 великих» рассказывает о чудесах инженерной мысли разных стран и эпох: от изобретений и построек Древнего Востока и Античности до небоскребов в сегодняшних странах Юго-Восточной и Восточной Азии.

Андрей Юрьевич Низовский

История / Технические науки / Образование и наука