Выбрать главу

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

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

Если ответ отрицательный, осуществляется возврат в начало программы. Тогда-то и вводится в действие группа команд, обозначенная прямоугольником с надписью: «Модификация». Что делается в случае, когда обнаружены разветвления? Об этом мы говорили. Чтобы реализовать каждый из способов (например, бросить монетку), может понадобиться своя, достаточно сложная программа. Наконец, остается случай, когда единственный смежный элемент уже пройден, то есть мы зашли в тупик. Первоначально выбранный путь оказался неверным, и все надо начинать сначала. С какой точки начинать? Это опять-таки предмет для серьезных рассуждений, но лежащих за пределами обязанностей программиста.

Что должен уметь программист? Строить схемы, аналогичные показанной на рисунке 8. Иначе говоря, он должен построить естественную последовательность команд и снабдить ее в нужных местах средствами формулирования и проверки условий. В зависимости от того, что происходит с условиями, естественная последовательность может быть нарушена. Для этой цели каждая машина снабжается специальной командой или группой команд, которые называются командами перехода или командами нарушения последовательности.

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

Что нам осталось добавить к сказанному? Изображенная на рисунке 8 и столь подробно рассмотренная последовательность действий называется циклом. Цикл может входить внутрь программы или внутрь прямоугольника (программисты говорят, блока), помеченного словом «Модификация». В случае бросания монеты, то есть образования случайного числа, выполняется программа, наверняка имеющая вид цикла. Подобная ситуация получила название цикла в цикле или вложенных циклов. Любая серьезная программа представляет собой очень много циклов, вложенных друг в друга.

Вот и вся премудрость! Пусть читатель рассудит сам. Неужели здесь есть нечто такое, чему нельзя было бы научиться, если не за день, то хотя бы за неделю? Топ-топ, топ-топ… Стоп — разветвление. Куда? Направо. И снова топ-топ… Недаром оказалось, что лучшими программистами являются школьники младших классов. Наверное, потому, что у них нет предрассудков, а все только что описанное очень напоминает игру.

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

В чем же дело, если все так просто? Дело в том, что мало-мальски сложная программа, имеющая практическое значение, содержит десятки, а то и сотни тысяч команд. Человеку свойственно ошибаться, и как раз при написании программ это свойство проявляется в наибольшей степени. Все команды похожи друг на друга, не за что, как говорится, зацепиться глазу, ошибки здесь неизбежны. А вот отыскать ошибку — задача на редкость трудная. Для этого, грубо говоря, нужно кропотливо проделать все то, что по этой программе должна делать ЭВМ. Но ЭВМ выполняет миллионы операций в секунду, а программист на такую скорость не способен. Специально для отладки в ЭВМ ввели пошаговый режим, когда в результате нажатия кнопки машина выполняет одну-единственную команду и сообщает результат программисту.