Найти в Дзене
IT-Шпаргалка

Разбор 6 задания ЕГЭ по информатике (Python) | Определение результатов работы простейших алгоритмов

Оглавление

Исполнитель «Черепаха» используется в программировании и математике для визуализации движения по плоскости. В данной статье разберем, что важно знать для решения задач подобного типа на ЕГЭ.

Основные принципы работы исполнителя Черепаха

Черепаха передвигается по плоскости, ориентируясь в декартовой системе координат. В начальном положении её голова направлена вдоль положительного направления оси ординат (вверх), стоит отметить, что в библиотеке turtle она смотрит направо. Движение осуществляется с учетом следующих команд (в скобках обозначены команды из библиотеки turtle в Python):

  • Поднять хвост (penup()) – движение без следа.
  • Опустить хвост (pendown())– движение с оставлением следа.
  • Вперёд n (forward(n)) – передвижение на n единиц в направлении головы.
  • Назад n (back(n)) – передвижение на n единиц в противоположном направлении.
  • Направо m (right(m)) – поворот на m градусов по часовой стрелке.
  • Налево m (left(m))– поворот на m градусов против часовой стрелки.

Для решения данных задач также важно понимать, что такое область пересечения и объединения фигур.

Пересечение и объединение фигур

Пересечение – это общая часть двух фигур, где они накладываются друг на друга.

Объединение – это совокупность всех точек, принадлежащих хотя бы одной из фигур. Оно включает в себя как пересечение, так и оставшиеся части каждой фигуры.

Для вычисления периметра пересечения необходимо:

  1. Определить, где накладываются прямоугольники двух групп.
  2. Рассчитать периметр этой области, исключая повторяющиеся границы.
  3. Использовать графический метод или математические расчеты для точного измерения.

Пример №1

Исполнитель Черепаха действует на плоскости с декартовой системой координат. В начальный момент Черепаха находится в начале координат, её голова направлена вдоль положительного направления оси ординат, хвост опущен. При опущенном хвосте Черепаха оставляет на поле след в виде линии. В каждый конкретный момент известно положение исполнителя и направление его движения. У исполнителя существует 5 команд: Поднять хвост, означающая переход к перемещению без рисования; Опустить хвост, означающая переход в режим рисования; Вперёд n (где n  –  целое число), вызывающая передвижение Черепахи на n единиц в том направлении, куда указывает её голова; Назад n (где n  –  целое число), вызывающая передвижение в противоположном голове направлении; Направо m (где m  –  целое число), вызывающая изменение направления движения на m градусов по часовой стрелке, Налево m (где m  –  целое число), вызывающая изменение направления движения на m градусов против часовой стрелки.

Запись Повтори k [Команда1 Команда2 … КомандаS] означает, что последовательность из S команд повторится k раз.

Черепахе был дан для исполнения следующий алгоритм:

Повтори 10 [Вперёд 22 Направо 90 Вперед 16 Направо 90]

Поднять хвост

Вперед 1 Направо 90 Вперёд 1 Налево 90

Опустить хвост

Повтори 10 [Вперёд 72 Направо 90 Вперёд 79 Направо 90]

Определите периметр области пересечения фигур, ограниченных заданными алгоритмом линиями.

Решение

Разбор алгоритма

Первый блок команд:

Повтори 10 [Вперёд 22 Направо 90 Вперёд 16 Направо 90]

Эти команды формируют прямоугольник с длинами сторон 22 и 16. Поскольку команда повторяется 10 раз, получается 10 таких прямоугольников, выстроенных в ряд.

Второй блок команд:

Поднять хвост
Вперёд 1 Направо 90 Вперёд 1 Налево 90
Опустить хвост

Этот блок команд отвечает за смещение черепахи на 1 единицу вправо и вниз без рисования.

Третий блок команд:

Повтори 10 [Вперёд 72 Направо 90 Вперёд 79 Направо 90]

Этот фрагмент кода создает новый набор из 10 прямоугольников, но с размерами 72 и 79, которые расположены со смещением относительно первых.

Напишем программу на языке программирования Python с использованием библиотеки turtle.

Алгоритм на языке программирования Python (Пример №1)
Алгоритм на языке программирования Python (Пример №1)

Описание алгоритма

  1. Инициализация и настройка:
    Устанавливается коэффициент k = 10, который масштабирует размеры фигур.
    Отключается анимация (tracer(0)) для ускорения отрисовки.
    Устанавливается начальное направление движения (вверх).
    Опускается хвост, чтобы черепаха оставляла след.
  2. Построение первой группы фигур:
    Выполняется цикл из 10 повторений, рисующий 10 прямоугольников размером 22×16, расположенных в ряд.
  3. Смещение без рисования:
    Черепаха поднимает хвост и смещается на 1 шаг вправо и вниз.
    Хвост снова опускается для рисования второй группы фигур.
  4. Построение второй группы фигур:
    Аналогично первой группе, строится еще 10 прямоугольников размером 72×79, но уже со смещением относительно первой группы.
  5. Добавление точек:
    В цикле черепаха проходит координатную сетку от -30k до 30k, ставя красные точки через каждые k единиц.
  6. Завершение работы:
    Выполняется команда done(), завершающая выполнение программы.

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

Отобразим результат работы исполнителя черепаха и укажем длины сторон области пересечения фигур.

Результат работы алгоритма (Пример №1)
Результат работы алгоритма (Пример №1)

