Задание 6: Анализ алгоритмов. Черепаха
- Тема: определение результата работы исполнителя (чаще всего - Черепаха).
- Ответ: целое число (координаты, площадь, количество точек).
- Балл: 1. Время: 4 мин. Сложность: базовый (средний процент выполнения: 39%).
Общая информация
Задание 6 проверяет умение анализировать работу исполнителей, особенно исполнителя «Черепаха». Нужно пошагово выполнить алгоритм и определить результат.
Задания: N6.Черепашка
Исполнитель «Черепаха»
Черепаха действует на плоскости с декартовой системой координат. В начальный момент она находится в начале координат (0, 0), голова направлена вверх (вдоль положительной оси Y), хвост опущен.
Основные команды
- Вперёд n — движение на n единиц в направлении головы
- Назад n — движение в противоположном направлении на n единиц
- Повтори k [команды] — повторение последовательности команд k раз
- Опустить хвост — начало рисования (следующий путь будет нарисован)
- Поднять хвост — движение без рисования (следующий путь не рисуется)
- Направо m — поворот на m градусов по часовой стрелке
- Налево m — поворот на m градусов против часовой стрелки
Полезные команды turtle для ЕГЭ
| Команда | Что делает | Когда использовать в задаче |
|---|---|---|
from turtle import * |
Импортирует основные функции turtle |
Почти в каждом решении |
left(angle) |
Поворот влево на angle градусов |
Чтобы выставить стартовое направление (обычно left(90)) |
right(angle) |
Поворот вправо на angle градусов |
Команды «Направо m» |
forward(n) |
Движение вперёд на n |
Команды «Вперёд n» |
backward(n) |
Движение назад на n |
Команды «Назад n» |
penup() |
Поднимает перо (без рисования) | Команда «Поднять хвост» |
pendown() |
Опускает перо (рисует) | Команда «Опустить хвост» |
setpos(x, y) |
Перемещает в точку (x, y) |
Обход точек/проверка внутренних точек |
dot() |
Ставит точку в текущей позиции | Визуализация целочисленных точек |
screensize(w, h) |
Размер рабочей области | Когда фигура большая и не помещается |
setup(w, h) |
Размер окна программы | Для удобного просмотра рисунка |
speed(0) |
Максимальная скорость рисования | Чтобы ускорить построение |
tracer(0) |
Отключает покадровую анимацию | Чтобы рисовать сразу весь результат |
update() |
Обновляет экран вручную | После tracer(0) |
hideturtle() |
Скрывает значок черепахи | Чтобы не мешал при подсчёте |
done() |
Завершает программу и удерживает окно | В конце скрипта |
Мини-шаблон для задач ЕГЭ:
from turtle import *
left(90)
k = 20
screensize(2000, 2000)
tracer(0)
pendown()
# ... команды из условия ...
update()
done()
Направления движения
При поворотах направление изменяется следующим образом:
- Начальное направление: ↑ (вверх, положительная ось Y)
- Направо 90°: → (вправо, положительная ось X)
- Направо 180°: ↓ (вниз, отрицательная ось Y)
- Направо 270°: ← (влево, отрицательная ось X)
- Налево 90°: ← (влево, отрицательная ось X)
- Налево 180°: ↓ (вниз, отрицательная ось Y)
- Налево 270°: → (вправо, положительная ось X)
Типы заданий
Тип 1: Работа с отрезками
Формулировка: Определите площадь или периметр фигуры, нарисованной Черепахой.
Особенности:
- Нужно найти площадь замкнутой фигуры
- Или периметр фигуры
- Может быть несколько фигур
Тип 2: Работа с точками
Формулировка: Определите количество точек с целочисленными координатами внутри объединения или пересечения фигур.
Особенности:
- Нужно найти точки с целыми координатами
- Может быть объединение или пересечение фигур
- Формула для объединения: количество точек фигуры 1 + количество точек фигуры 2 − количество точек пересечения
Алгоритм решения через таблицу (аналитический)
Сюда же метод решения через рисунок (графеский) - просто чертим от руки путь черепахи
Шаг 1: Подготовка
Зафиксировать начальное состояние:
- Координаты: (0, 0)
- Направление: вверх (положительная ось Y)
- Хвост: опущен (рисует)
Выписать все команды алгоритма
Шаг 2: Трассировка
Составить таблицу трассировки:
Шаг Команда Координаты (x, y) Направление Хвост 0 - (0, 0) ↑ опущен 1 Вперёд 5 (0, 5) ↑ опущен 2 Направо 90 (0, 5) → опущен ... ... ... ... ... Выполнять команды пошагово:
- При движении изменяются координаты
- При повороте изменяется направление
- При поднятии/опускании хвоста изменяется режим рисования
Учитывать повторения:
- Команда "Повтори k [команды]" выполняется k раз
- Все команды внутри повторения выполняются последовательно
Шаг 3: Вычисление результата
Для площади:
- Определить фигуру (прямоугольник, треугольник и т.д.)
- Вычислить площадь по формуле
- Или использовать формулу Пика: S = I + B/2 - 1, где I - точки внутри, B - точки на границе
Для количества точек:
- Найти все точки с целыми координатами внутри фигуры
- Для объединения: сложить точки обеих фигур, вычесть пересечение
- Для пересечения: найти общие точки
Шаг 4: Проверка
- Проверить трассировку - убедиться, что все команды выполнены
- Проверить вычисления - пересчитать площадь или количество точек
- Записать ответ в требуемом формате
Алгоритм решения через Python
Шаг 1: Подготовка
Для этого понадобится библиотека turtle
from turtle import *
- Зафиксировать начальное состояние:
left(90) # поворот черепахи на ось у (в библиотеке она на оси х)
k = 20 # коэффициент отвечает за масштаб точек на листе
screensize(2000,2000) # размер окна
tracer(0) # рисовать все точки сразу
pendown() # опустить хвость (режим рисования)
Шаг 2: Алгоритм
Для повторяющихся:
for _ in range(5):
forward(30 * k) # вперед (число из задания умножить на коэффициент)
right(90) # поворот направо
forward(40 * k)
right(90)
penup # поднять хвост (режим не-рисования)
forward(20 * k)
right(90)
forward(5 * k)
right(90)
pendown() # опустить хвость
Шаг 3: Построение точек
for x in range(-50, 50): # для оси х берем числа больше чем есть в задании
for y in range(-50, 50): # для оси у
setpos(x * k, y * k) # устанавливаем значения (масштаб)
dot() # обозначаем точки
done()
Шаг 4: Проверка
Запустить код, проверить масштаб, откорректировать значение k при необходимости, затем посчитать количество точек и/или вычислить периметр/площадь
Пример решения аналитически
Задача: Начальное положение:
- координаты: (0, 0)
- направление: вверх (положительная ось Y)
- хвост: опущен (рисует)
Алгоритм:
- Повтори 5 [Вперёд 30 Направо 90 Вперёд 40 Направо 90]
- Поднять хвост
- Вперёд 20 Направо 90 Вперёд 5 Направо 90
- Опустить хвост
- Повтори 7 [Вперёд 10 Направо 90]
Результат:
- Определите периметр области пересечения фигур, ограниченных заданными алгоритмом линиями.
Решение:
Начальное состояние
- Точка:
(0, 0) - Направление: вверх
- Хвост: опущен
- Точка:
Таблица трассировки (по блокам команд)
1 блок:
- Повтори 5 [Вперёд 30 Направо 90 Вперёд 40 Направо 90] 1 из 5:
| Шаг | Команда/блок | Положение после блока | Направление | Хвост |
|---|---|---|---|---|
| 0 | - | 0, 0 | вверх | + |
| 1 | Вперёд | 0, 30 | вверх | + |
| 2 | Направо | 0, 30 | направо | + |
| 3 | Направо | 40, 30 | направо | + |
| 4 | Вперёд | 40, 30 | вниз | + |
2 из 5:
| Шаг | Команда/блок | Положение после блока | Направление | Хвост |
|---|---|---|---|---|
| 1 | Вперёд | 40, 0 | вниз | + |
| 2 | Направо | 40, 0 | направо | + |
| 3 | Направо | 0, 0 | направо | + |
| 4 | Вперёд | 0, 0 | вверх | + |
Так как черепаха вернулась в начальную точку, контур замкнулся, остальные проходы будут аналогичными. Последний проход нечетный, поэтому берем последний результат 1 прохода
2 блок:
- Поднять хвост
- Вперёд 20 Направо 90 Вперёд 5 Направо 90
- Опустить хвост
| Шаг | Команда/блок | Положение после блока | Направление | Хвост |
|---|---|---|---|---|
| 1 | Поднять хвост | 40, 30 | вниз | - |
| 2 | Вперёд | 40, 10 | вниз | - |
| 3 | Направо | 40, 10 | налево | - |
| 4 | Вперёд | 35, 10 | налево | - |
| 5 | Направо | 35, 10 | вверх | - |
| 6 | Опустить хвост | 35, 10 | вверх | + |
3 блок:
- Повтори 7 [Вперёд 10 Направо 90] 1 из 7:
| Шаг | Команда/блок | Положение после блока | Направление | Хвост |
|---|---|---|---|---|
| 1 | Вперёд | 35, 20 | вверх | + |
| 2 | Направо | 35, 20 | направо | + |
2 из 7:
| Шаг | Команда/блок | Положение после блока | Направление | Хвост |
|---|---|---|---|---|
| 1 | Вперёд | 45, 20 | направо | + |
| 2 | Направо | 45, 20 | вниз | + |
3 из 7:
| Шаг | Команда/блок | Положение после блока | Направление | Хвост |
|---|---|---|---|---|
| 1 | Вперёд | 45, 10 | вниз | + |
| 2 | Направо | 45, 10 | налево | + |
4 из 7:
| Шаг | Команда/блок | Положение после блока | Направление | Хвост |
|---|---|---|---|---|
| 1 | Вперёд | 35, 10 | налево | + |
| 2 | Направо | 35, 10 | вверх | + |
После этого черепаха будет в точке (35,10) как и в конце второго блока, все остальные команды будут аналогичны.
- Находим пересечение фигур
- Фигура A: прямоугольник
x in [0, 40],y in [0, 30] - Фигура B: квадрат
x in [35, 45],y in [10, 20] - Пересечение: прямоугольник
x in [35, 40],y in [10, 20] - Размеры пересечения: ширина
5, высота10
- Фигура A: прямоугольник
Периметр пересечения
P = 2 * (a + b) = 2 * (5 + 10) = 30
Ответ:
30
Пример решения Python
from turtle import *
left(90)
k = 20
screensize(2000, 2000)
tracer(0)
pendown()
# Фигура A
for _ in range(5):
forward(30 * k)
right(90)
forward(40 * k)
right(90)
# Смещение без рисования
penup()
forward(20 * k)
right(90)
forward(5 * k)
right(90)
pendown()
# Фигура B
for _ in range(7):
forward(10 * k)
right(90)
update()
done()
После построения видно:
- A:
x in [0, 40],y in [0, 30] - B:
x in [35, 45],y in [10, 20] - Пересечение:
5 x 10 - Периметр:
30
Формула для подсчета точек
Формула для подсчета периметра
Составлено: Лилия С.
Источники: КИМ ЕГЭ 2026, открытый банк ФИПИ, спецификация ЕГЭ по информатике
Удачи на экзамене! 🎓