В этой статье рассмотрим алгоритм решения задачи № 6 из ЕГЭ по информатике с помощью библиотеки turtle языка программирования Python.
Термины, которые будем использовать: объединение, пересечение, площадь.
Основные команды исполнителя
Задача № 6 ЕГЭ по информатике на Python с использованием черепашьей графики (turtle) обычно требует исполнителя, который двигается по координатной плоскости и оставляет след. Нужно определить количество точек с целыми координатами, попавших в фигуру, или вычислить её площадь.
from turtle import *
- tracer(0) # отключает автоматическую анимацию. Черепаха движется, но на экране ничего не меняется. Все команды движения выполняются «в фоне» очень быстро. Обязательно использовать вместе с update().
- update() # принудительно перерисовывает экран, показывая конечный результат.
- up() # поднять перо (не рисовать при движении).
- down() # опустить перо (рисовать).
- goto(x, y) # переместиться в точку (x, y).
- forward(d) # вперёд на d пикселей.
- backward(d) # назад.
- left(angle) # повернуть налево.
- right(angle) # направо.
- setheading(deg) # установить направление (0 — восток, 90 — север).
- dot(size, color) # поставить точку.
- screensize(x, y) # устанавливает размер окна x на y пикселей.
- exitonclick() # чтобы график закрывался при нажатии на него, а не автоматически при завершении программы.
Объединение и пересечение
Объединение двух фигур — это новая фигура, в которую входят все точки, которые принадлежат хотя бы одной из исходных фигур.
Представь: две вырезанные из бумаги фигуры наложили друг на друга и обвели их общий внешний контур. В объединение попадают и области, которые были только у первой фигуры, и только у второй, и те, где они перекрываются (один раз, не дважды). Если нужно подсчитать количество целых точек в объединении, то нельзя просто сложить точки каждой фигуры — придётся вычесть пересечение, чтобы не считать общую область дважды.
Пересечение двух фигур — это область, которая принадлежит одновременно и первой, и второй фигуре. Это их общая часть. Если фигуры перекрываются, пересечение может быть пустым, точкой, отрезком или целой фигурой. Поэтому, зная точки в каждой фигуре и в их пересечении, легко найти объединение.
Количество точек и площадь фигуры
Быстрее всего количество точек внутри прямоугольника находится так: считаем точки по длине и по ширине фигуры, а затем перемножаем. Если границы входят в подсчёт — учитываем точки на них; если не входят — берём ближайшие точки внутри.
Площадь фигуры считается не по точкам, а по сторонам: нужно найти длину каждой стороны (она на 1 меньше количества точек на стороне).
Периметр фигуры — это сумма длин сторон.
Задания
Задание 1
Исполнитель Черепаха действует на плоскости с декартовой системой координат. В начальный момент Черепаха находится в начале координат, её голова направлена вдоль положительного направления оси ординат, хвост опущен. При опущенном хвосте Черепаха оставляет на поле след в виде линии. В каждый конкретный момент известно положение исполнителя и направление его движения.
У исполнителя существует 6 команд:
- Поднять хвост, означающая переход к перемещению без рисования;
- Опустить хвост, означающая переход в режим рисования;
- Вперёд n (где n — целое число), вызывающая передвижение Черепахи на n единиц в том направлении, куда указывает её голова;
- Назад n (где n — целое число), вызывающая передвижение в противоположном голове направлении;
- Направо m (где m — целое число), вызывающая изменение направления движения на m градусов по часовой стрелке;
- Налево m (где m — целое число), вызывающая изменение направления движения на m градусов против часовой стрелки.
Запись Повтори k [Команда1 Команда2 … КомандаS] означает, что последовательность из S команд повторится k раз.
Черепахе был дан для исполнения следующий алгоритм:
Повтори 21 [Вперёд 6 Направо 60]
Определите, сколько точек с целочисленными координатами будут находиться внутри области, ограниченной линией, заданной данным алгоритмом. Точки на линии учитывать не следует.
Чтобы начать пользоваться черепахой на Python, сначала импортируем все возможные действия с ней из библиотеки turtle.
Черепаха на Python, в отличие от КуМира, по умолчанию смотрит направо, а не вперёд, как это просят по условию. Поэтому перед выполнением алгоритма нужно повернуть черепаху на 90 градусов влево с помощью функции left() (можно записать как lt()).
Начинаем описывать действия: 21 раз мы будем идти вперёд на 6 с помощью функции forward() (по-другому можно записать fd()), после — вправо на 60 с помощью функции right () (можно её записать просто rt()).
Чтобы поработать с размером экрана и самой фигуры, создадим переменную-константу, на которую мы будем умножать каждое движение (вперёд или назад). Так наша фигура увеличится в какое-то количество раз.
Чтобы увеличить скорость рисования, используем функцию tracer(0) — ноль в скобках задаёт максимальную скорость. Если программа при выполнении сразу же закрывается, в конце добавляем одну из функций: done(), update() или exitonclick(). Последняя из них закрывает окно только после щелчка мышью по рисунку.
Чтобы поставить точки на экран, создадим цикл в цикле для координат x и y (диапазоны подбираем для каждого задания заново, ведь готовый рисунок может смещаться в разные стороны). В каждой точке выполняем goto(x, y), а затем рисуем её функцией dot(): в скобках укажем размер точки (цифрой) и желаемый цвет — в кавычках. Не забываем, что координаты тоже нужно умножить на константу, ведь мы увеличили весь рисунок.
Чтобы рисунок можно было прокручивать, увеличим поле функцией screensize(1000, 1000) (числа в скобках можно увеличивать).
Программа для решения задания:
from turtle import *
tracer(0) # макс. скорость
screensize(2000, 2000)
c = 30 # константа для увеличения рисунка
lt(90) # обязательно направляем черепаху посмотреть вверх!
for i in range(21): # условие задачи
fd(6*c)
rt(60)
up()
for x in range(-20, 20):
for y in range(-20, 20):
goto(x*c,y*c) # определяем места для точек
dot(2, ‘blue’) # ставим точку
update()
exitonclick()
В итоге получим:

