Исполнитель Черепаха действует на плоскости с декартовой системой координат. В начальный момент Черепаха находится в начале координат, её голова направлена вдоль положительного направления оси ординат, хвост опущен. При опущенном хвосте Черепаха оставляет на поле след в виде линии. В каждый конкретный момент известно положение исполнителя и направление его движения. У исполнителя существует 5 команд: Поднять хвост, означающая переход к перемещению без рисования; Опустить хвост, означающая переход в режим рисования; Вперёд n (где n – целое число), вызывающая передвижение Черепахи на n единиц в том направлении, куда указывает её голова; Назад n (где n – целое число), вызывающая передвижение в противоположном голове направлении; Направо m (где m – целое число), вызывающая изменение направления движения на m градусов по часовой стрелке, Налево m (где m – целое число), вызывающая изменение направления движения на m градусов против часовой стрелки.
Запись Повтори k [Команда1 Команда2 … КомандаS] означает, что последовательность из S команд повторится k раз.
Черепаха выполнила следующую программу:
Повтори 6 [Вперёд 10 Направо 90 Вперёд 8 Направо 90]
Поднять хвост
Вперёд 3 Направо 90 Вперёд 9 Налево 90
Опустить хвост
Повтори 6 [Вперёд 9 Направо 90 Вперёд 10 Направо 90]
Нарисуйте результат выполнения алгоритма.
Ниже пошаговое решение и результат выполнения алгоритма.
Что делает черепаха
- Начало: точка (0, 0), голова направлена вверх (по оси y, т. е. на север), хвост опущен — рисование идет.
- Вся команда “Повтори … [ … ]” выполняется последовательно, как задано.
- Внимание: первый блок “Повтори 6 [Вперёд 10 …]” рисует, т. к. хвост опущен. После команды “Поднять хвост” рисование прекращается, пока хвост не опустят снова.
1) Первая часть: Повтори 6 [Вперёд 10 Направо 90 Вперёд 8 Направо 90]
- Начальная позиция: (0, 0), направление = North (вверх).
- Каждый цикл состоит из: F10 (вверх), R90 (направо), F8 (вправо), R90 (повернуть на 180° относительно исходного направления). Итог за два цикла возвращается в исходную точку.
Детализация циклами
- Цикл 1:
- F10: (0,0) -> (0,10)
- R90: направление = East
- F8: (0,10) -> (8,10)
- R90: направление = South
- Цикл 2:
- F10: (8,10) -> (8,0)
- R90: направление = West
- F8: (8,0) -> (0,0)
- R90: направление = North
- Цикл 3, 4, 5, 6 повторяют те же движения, начиная с текущей позиции/направления. В итоге после шести циклов черепаха снова возвращается в (0,0), направление = North.
Итог первой части:
- Рисуется прямоугольник A со сторонами 8 и 10:
- Левый верхний угол: (0,10)
- Правый верхний угол: (8,10)
- Правый нижний угол: (8,0)
- Левый нижний угол: (0,0)
- Рисование повторялось три раза (половина пути и обратно, трижды), поэтому края прямоугольника могли перекрываться, но итоговая геометрия — прямоугольник A.
2) Вторая часть: Поднять хвост
- Хвост поднимается — дальнейшие движения без рисования.
3) Третья часть: Вперёд 3 Направо 90 Вперёд 9 Налево 90
- Текущая позиция после подъёма хвоста: (0,0). Направление North.
- F3: (0,0) -> (0,3) (без рисования)
- R90: направление = East
- F9: (0,3) -> (9,3) (без рисования)
- L90: направление = North
4) Четвёртая часть: Опустить хвост
- Хвост опущен — рисование снова включено.
5) Пятая часть: Повтори 6 [Вперёд 9 Направо 90 Вперёд 10 Направо 90]
- Теперь текущее направление: North, текущая позиция: (9,3).
- В каждом цикле выполняются: F9 (вверх на 9), R90 (направо), F10 (вправо на 10), R90 (повернуть на 90° вправо).
- Это повторяется 6 раз. Замечание: за два цикла положение возвращается в исходную точку цикла, поэтому за 6 блоков мы три раза прошли по тем же двум сторонам.
Геометрия последнего блока
- За два цикла образуется прямоугольник B с углами:
- Нижняя левая точка: (9,3)
- Верхняя левая точка: (9,12)
- Верхняя правая точка: (19,12)
- Нижняя правая точка: (19,3)
- Рисование выполнялось во время всего блока, поэтому все четыре стороны прямоугольника B нарисованы.
Итог после всей программы
- Два независимых прямоугольника:
- Прямоугольник A: corners (0,0), (0,10), (8,10), (8,0)
- Прямоугольник B: corners (9,3), (9,12), (19,12), (19,3)
- Финальная позиция: (9,3), направление North (наверх).
- Хвост в конце опущен? Нет—the последняя команда заканчивается после рисования, хвост остаётся опущенным во время рисования, поэтому в конце хвост опущен. (Состояние хвоста — опущен, т. к выполнялись команды с рисованием.)
Сводка координат и сегментов
- Рисование прямоугольника A:
- Сегменты: (0,0)-(0,10); (0,10)-(8,10); (8,10)-(8,0); (8,0)-(0,0)
- Рисование прямоугольника B:
- Сегменты: (9,3)-(9,12); (9,12)-(19,12); (19,12)-(19,3); (19,3)-(9,3)
- Финальная позиция: (9,3), направление North.
ASCII-«рисунок» результата (примерная наглядность, крупно масштабированная сетка 0..19 по x и 0..12 по y)
- В этом рисунке звездочки (*) обозначают линии, где рисование было и есть.
- Координаты: x справа, y вверх.
y=12: .........***********
y=11: .........*.........*
y=10: **********.........*
y=9 : *.......**.........*
y=8 : *.......**.........*
y=7 : *.......**.........*
y=6 : *.......**.........*
y=5 : *.......**.........*
y=4 : *.......**.........*
y=3 : *.......************
y=2 : *.......*...........
y=1 : *.......*...........
y=0 : *********...........
Где строки идут сверху вниз (y=12 -> y=0), символы в строках соответствуют x=0..19 слева направо.
Если нужно, могу нарисовать схему в виде другого формата (например, в виде списка координат всех отрезков или в виде SVG-файла). Также могу привести более компактное текстовое представление или проверить конкретную визуализацию на вашем устройстве.