Исполнитель Черепаха действует на плоскости с декартовой системой координат. В начальный момент Черепаха находится в начале координат, её голова направлена вдоль положительного направления оси ординат, хвост опущен. При опущенном хвосте Черепаха оставляет на поле след в виде линии. В каждый конкретный момент известно положение исполнителя и направление его движения. У исполнителя существует 5 команд:
- Поднять хвост, означающая переход к перемещению без рисования;
- Опустить хвост, означающая переход в режим рисования;
- Вперёд n (где n – целое число), вызывающая передвижение Черепахи на n единиц в том направлении, куда указывает её голова;
- Назад n (где n – целое число), вызывающая передвижение в противоположном голове направлении;
- Направо m (где m – целое число), вызывающая изменение направления движения на m градусов по часовой стрелке, Налево m (где m – целое число), вызывающая изменение направления движения на m градусов против часовой стрелки.
Запись Повтори k [Команда1 Команда2 … КомандаS] означает, что последовательность из S команд повторится k раз.
Черепахе был дан для исполнения следующий алгоритм:
|
1 2 3 4 5 |
Повтори 9 [Вперёд 22 Направо 90 Вперёд 6 Направо 90] Поднять хвост Вперёд 1 Направо 90 Вперёд 5 Налево 90 Опустить хвост Повтори 9 [Вперёд 53 Направо 90 Вперёд 75 Направо 90] |
Определите периметр области пересечения фигур, ограниченных заданным алгоритмом линиями.
Ответ:
ЕГЭ по информатике Основная волна 07.06.2024 kompege.ru – задание №6
Решение:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
from turtle import * left(90) tracer(0) k = 20 screensize(1000, 1000) for _ in range(9): forward(22 * k) right(90) forward(6 * k) right(90) penup() forward(1 * k) right(90) forward(5 * k) left(90) pendown() for _ in range(9): forward(53 * k) right(90) forward(75 * k) right(90) penup() for x in range(-30, 30): for y in range(-30, 30): goto(x * k, y * k) dot(5, "red") mainloop() |
Давайте разберем ваш код на Python, который использует библиотеку Turtle для выполнения заданного алгоритма, шаг за шагом.
Шаги выполнения кода
- Инициализация черепахи:
12345from turtle import *left(90)tracer(0)k = 20screensize(1000, 1000)- Импортируем все функции из модуля Turtle.
- Поворачиваем черепаху на 90 градусов влево, чтобы она смотрела вверх (положительное направление оси y).
- Отключаем анимацию для ускорения рисования (
tracer(0)). - Устанавливаем масштаб (
k = 20), чтобы черепаха двигалась большими шагами. - Устанавливаем размер экрана (
screensize(1000, 1000)).
- Первый цикл рисования:
12345for _ in range(9):forward(22 * k)right(90)forward(6 * k)right(90)- Цикл повторяется 9 раз.
- Черепаха движется вперед на 22 * k единиц, поворачивает направо на 90 градусов, затем движется вперед на 6 * k единиц и снова поворачивает направо на 90 градусов.
- Этот цикл рисует 9 прямоугольников.
- Перемещение черепахи без рисования:
123456penup()forward(1 * k)right(90)forward(5 * k)left(90)pendown()- Поднимаем хвост, чтобы черепаха перемещалась без рисования.
- Двигаем черепаху вперед на 1 * k единиц, поворачиваем направо на 90 градусов, затем двигаем вперед на 5 * k единиц и поворачиваем налево на 90 градусов.
- Опускаем хвост, чтобы черепаха снова начала рисовать.
- Второй цикл рисования:
12345for _ in range(9):forward(53 * k)right(90)forward(75 * k)right(90)- Цикл повторяется 9 раз.
- Черепаха движется вперед на 53 * k единиц, поворачивает направо на 90 градусов, затем движется вперед на 75 * k единиц и снова поворачивает направо на 90 градусов.
- Этот цикл рисует 9 больших прямоугольников.
- Отметка точек на поле:
123456penup()for x in range(-30, 30):for y in range(-30, 30):goto(x * k, y * k)dot(5, "red")mainloop()- Поднимаем хвост.
- Вложенный цикл проходит по диапазону координат от -30 до 30 для x и y.
- Для каждой точки устанавливается позиция черепахи и рисуется красная точка диаметром 5 пикселей.
mainloop()удерживает окно открытым до тех пор, пока его не закроют вручную.
Определение периметра области пересечения фигур
Алгоритм рисует две пересекающиеся фигуры: маленькие прямоугольники в первом цикле и большие прямоугольники во втором цикле. Периметр области пересечения можно найти путем анализа координат пересечения этих фигур.
Периметр
Чтобы вычислить периметр области пересечения, необходимо проанализировать координаты и найти периметр общей области, что требует дальнейшего программного анализа или геометрических вычислений.
Ответ: 44