Теперь посчитаем точки с целочисленными координатами внутри области, ограниченной построенной линией; точки на самой линии не учитываем. Получаем 90.
Ответ: 90.
Задание 2
Исполнитель Черепаха действует на плоскости с декартовой системой координат. В начальный момент Черепаха находится в начале координат, её голова направлена вдоль положительного направления оси ординат, хвост опущен. При опущенном хвосте Черепаха оставляет на поле след в виде линии. В каждый конкретный момент известно положение исполнителя и направление его движения.
У исполнителя существует 6 команд:
- Поднять хвост, означающая переход к перемещению без рисования;
- Опустить хвост, означающая переход в режим рисования;
- Вперёд n (где n — целое число), вызывающая передвижение Черепахи на n единиц в том направлении, куда указывает её голова;
- Назад n (где n — целое число), вызывающая передвижение в противоположном голове направлении;
- Направо m (где m — целое число), вызывающая изменение направления движения на m градусов по часовой стрелке;
- Налево m (где m — целое число), вызывающая изменение направления движения на m градусов против часовой стрелки.
Запись Повтори k [Команда1 Команда2 … КомандаS] означает, что последовательность из S команд повторится k раз.
Черепахе был дан для исполнения следующий алгоритм:
Направо 45 Повтори 7 [Вперёд 6 Направо 45 Вперёд 12 Направо 135]
Определите, сколько точек с целочисленными координатами будут находиться внутри области, которая ограничена линией, заданной алгоритмом. Точки на линии учитывать не следует.
Программа для решения задания:
from turtle import *
tracer(0) # макс. скорость
c = 30 # масштаб
lt(90) # в Python черепаха смотрит вправо, поэтому поворачиваем
screensize(2000, 2000) # увеличиваем поле
rt(45)
for i in range(7): # программа из задания
fd(6*c)
rt(45)
fd(12*c)
rt(135)
up() # поднимаем хвост, чтобы не рисовать при перемещении
update()
for x in range(-20, 20): # строим точки на плоскости
for y in range(-20, 20):
goto(x*c,y*c)
dot(3, ‘red’)
exitonclick() # чтобы рисунок не закрывался сразу

Ответ: 44.
Задание 3
Исполнитель Черепаха действует на плоскости с декартовой системой координат. В начальный момент Черепаха находится в начале координат, её голова направлена вдоль положительного направления оси ординат, хвост опущен. При опущенном хвосте Черепаха оставляет на поле след в виде линии. В каждый конкретный момент известно положение исполнителя и направление его движения.
У исполнителя существует 6 команд:
- Поднять хвост, означающая переход к перемещению без рисования;
- Опустить хвост, означающая переход в режим рисования;
- Вперёд n (где n — целое число), вызывающая передвижение Черепахи на n единиц в том направлении, куда указывает её голова;
- Назад n (где n — целое число), вызывающая передвижение в противоположном голове направлении;
- Направо m (где m — целое число), вызывающая изменение направления движения на m градусов по часовой стрелке;
- Налево m (где m — целое число), вызывающая изменение направления движения на m градусов против часовой стрелки.
Запись Повтори k [Команда1 Команда2 … КомандаS] означает, что последовательность из S команд повторится k раз.
Черепахе был дан для исполнения следующий алгоритм:
Повтори 9 [Вперёд 29 Направо 90 Вперёд 17 Направо 90]
Поднять хвост
Вперёд 5 Направо 90 Вперёд 1 Налево 90
Опустить хвост
Повтори 9 [Вперёд 64 Направо 90 Вперёд 48 Направо 90]
Определите количество точек внутри пересечения фигур. Точки на линиях следует учитывать.
Программа для решения задания:
from turtle import *
tracer(0) # ускоряем отрисовку
screensize(4000,4000) # размер поля
c = 10 # масштаб
left(90) # разворачиваем голову, чтобы всё было верно
down() # опускаем хвост
for i in range(9):
forward(c * 29)
right(90)
forward(c * 17)
right(90)
up()
forward(5*c)
right(90)
forward(1 * c)
left(90)
down()
for i in range(9):
forward(64*c)
right(90)
forward(48*c)
right(90)
up() # поднимаем хвост, чтобы поставить точки
for x in range(-40, 40):
for y in range(-40, 40):
goto(x * c, y * c) # прыгаем в указанную координату
dot(3, ‘red’) # ставим точку
update() # перерисовываем экран
exitonclick()
В задании нужно найти количество точек внутри пересечения фигур. Запустим приведённый выше код и получим такой рисунок:

Подсчитываем количество точек в пересечении — там, где фигуры накладываются друг на друга, — учитывая точки на линиях пересечения.

Ответ: 17 * 25 = 425.
Заключение
Задача № 6 с черепашьей графикой решается по единому шаблону: переносим алгоритм из условия в код, рисуем фигуру, расставляем сетку точек с целыми координатами и считаем нужную область. Главное — не забыть повернуть черепаху на 90° в начале и вызвать update() в конце, иначе рисунок или точки не отобразятся. А при подсчёте всегда внимательно перечитывай условие: учитывать ли точки на границе и что именно ищем — точки внутри фигуры, в их пересечении или объединении. Освоив этот подход, ты сможешь решать практически любой вариант задания № 6.