9 мин чтения

ЕГЭ по информатике 2026 · задание 6 из 27

ЕГЭ по информатике 2026, задание 6: исполнитель Черепаха

Задание 6 — базовое, 1 балл. Нужно определить результат работы исполнителя с ограниченным набором команд, чаще всего Черепахи: «вперёд n», «направо m», «налево m», цикл «повтори». Спрашивают, сколько точек с целочисленными координатами лежит внутри фигуры, на границе или и внутри, и на границе.

Модуль turtle на экзамене может не показать окно. Надёжнее перевести команды в координаты.

Конспект

1. Черепаха обычно смотрит вдоль положительной оси Y, если в условии не сказано иное. В части вариантов старт — направление вправо. Читайте первую строку условия и не подставляйте «привычное» направление.

2. Команда «направо 90» поворачивает по часовой стрелке. После четырёх таких поворотов направление исходное.

3. Выпишите вершины. Часто получается прямоугольник, прямоугольный треугольник или фигура из двух прямоугольников.

4. Для прямоугольника со сторонами a и b, стороны параллельны осям, точки строго внутри: (a - 1) * (b - 1). Если стороны не целые, сначала определите, какие целые x и y попадают в интервал.

5. Если граница учитывается, формула «минус один» не подходит. Либо добавьте точки сторон, либо переберите целые точки в ограничивающем прямоугольнике и проверьте принадлежность.

6. Цикл «повтори 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)

Если стороны не параллельны осям, проверку границы усложните: точка лежит на отрезке, если расстояние до прямой почти ноль и проекция попадает внутрь отрезка. Для типового прямоугольника достаточно формулы.

Типичные ошибки

  • Неверное начальное направление.
  • «Направо» посчитано против часовой стрелки.
  • Граница включена, хотя условие просит внутренние точки.
  • Команда «вперёд» применена до поворота, хотя в цикле порядок другой.

Попробуйте объяснить с Мишкой

Бесплатный ИИ-репетитор объяснит любую тему так, как вам понятно — шаг за шагом.

Начать бесплатно