К содержанию

Задание 6

Простейшие алгоритмы для исполнителей

Как восстановить фигуры по командам Черепахи и посчитать целые точки внутри — вручную, рисунком и программой.

6 подтем · 35 задач + 7 дополнительных · базовый · ≈ 4 мин

Подтема 1 из 6

Команды и след

Как Черепаха выполняет команды и где окажутся фигуры задачи темы.

Как устроена тема

В задании 6 Черепаха рисует фигуры по командам, а спрашивают, сколько точек с целыми координатами лежит внутри фигуры или в общей части двух фигур. Вот задача, которую мы будем решать всю тему:

«Черепаха находится в начале координат, её голова направлена вдоль положительного направления оси ординат, хвост опущен. Ей дали алгоритм:

Повтори 2 [Вперёд 6 Направо 90 Вперёд 8 Направо 90]Поднять хвостВперёд 2 Направо 90 Вперёд 3 Налево 90Опустить хвостПовтори 2 [Вперёд 5 Направо 90 Вперёд 7 Направо 90]

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

Сначала по командам восстанавливают фигуры, потом считают точки той области, о которой спрашивают. Разберём, что сказано в условии:

В условииЧто это значит
начало координат, голова вдоль оси ординат, хвост опущенЧерепаха стоит в (0; 0), смотрит вверх и сразу рисует
фигуры, ограниченные линиями алгоритмаалгоритм рисует два прямоугольника
пересечение фигуробщая часть двух прямоугольников
точки с целочисленными координатамиточки вроде (3; 2), а не (2,5; 1)
точки на линиях учитыватьточки на сторонах тоже считаем

Тема состоит из шести подтем — у каждой своя страница. Идём по ним по порядку:

  1. Команды и след — ты сейчас здесь.
  2. Точки внутри и на границе — сколько точек в одной фигуре.
  3. Две фигуры — пересечение и ответ задачи темы: 30.
  4. Рисунок программой — та же задача рисунком на turtle.
  5. Наклонные стороны — фигуры, у которых стороны не по клеткам.
  6. Подсчёт программой — дополнительный урок: считаем точки без рисунка.

Состояние Черепахи

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

Положение записывают координатами (x; y): x отсчитывают вправо от начала координат, y — вверх, отрицательные значения — влево и вниз. Когда хвост опущен, Черепаха оставляет за собой линию; когда поднят — перемещается без следа.

Начальное состояние в условии описано словами. Их нужно перевести:

В условииЗначит
находится в начале координатв точке (0; 0)
голова направлена вдоль положительного направления оси ординатсмотрит вверх
голова направлена вдоль положительного направления оси абсцисссмотрит вправо
хвост опущенперемещения рисуют линию

Начальное направление важно: та же программа при старте вправо нарисует фигуру, повёрнутую на 90°.

Движение и поворот

«Вперёд» и «Назад» меняют положение, «Направо» и «Налево» — только направление.

«Вперёд n» перемещает Черепаху на n единиц туда, куда смотрит голова. «Назад n» — на n единиц в обратную сторону, а голова при этом продолжает смотреть туда же. «Направо m» поворачивает голову на m градусов по часовой стрелке, «Налево m» — против часовой; Черепаха остаётся на месте.

Пусть Черепаха в (2; 3) и смотрит вверх. Каждая команда из таблицы выполняется из этого состояния:

КомандаПоложениеГолова
Вперёд 4(2; 7)вверх
Назад 4(2; −1)вверх
Направо 90(2; 3)вправо
Налево 90(2; 3)влево
Направо 180(2; 3)вниз

Поворот отсчитывают от текущего направления: если Черепаха уже смотрит вправо, «Направо 90» направит её вниз, а не вправо.

Повтори

«Повтори k [ … ]» выполняет команды в скобках k раз подряд, в том же порядке.

Первая часть алгоритма темы — «Повтори 2 [Вперёд 6 Направо 90 Вперёд 8 Направо 90]». За первое повторение Черепаха проходит 6 вверх, поворачивает вправо, проходит 8 вправо и поворачивает вниз. За второе — 6 вниз и 8 влево. Получается прямоугольник 8 × 6 с вершинами (0; 0), (0; 6), (8; 6), (8; 0), а Черепаха снова в (0; 0) и смотрит вверх.

За одно повторение здесь рисуются две стороны, поэтому для четырёх сторон хватает двух повторений: число повторений не обязано совпадать с числом сторон.

Лишние повторения проходят по уже нарисованным линиям: фигура не меняется, а положение Черепахи — меняется. «Повтори 5 [Вперёд 3 Направо 90]» рисует квадрат 3 × 3, а пятое повторение ещё раз проходит его левую сторону — Черепаха заканчивает в (0; 3). Если после такого блока идут другие команды, они начнутся именно оттуда.

Переход ко второй фигуре

С поднятым хвостом Черепаха перемещается без линии: так она переходит к началу следующей фигуры.

После первого прямоугольника Черепаха в (0; 0) и смотрит вверх. Хвост поднимается, и выполняются четыре команды:

КомандаПоложениеГолова
Вперёд 2(0; 2)вверх
Направо 90(0; 2)вправо
Вперёд 3(3; 2)вправо
Налево 90(3; 2)вверх

