Вспомогательные алгоритмы
(Серия задач "Слова из букв")

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

Суть заданий - "Стрелочка" должна оставить след в виде слова из печатных букв. Часто новое задание сводится к предыдущему, надо лишь переставить буквы местами или приписать букву. Например, серия задач: сон, нос, оно, она, сосна, насос.

Требования к основному алгоритму.

Применяя метод пошаговой детализации, мы видим, что задача "начертить слово" разбивается на последовательность более простых задач "начертить 1-ю букву", "начертить 2-ю букву", "начертить 3-ю букву" и т.д.. Каждая из них будет реализована как вспомогательный алгоритм (процедура).

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

Требования к процедурам.

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

        

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

Учебная задача

Постановка задачи.

Постановка задачи: Разработайте алгоритм перемещения исполнителя из точки А в точку Б с рисованием следа в виде слова СОН в точном соответствии с приведенным образцом.

Исходное положение "Стрелочки":
- точка А;
- направление вправо.
Результат: "Стрелочка" в точке Б.

Образец для воспроизведения рисунка:

Решение задачи. Решение задачи: Разработаем процедуры для рисования букв С, О, Н так, чтобы каждая процедура включала бы в себя и переход в начальную точку рисования следующей буквы.

Заметим, что точка Б в условии задачи задана так, что после выполнения процедуры для буквы Н никаких дополнительных переходов делать не надо. Исполнитель окажется точно в точке Б.

Исполнение алгоритма:

АЛГОРИТМ ПУТЬ_1
  Дано: Исполнитель в т.А
  Надо: Исполнитель в т.Б
НАЧ
  ДЕЛАЙ с
  ДЕЛАЙ о
  ДЕЛАЙ н
КОН

ПРОЦЕДУРА с
   ШАГ
   ПОВОРОТ
   ПРЫЖОК
   ПРЫЖОК
   ПОВОРОТ
   ШАГ
   ПОВОРОТ
   ШАГ
   ШАГ
   ПОВОРОТ
   ШАГ
   ПРЫЖОК
КОНЕЦ ПРОЦЕДУРЫ

ПРОЦЕДУРА о
   ШАГ
   ПОВОРОТ
   ШАГ
   ШАГ
   ПОВОРОТ
   ШАГ
   ПОВОРОТ
   ШАГ
   ШАГ
   ПОВОРОТ
   ШАГ
   ПРЫЖОК
КОНЕЦ ПРОЦЕДУРЫ

ПРОЦЕДУРА н
   ПРЫЖОК
   ПОВОРОТ
   ШАГ
   ПОВОРОТ
   ШАГ
   ПОВОРОТ
   ПОВОРОТ
   ПРЫЖОК
   ПОВОРОТ
   ШАГ
   ПОВОРОТ
   ПРЫЖОК
   ПОВОРОТ
   ШАГ
   ШАГ
   ПОВОРОТ
   ПРЫЖОК
   ПРЫЖОК
КОНЕЦ ПРОЦЕДУРЫ

Представление алгоритма в виде блок-схемы:

Анализ решения задачи. Алгоритмы рисования каждой буквы в отдельности могут показаться неоптимальными. Например, по одной линии иногда приходится проходить дважды. Это объясняется тем, что для каждой буквы строго задана исходная и конечная точки рисования.

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