Чтобы дописать строки вспомогательного алгоритма, нужно проанализировать уже существующий код и рисунок. Алгоритм домик состоит из команд опустить перо, сместиться на вектор (X, Y) и поднять перо. Эти команды используются для рисования отдельных элементов дома.
Из рисунка видно, что дом состоит из:
Алгоритм домик, вероятно, рисует один из этих элементов. Программа, вызывающая домик три раза, смещаясь каждый раз, предполагает, что домик рисует что-то, что потом перемещается. Если предположить, что домик рисует само здание без крыши (квадрат), то три вызова с разными смещениями могли бы означать рисунок трех одинаковых домов в разных местах. Однако, рисунок показывает один дом.
Наиболее вероятный сценарий: каждая команда сместиться на вектор в основном алгоритме задает начальную точку для отрисовки домика. А сам алгоритм домик рисует один стандартный элемент, например, квадрат.
Чтобы нарисовать дом, как показано на картинке, нам нужно:
Предположим, что алгоритм домик рисует квадрат 5x5 единиц.
алг домикнач опустить перо сместиться на вектор (5, 0) сместиться на вектор (0, 5) сместиться на вектор (-5, 0) сместиться на вектор (0, -5)поднять перокон
Тогда, чтобы нарисовать дом с окном и крышей, можно использовать вложенные алгоритмы или нарисовать их внутри основного.
Алгоритм для окна:
алг окнонач опустить перо сместиться на вектор (1, 1) сместиться на вектор (3, 0) сместиться на вектор (0, 2) сместиться на вектор (-3, 0) сместиться на вектор (0, -2)поднять перокон
Алгоритм для крыши:
алг крышанач опустить перо сместиться на вектор (2.5, 2) // Вершина треугольника сместиться на вектор (-2.5, -2) сместиться на вектор (5, 0) сместиться на вектор (-2.5, 2)поднять перокон
Полная программа:
алг нарисовать_домнач использовать Чертежник алг домик // Рисует квадрат 5x5 нач опустить перо сместиться на вектор (5, 0) сместиться на вектор (0, 5) сместиться на вектор (-5, 0) сместиться на вектор (0, -5) кон алг окно // Рисует прямоугольник 3x2 внутри квадрата нач опустить перо сместиться на вектор (1, 1) сместиться на вектор (3, 0) сместиться на вектор (0, 2) сместиться на вектор (-3, 0) сместиться на вектор (0, -2) кон алг крыша // Рисует треугольник над квадратом нач опустить перо сместиться на вектор (2.5, 5) // Верхний угол крыши, относительно начала координат квадрата сместиться на вектор (-2.5, -5) // В левый нижний угол квадрата сместиться на вектор (5, 0) // В правый нижний угол квадрата сместиться на вектор (-2.5, 5) // Снова в верхний угол крыши кон // Основная часть программы домик // Рисуем квадрат окно // Рисуем окно внутри крыша // Рисуем крышукон
Но, если следовать заданию, нужно дописать строки основного алгоритма, а не создавать новые.
Вот предполагаемые строки для основного алгоритма, если домик рисует только квадрат:
алг домик // Рисует квадрат 5x5нач опустить перо сместиться на вектор (5, 0) сместиться на вектор (0, 5) сместиться на вектор (-5, 0) сместиться на вектор (0, -5)поднять перокон
Алгоритм рисования дома:
алг рисунок_доманач использовать Чертежник // Рисуем квадрат сместиться в точку (0, 0) // Начало координат домик // Рисуем окно сместиться в точку (1, 1) // Начало окна алг окно // Рисует прямоугольник 3x2 нач опустить перо сместиться на вектор (3, 0) сместиться на вектор (0, 2) сместиться на вектор (-3, 0) сместиться на вектор (0, -2) кон // Рисуем крышу сместиться в точку (0, 5) // Нижний левый угол квадрата, начало для крыши алг крыша // Рисует треугольник нач опустить перо сместиться на вектор (2.5, 5) // Верхняя точка крыши сместиться на вектор (5, 0) // Нижний правый угол квадрата сместиться на вектор (-2.5, -5) // Обратно в нижний левый угол квадрата конкон
Исходя из предоставленного формата, нужно заполнить пустые строки в алгоритме домик, который вызывается из основной программы.
Предполагаем, что домик рисует квадрат.
алг домик
нач
опустить перо
сместиться на вектор (5, 0)
сместиться на вектор (0, 5)
сместиться на вектор (-5, 0)
сместиться на вектор (0, -5)
поднять перо
кон
Теперь заполним основную программу:
алг отрисовка
нач
использовать Чертежник
// Рисуем квадрат
сместиться в точку (0,0) // Начало координат для квадрата
домик
// Рисуем окно внутри квадрата. Оно имеет размер 3x2 и смещено на (1,1) от угла квадрата.
сместиться в точку (1,1)
алг окно // Рисует прямоугольник 3x2
нач
опустить перо
сместиться на вектор (3, 0)
сместиться на вектор (0, 2)
сместиться на вектор (-3, 0)
сместиться на вектор (0, -2)
кон
// Рисуем крышу. Крыша - это треугольник над квадратом.
сместиться в точку (0,5) // Нижний левый угол квадрата, откуда начинаем рисовать крышу
алг крыша // Рисует треугольник
нач
опустить перо
сместиться на вектор (2.5, 5) // Верхняя точка крыши
сместиться на вектор (5, 0) // Нижний правый угол квадрата
сместиться на вектор (-2.5, -5) // Возвращаемся в нижний левый угол квадрата
кон
кон
Если задача заключается в том, чтобы заполнить пропуски в уже существующем алгоритме домик, то это будет зависеть от того, что именно должен рисовать домик. Исходя из рисунка, домик рисует сам дом. А вызовы сместиться в точку (x, y) перед домик задают начальную позицию для всего дома.
Предположим, что домик рисует только квадратную часть дома, а окно и крыша рисуются отдельно.
алг домик
нач
опустить перо
сместиться на вектор (5, 0) // Рисует нижнюю сторону квадрата
сместиться на вектор (0, 5) // Рисует правую сторону квадрата
сместиться на вектор (-5, 0) // Рисует верхнюю сторону квадрата
сместиться на вектор (0, -5) // Рисует левую сторону квадрата
поднять перо
кон
Теперь заполним главную программу, которая использует этот домик:
алг дом_полный
нач
использовать Чертежник
// Первая позиция дома
сместиться в точку (1, 4)
домик // Рисуем квадрат
// Рисуем окно внутри квадрата
сместиться в точку (1+1, 4+1) // Смещение окна внутри квадрата (1,1 от нижнего левого угла)
алг окно // Рисует прямоугольник 3x2
нач
опустить перо
сместиться на вектор (3, 0)
сместиться на вектор (0, 2)
сместиться на вектор (-3, 0)
сместиться на вектор (0, -2)
кон
// Рисуем крышу
сместиться в точку (1, 4+5) // Нижний левый угол квадрата (1,4) + высота квадрата (5) = начало крыши (1,9)
алг крыша // Рисует треугольник
нач
опустить перо
сместиться на вектор (2.5, 5) // Верхняя точка крыши, относительно начальной точки крыши (1,9). Абсолютная координата будет (1+2.5, 9+5) = (3.5, 14) - это неверно.
// Давайте переделаем алгоритм крыши, чтобы он был относительным.
алг крыша_относительная
нач
опустить перо
сместиться на вектор (2.5, 5) // Рисуем наклонную влево от начала (0,5) -> (2.5, 10). Относительно (1,9) -> (3.5, 14).
сместиться на вектор (2.5, -5) // Рисуем наклонную вправо от (2.5, 10) -> (5, 5). Относительно (3.5, 14) -> (6, 9).
сместиться на вектор (-5, 0) // Рисуем основание от (5,5) -> (0,5). Относительно (6,9) -> (1,9).
кон
// Применяем смещения
сместиться в точку (1, 4) // Начало квадрата
домик
сместиться в точку (1+1, 4+1) // Начало окна
окно
сместиться в точку (1, 4+5) // Начало крыши (нижний левый угол квадрата)
крыша_относительная
кон
Это слишком сложно. Вернемся к исходной задаче. Нужно ДОПИСАТЬ строки вспомогательного алгоритма. И даны три вызова сместиться в точку (x,y) перед домик. Это значит, что домик должен быть простым, и его вызывают трижды в разных местах.
алг домик
нач
опустить перо
// Рисуем квадрат 5x5
сместиться на вектор (5, 0)
сместиться на вектор (0, 5)
сместиться на вектор (-5, 0)
сместиться на вектор (0, -5)
// Поднять перо, если домик должен быть нарисован, но потом перемещен.
// Если домик рисует только квадрат, а окно и крыша - это отдельные команды, то это возможно.
// Но вопрос