Хвост опускается в (3; 2), голова смотрит вверх. Второй блок рисует оттуда прямоугольник высотой 5 и шириной 7, поэтому вторая фигура занимает 3 ≤ x ≤ 10 и 2 ≤ y ≤ 7. Весь алгоритм по шагам:

  1. Начало: (0; 0), голова вверх, хвост опущен.
  2. Вперёд 6: теперь (0; 6).
  3. Направо 90: голова вправо, положение то же.
  4. Вперёд 8: теперь (8; 6).
  5. Направо 90: голова вниз, положение то же.
  6. Вперёд 6: теперь (8; 0).
  7. Направо 90: голова влево, положение то же.
  8. Вперёд 8: теперь (0; 0).
  9. Направо 90: голова вверх, положение то же.
  10. Хвост поднят: дальше перемещения без линии.
  11. Вперёд 2: теперь (0; 2).
  12. Направо 90: голова вправо, положение то же.
  13. Вперёд 3: теперь (3; 2).
  14. Налево 90: голова вверх, положение то же.
  15. Хвост опущен: перемещения снова рисуют.
  16. Вперёд 5: теперь (3; 7).
  17. Направо 90: голова вправо, положение то же.
  18. Вперёд 7: теперь (10; 7).
  19. Направо 90: голова вниз, положение то же.
  20. Вперёд 5: теперь (10; 2).
  21. Направо 90: голова влево, положение то же.
  22. Вперёд 7: теперь (3; 2).
  23. Направо 90: голова вверх, положение то же.

Итак, первая фигура — прямоугольник 0 ≤ x ≤ 8, 0 ≤ y ≤ 6, вторая — 3 ≤ x ≤ 10, 2 ≤ y ≤ 7. Точки одной фигуры считаем в подтеме 2, общие точки двух — в подтеме 3.

Итого

  • Состояниеположение (x; y), направление головы и хвост
  • Вперёд, Назадменяют положение; «Назад» не поворачивает голову
  • Направо, Налевоменяют только направление, от текущего
  • Повтори kблок k раз по порядку; лишние повторы идут по тем же линиям
  • Хвост поднятперемещение без линии — переход ко второй фигуре

Проверьте себя

Ответь сначала сам, потом открой ответ.

Вопрос 1

Черепаха в (0; 0), голова вверх. Выполни команды:

Вперёд 5Направо 90Вперёд 3Назад 1Налево 90Вперёд 2

Где окажется Черепаха и куда будет смотреть?

ОтветСкрыть ответ
Ответ
(2; 7), голова вверх: (0; 5), поворот вправо, (3; 5), назад к (2; 5), поворот вверх, (2; 7).
Вопрос 2
Черепаха в (0; 0), голова вверх. Выполни: Вперёд 4, Налево 90, Вперёд 3, Назад 5, Направо 90. Где Черепаха и куда она смотрит?
ОтветСкрыть ответ
Ответ
(2; 4), голова вверх: (0; 4), голова влево, (−3; 4), «Назад 5» — вправо до (2; 4), голова всё ещё влево, «Направо 90» — вверх.
Вопрос 3
Черепаха в (0; 0), голова вверх. Где она окажется после «Повтори 3 [Вперёд 2 Направо 90]»? Нарисован ли замкнутый квадрат?
ОтветСкрыть ответ
Ответ
(2; 0), голова влево: нарисованы только три стороны квадрата 2 × 2, четвёртой нет.
Вопрос 4
Черепаха в (0; 0), голова вверх, алгоритм «Повтори 5 [Вперёд 3 Направо 90 Вперёд 2 Направо 90]». Где окажется Черепаха и куда будет смотреть?
ОтветСкрыть ответ
Ответ
(2; 3), голова вниз: два повторения обходят прямоугольник 2 × 3 и возвращают в начало, пятое проходит ещё две стороны.
Вопрос 5
После «Повтори 2 [Вперёд 6 Направо 90 Вперёд 8 Направо 90]» выполнили: Поднять хвост, Вперёд 4, Направо 90, Вперёд 1, Налево 90, Опустить хвост. Откуда начнётся вторая фигура?
ОтветСкрыть ответ
Ответ
Из (1; 4), голова вверх: прямоугольник вернул Черепаху в (0; 0) головой вверх, дальше 4 вверх и 1 вправо без линии.

Практика

Для проверки ответов нужен JavaScript. Условия, подсказки и решения доступны ниже.

Назад без разворота

Черепаха находится в начале координат, голова направлена вверх. Ей дали алгоритм «Вперёд 4 Направо 90 Вперёд 3 Назад 7 Налево 90 Вперёд 2». Определи координаты Черепахи после выполнения алгоритма.

Введите координаты x и y через пробел.

Лестница из четырёх ступеней

Черепаха находится в начале координат, голова направлена вверх. Ей дали алгоритм «Повтори 4 [Вперёд 5 Направо 90 Вперёд 5 Направо 270]». Определи координаты Черепахи после выполнения алгоритма.

Введите координаты x и y через пробел.

Лишнее повторение треугольника

Черепаха находится в начале координат, голова направлена вверх. Ей дали алгоритм «Повтори 4 [Вперёд 10 Направо 120]». Определи координаты Черепахи после выполнения алгоритма.

Введите координаты x и y через пробел.

Где начнётся вторая фигура

Черепаха находится в начале координат, голова направлена вверх, хвост опущен. Ей дали алгоритм «Повтори 2 [Вперёд 9 Направо 90 Вперёд 7 Направо 90] Поднять хвост Вперёд 3 Направо 90 Вперёд 4 Налево 90 Опустить хвост». Определи координаты точки, в которой Черепаха опустит хвост.

Введите координаты x и y через пробел.