ЕГЭ по информатике 2026 · задание 6 из 27
ЕГЭ по информатике 2026, задание 6: исполнитель Черепаха
Задание 6 — базовое, 1 балл. Нужно определить результат работы исполнителя с ограниченным набором команд, чаще всего Черепахи: «вперёд n», «направо m», «налево m», цикл «повтори». Спрашивают, сколько точек с целочисленными координатами лежит внутри фигуры, на границе или и внутри, и на границе.
Модуль turtle на экзамене может не показать окно. Надёжнее перевести команды в координаты.
Конспект
- Черепаха обычно смотрит вдоль положительной оси Y, если в условии не сказано иное. В части вариантов старт — направление вправо. Читайте первую строку условия и не подставляйте «привычное» направление.
- Команда «направо 90» поворачивает по часовой стрелке. После четырёх таких поворотов направление исходное.
- Выпишите вершины. Часто получается прямоугольник, прямоугольный треугольник или фигура из двух прямоугольников.
- Для прямоугольника со сторонами a и b, стороны параллельны осям, точки строго внутри:
(a - 1) * (b - 1). Если стороны не целые, сначала определите, какие целые x и y попадают в интервал. - Если граница учитывается, формула «минус один» не подходит. Либо добавьте точки сторон, либо переберите целые точки в ограничивающем прямоугольнике и проверьте принадлежность.
- Цикл «повтори k» дублирует маршрут k раз, но с новым направлением. Рисуйте именно столько сторон, сколько выполнений цикла.
Вопрос «внутри или на границе» и вопрос «только внутри» дают разные ответы. Это самая частая потеря балла.
Шаблон на Python
Шаблон ведёт перо и считает целые точки внутри многоугольника, включая границу. Направление 0 — вверх, 1 — вправо, 2 — вниз, 3 — влево. Подставьте команды своего варианта и флаг border.
points = [(0, 0)]
x = y = 0
direction = 0 # 0 вверх, 1 вправо, 2 вниз, 3 влево
dirs = [(0, 1), (1, 0), (0, -1), (-1, 0)]
def forward(n):
global x, y
dx, dy = dirs[direction]
x += dx * n
y += dy * n
points.append((x, y))
def right(deg):
global direction
direction = (direction + deg // 90) % 4
def left(deg):
right(360 - deg)
# пример: повтори 4 [вперёд 5 направо 90]
for _ in range(4):
forward(5)
right(90)
def on_border(px, py):
for (x1, y1), (x2, y2) in zip(points, points[1:]):
if x1 == x2 == px and min(y1, y2) <= py <= max(y1, y2):
return True
if y1 == y2 == py and min(x1, x2) <= px <= max(x1, x2):
return True
return False
def inside(px, py):
# луч вправо, чётность пересечений; подходит для простого многоугольника
cnt = 0
for (x1, y1), (x2, y2) in zip(points, points[1:]):
if (y1 > py) != (y2 > py):
xint = x1 + (py - y1) * (x2 - x1) / (y2 - y1)
if px < xint:
cnt += 1
return cnt % 2 == 1
xs = [p[0] for p in points]
ys = [p[1] for p in points]
ans = 0
for px in range(min(xs), max(xs) + 1):
for py in range(min(ys), max(ys) + 1):
if inside(px, py) or on_border(px, py):
ans += 1
print(ans, points)Если стороны не параллельны осям, проверку границы усложните: точка лежит на отрезке, если расстояние до прямой почти ноль и проекция попадает внутрь отрезка. Для типового прямоугольника достаточно формулы.
Типичные ошибки
- Неверное начальное направление.
- «Направо» посчитано против часовой стрелки.
- Граница включена, хотя условие просит внутренние точки.
- Команда «вперёд» применена до поворота, хотя в цикле порядок другой.
Попробуйте объяснить с Мишкой
Бесплатный ИИ-репетитор объяснит любую тему так, как вам понятно — шаг за шагом.
Начать бесплатно