21+21+15+15=72

Ответ: 72

Пример №2

Исполнитель Черепаха действует на плоскости с декартовой системой координат. В начальный момент Черепаха находится в начале координат, её голова направлена вдоль положительного направления оси ординат, хвост опущен. При опущенном хвосте Черепаха оставляет на поле след в виде линии. В каждый конкретный момент известно положение исполнителя и направление его движения. У исполнителя существует 5 команд: Поднять хвост, означающая переход к перемещению без рисования; Опустить хвост, означающая переход в режим рисования; Вперёд n (где n  –  целое число), вызывающая передвижение Черепахи на n единиц в том направлении, куда указывает её голова; Назад n (где n  –  целое число), вызывающая передвижение в противоположном голове направлении; Направо m (где m  –  целое число), вызывающая изменение направления движения на m градусов по часовой стрелке, Налево m (где m  –  целое число), вызывающая изменение направления движения на m градусов против часовой стрелки.

Запись Повтори k [Команда1 Команда2 … КомандаS] означает, что последовательность из S команд повторится k раз.

Черепахе был дан для исполнения следующий алгоритм:

Повтори 3 [Вперёд 7 Направо 90 Вперёд 12 Направо 90]

Поднять хвост

Вперёд 4 Направо 90 Вперёд 6 Налево 90

Опустить хвост

Повтори 4 [Вперёд 83 Направо 90 Вперёд 77 Направо 90]

Определите, сколько точек с целочисленными координатами будут находиться внутри объединения фигур, ограниченных заданными алгоритмом линиями, включая точки на границах этого объединения.

Решение:

Алгоритм на языке программирования Python (Пример №2)
Алгоритм на языке программирования Python (Пример №2)

Отобразим результат работы исполнителя черепаха и укажем длины сторон области пересечения фигур.

Можно заметить, что во втором цикле алгоритма рисуется большой прямоугольник. Чтобы не вычислять все эти точки самостоятельно, важно помнить, что в действиях передвижения робота указывается длина его сдвига. А чтобы узнать количество точек, нужно прибавить к длине 1. То есть количество точек на сторонах нашего большого прямоугольника будет равно 78 и 84. Количество точек большого прямоугольника (включая точки на линиях) = 78 × 84.

Найдем количество точек второго прямоугольника, которые не будут относиться к большому прямоугольнику. Для этого его можно визуально разбить на два маленьких прямоугольника размером 4 × 13 и 4 × 6.

Результат работы алгоритма (Пример №2)
Результат работы алгоритма (Пример №2)

Посчитаем количество точек с целочисленными координатами, которые будут находиться внутри объединения фигур, ограниченных заданными алгоритмом линиями, включая точки на границах этого объединения.

78 × 84 + 4 × 13 + 4 × 6 = 6552 + 52 + 24 = 6628

Ответ: 6628

Пример №3

Разберем задачу в которой сложно (но можно) посчитать количество точек самостоятельно. В ней гораздо удобнее использовать способ автоматизированного подсчета точек с помощью метода find_overlapping().

Исполнитель Черепаха действует на плоскости с декартовой системой координат. В начальный момент Черепаха находится в начале координат, её голова направлена вдоль положительного направления оси ординат, хвост опущен. При опущенном хвосте Черепаха оставляет на поле след в виде линии. В каждый конкретный момент известно положение исполнителя и направление его движения. У исполнителя существует 6 команд: Поднять хвост, означающая переход к перемещению без рисования; Опустить хвост, означающая переход в режим рисования; Вперёд n (где n –  целое число), вызывающая передвижение Черепахи на n единиц в том направлении, куда указывает её голова; Назад n (где n  –  целое число), вызывающая передвижение в противоположном голове направлении; Направо m (где m –  целое число), вызывающая изменение направления движения на m градусов по часовой стрелке, Налево m (где m –  целое число), вызывающая изменение направления движения на m градусов против часовой стрелки.

Запись Повтори k [Команда1 Команда2 … КомандаS] означает, что последовательность из S команд повторится k раз.

Черепахе был дан для исполнения следующий алгоритм:

Направо 90

Повтори 3 [Направо 45 Вперёд 10 Направо 45]

Направо 315 Вперёд 10

Повтори 2 [Направо 90 Вперёд 10].

Определите, сколько точек с целочисленными координатами будут находиться внутри области, которая ограничена линией, заданной алгоритмом. Точки на линии учитывать не следует.

Решение:

Алгоритм на языке программирования Python (Пример №3)
Алгоритм на языке программирования Python (Пример №3)

В алгоритме видно, что у нас появляется новые методы:

  • begin_fill() - начать заливку области
  • end_fill() - закончить заливку области
  • getcanvas() - возвращает нам наш холст (рабочую поверхность)

Если нас спрашивают в задании найти количество точек, ограниченной линией, то мы используем canvas.find_overlapping(x,y,x,y) == (5, )

Если нас спрашивают в задании найти количество точек, ограниченной линией и на самой линии, то мы используем canvas.find_overlapping(x,y,x,y) == ()

Ответ: 203.

Понравилась статья? Хочешь лучше понимать информатику, программирование и разбираться в различных программах? Тогда поддержи лайком, подпишись на канал и поделись материалом с друзьями! Если у тебя остались вопросы или что-то стало неясно — смело спрашивай в комментариях!

Читайте также: