Алгодром


04. Вспомогательные алгоритмы

ПРИМЕР
|
ОПРЕДЕЛЕНИЯ
|
РАЗДЕЛЕНИЕ ТРУДА между ЭВМ и ИСПОЛНИТЕЛЕМ
|
ВЫПОЛНЕНИЕ КОМАНДЫ ВЫЗОВА

Пример алгоритма

Сможете ли Вы угадать результат выполнения записанного справа алгоритма для исполнителя Робот?   алг
нач

  вниз

Щелкните мышкой на клетках, которые по-вашему будут закрашены, и нажмите "ПРОВЕРИТЬ".

Вверх

    закрасить
  вправо
  закрасить
  вниз
  закрасить
  влево
  закрасить
  вниз
  закрасить
 
    вниз
  вправо
    закрасить
  вправо
  закрасить
  вниз
  закрасить
  влево
  закрасить
  вниз
  закрасить
 


Пытаясь угадать какие клетки будут закрашены, нельзя не оцентить и размеры программы, и сложность траектории движения Робота.
А заметили Вы повторяющуюся группу команд, выделенную более светлым фоном и соответствующую повторяющейся части пути исполнителя (группа клеток, которые при этом закрашиваются, напоминает флажок)?

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

    вправо
  вправо
    закрасить
  вправо
  закрасить
  вниз
  закрасить
  влево
  закрасить
  вниз
  закрасить
 
  кон

Можно ли сократить алгоритм и избежать указанных трудностей?

Да. Если вместо повторения одной и той же группы команд использовать вызов вспомогательного алгоритма.


Есть способ один раз объяснить исполнителю ("научить" его) как рисуется флажок , а затем многократно воспользоваться результатами такого "обучения".

Запишем, сначала, группу повторяющихся команд в виде отдельного агоритма или, иначе, научим Робота рисовать один флажок:
алг флажок
нач
  закрасить
  вправо
  закрасить
  вниз
  закрасить
  влево
  закрасить
  вниз
  закрасить
кон
 

 

Вы, конечно, обратили внимание на заголовок алгоритма: после служебного слова алг указано имя (название) этого алгоритма. Обычно оно подбирается так, чтобы было ясно для чего служит алгоритм.

Как выяснится чуть ниже, имя "флажок" этого алгоритма поможет нам вызвать его на исполнение. Так в геометрии принято давать название (имя) доказанной теореме, чтобы было удобно на нее сослаться, а не повторять каждый раз ее доказательство.

 
Теперь мы можем переписать исходный алгоритм, не повторяя команды рисования флажка, а вызывая уже написанный вспомогательный алгоритм "флажок":
  алг парад
нач

  вниз
  флажок
  вниз
  вправо
  флажок
  вправо
  вправо
  флажок
кон
   

Количество предписаний — ровно в четыре раза меньше, чем в первоначальном варианте.

Запись "флажок" в алгоритме парад — это команда вызова вспомогательного алгоритма с именем "флажок".
Выполняя эту команду, компьютер
  • приостанавливает выполнение алгоритма "парад";
  • выполняет алгоритм "флажок";
  • затем продолжает выполнение алгоритма "парад".

 

 
 

Определения

Вспомогательный алгоритм (процедура) — это алгоритм, который хранится в памяти компьютера и может быть вызван для исполнения по его имени.

Предписание на выполнение процедуры называется командой вызова вспомогательного алгоритма и имеет вид:
                                           имя_алгоритма

В общем случае если в записи алгоритма X встречается команда вызова процедуры Y, то говорят, что
            алгоритм Y является вспомогательным для X,
            а алгоритм X основным (главным) для Y.

  алг X
нач
  . . .

   Y
  . . .
кон

. . . . .

алг
Y

нач
  . . .

кон

Обратите внимание: команды, входящие в процедуру (вспомогательный алгоритм), будут выполняться только тогда, когда процедура вызывается на исполнение, а не тогда, когда она вводится (запоминается компьютером).

Вспомогательный алгоритм (процедура) - инструмент, который позволяет:


Разделение труда между ЭВМ и исполнителями

Алгоритм — это описание последовательности действий компьютера.
Исполнители ничего ни про какие алгоритмы и процедуры не знают.
Например, при выполнении алгоритма парад именно компьютер и т.д.

Исполнитель же лишь выполняет последовательно поступающие от ЭВМ команды: вниз, закрасить и т.д.


Выполнение команды вызова вспомогательного алгоритма

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

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

Знакомясь с примером,
    •  попытайесь, если Вы этого не сделали вначале, до выполнения алгоритма угадать его результат;
    •  постарайтесь проследить каждый из трех этапов выполнения компьютером команды вызова;
    •  попробуйте на каждом шаге выявить "главное действующее лицо": компьютер или исполнитель.



ПРИМЕР
|
ОПРЕДЕЛЕНИЯ
|
РАЗДЕЛЕНИЕ ТРУДА между ЭВМ и ИСПОЛНИТЕЛЕМ
|
ВЫПОЛНЕНИЕ КОМАНДЫ ВЫЗОВА