Задание 6 · Простейшие алгоритмы для исполнителей
Практика и итог
Вся тема на одной странице: как решилась задача темы, главное из подтем, порядок решения и частые ошибки.
Одна задача — вся тема
Задача темы — точки пересечения двух прямоугольников вместе с границей — решается приёмами первых трёх подтем по очереди. Пролистай решение: в подписи каждого шага — подтема, откуда приём.
- Подтема 1. По командам: прямоугольник A 8 × 6 от начала координат, сдвиг без следа в (3; 2) и прямоугольник B 7 × 5.
- Подтема 2. В одной фигуре A с границей (8 + 1) · (6 + 1) = 63 точки, строго внутри (8 − 1) · (6 − 1) = 35.
- Подтема 3. Пересечение: 3 ≤ x ≤ 8 и 2 ≤ y ≤ 6, это 6 · 5 = 30 точек. Ответ задачи темы — 30.
Остальные подтемы — для фигур, которые на черновике не нарисовать: рисунок программой на turtle (подтема 4), наклонные стороны (подтема 5) и подсчёт точек программой (дополнительный урок). Для задачи темы они дают тот же ответ — 30.
Карта темы
Каждая подтема дала несколько правил, и любое решение собирается из них. Сверху — путь от команд к ответу, ниже — по блоку на подтему. Заголовок блока ведёт на подтему.
- Командыначало, голова, повторы
- Фигурына черновике или программой
- Подсчётнужная область и граница
1Команды и след
- состояниеположение, направление головы, хвост
- Назаддвижение спиной, голова не поворачивается
- Повтори kвыполнить все k раз
- хвост поднятдвижение без линии
2Точки внутри и на границе
- (a − 1)(b − 1)точек строго внутри прямоугольника a × b
- (a + 1)(b + 1)точек вместе с границей
- площадь, периметрдругие величины, не число точек
3Две фигуры
- пересечениебо́льшая из левых границ, меньшая из правых
- объединениеточки A + точки B − общие
- касаниеплощадь 0, а точки есть
4Рисунок программой
setheading(90)голова вверх, как в условии- масштаб kумножать расстояния, а не углы
goto(x * k, y * k)сетка тем же масштабом
5Наклонные стороны
- поворот180° минус угол фигуры
- по столбцамцелые y между сторонами в каждом x
- спорная точкапроверить по уравнению стороны
6Подсчёт программойдополнительный урок
in_a and in_bпересечение; or — объединение- ≥ и >с границей и без — ответы разные
Как решать
Любое задание 6 решается одним порядком из пяти шагов. Каждому шагу ты уже учился — под ним номера подтем:
Частые ошибки
Восемь ошибок встречаются чаще других, и каждую ловит один вопрос к себе. Выбери ошибку — увидишь, как её исправить, и вопрос, который её ловит:
- начальное направление
- Черепаха начала вправо → голова вдоль оси ординат — вверх. Спроси себя: куда смотрит голова по условию?подтема 1
- Назад
- после «Назад» Черепаху развернули → голова смотрит туда же. Спроси себя: была ли команда поворота?подтема 1
- сокращённый повтор
- повторений меньше: «фигура та же» → выполнить все k повторений. Спроси себя: откуда начнётся следующий блок?подтема 1
- граница
- посчитали с границей, а спрашивали строго внутри → (a − 1)(b − 1) вместо (a + 1)(b + 1). Спроси себя: что сказано о точках на линиях?подтема 2
- объединение сложением
- точки A + точки B → точки A + точки B − общие. Спроси себя: не посчитаны ли общие точки дважды?подтема 3
- угол × масштаб
t.right(90 * k)→t.right(90). Спроси себя: на k умножены только расстояния?подтема 4- сетка без масштаба
t.goto(x, y)→t.goto(x * k, y * k). Спроси себя: стоят ли точки на узлах рисунка?подтема 4- дорисованная линия
- незамкнутую линию замкнули и посчитали область → считают только замкнутую фигуру. Спроси себя: вернулась ли Черепаха в начало контура?подтема 2
Итог
Тема пройдена: задача темы решена от команд до ответа 30. Вот что взять с собой.
- ПорядокНачало, фигуры, область, граница, подсчёт.
- КомандыГолова по условию, «Назад» без поворота, все повторы.
- Две фигурыПересечение — общие границы, объединение — минус общие.
- ПрограммойМасштаб — только расстояниям, сетка — тем же масштабом.
- Задача темы3 ≤ x ≤ 8, 2 ≤ y ≤ 6: 6 · 5 = 30.
Проверьте себя
Ответь сначала сам, потом открой ответ.
Сколько точек с целыми координатами строго внутри прямоугольника 8 × 6? А вместе с границей?
ОтветСкрыть ответ
Внутри (8 − 1) · (6 − 1) = 35, с границей (8 + 1) · (6 + 1) = 63.
Фигуры 0 ≤ x ≤ 8 и 3 ≤ x ≤ 10. Какие x у их пересечения?
ОтветСкрыть ответ
3 ≤ x ≤ 8: левая граница — бо́льшая из левых, правая — меньшая из правых.
В фигуре A 63 точки, в B — 48, общих 30. Сколько точек в объединении?
ОтветСкрыть ответ
63 + 48 − 30 = 81: общие точки иначе посчитаны дважды.
У фигуры наклонные стороны. Как считать её точки?
ОтветСкрыть ответ
По столбцам: для каждого целого x — целые y между сторонами; спорные точки проверяют по уравнению стороны. Или программой.
Практика
Для проверки ответов нужен JavaScript. Условия, подсказки и решения доступны ниже.
Прямоугольник, обойдённый с половиной
Черепахе был дан для исполнения алгоритм «Повтори 7 [Вперёд 12 Направо 90 Вперёд 5 Направо 90]». Голова направлена вверх. Определи, сколько точек с целочисленными координатами находится внутри области, ограниченной линией. Точки на линии учитывать не следует.
Введите число.
Подсказка
Лишние повторы идут по тому же прямоугольнику.
Решение
Два повторения обходят прямоугольник шириной 5 и высотой 12, семь — тот же прямоугольник три с половиной раза. Строго внутри (5 − 1)(12 − 1) = 44.
Ответ: 44
Повторный обход влево
Черепахе был дан для исполнения алгоритм «Повтори 3 [Вперёд 4 Налево 90 Вперёд 9 Налево 90]». Голова направлена вправо. Определи, сколько точек с целочисленными координатами находится внутри области, ограниченной линией, включая точки на линии.
Введите число.
Подсказка
Голова вправо, повороты налево: сначала найди, где лежит прямоугольник.
Решение
Черепаха проходит 4 вправо, поворачивает вверх и проходит 9: прямоугольник 0 ≤ x ≤ 4, 0 ≤ y ≤ 9, повторы идут по нему же. Вместе с границей (4 + 1)(9 + 1) = 50.
Ответ: 50
Пересечение двух фигур
Черепахе был дан для исполнения следующий алгоритм. Голова направлена вверх. Определи, сколько точек с целочисленными координатами находится внутри пересечения областей, ограниченных заданными алгоритмом линиями, включая точки на линиях.
Повтори 2 [Вперёд 10 Направо 90 Вперёд 8 Направо 90]Поднять хвостВперёд 3 Направо 90 Вперёд 1 Налево 90Опустить хвостПовтори 2 [Вперёд 9 Направо 90 Вперёд 7 Направо 90]Введите число.
Подсказка
Найди, где опустится хвост, и пересеки фигуры отдельно по x и по y.
Решение
Первая фигура — 0 ≤ x ≤ 8, 0 ≤ y ≤ 10. Хвост опускается в (1; 3), вторая фигура — 1 ≤ x ≤ 8, 3 ≤ y ≤ 12. Пересечение 1 ≤ x ≤ 8, 3 ≤ y ≤ 10: 8 · 8 = 64.
Ответ: 64
Треугольник, обойдённый дважды
Черепахе был дан для исполнения алгоритм «Повтори 6 [Вперёд 12 Направо 120]». Голова направлена вверх. Определи, сколько точек с целочисленными координатами находится внутри области, ограниченной линией. Точки на линии учитывать не следует.
Введите число.
Подсказка
Шесть повторений обходят один треугольник дважды; считай по столбцам.
Решение
Получается равносторонний треугольник со стороной 12, третья вершина (6√3; 6) ≈ (10,39; 6). По столбцам x = 1…10 строго внутри 11, 9, 9, 7, 7, 5, 3, 3, 1, 1 точек — всего 56.
Ответ: 56
Площадь фигуры Г
Черепахе был дан для исполнения алгоритм «Вперёд 8 Направо 90 Вперёд 4 Направо 90 Вперёд 5 Налево 90 Вперёд 6 Направо 90 Вперёд 3 Направо 90 Вперёд 10». Голова направлена вверх. Определи площадь области, ограниченной линией.
Введите число.
Подсказка
Разрежь фигуру на два прямоугольника.
Решение
Фигура Г состоит из части 4 × 8 (0 ≤ x ≤ 4, 0 ≤ y ≤ 8) и части 6 × 3 (4 ≤ x ≤ 10, 0 ≤ y ≤ 3). Площадь 32 + 18 = 50.
Ответ: 50