Как решать задачи с исполнителем черепашка
Перейти к содержимому

Как решать задачи с исполнителем черепашка

  • автор:

«Черепашья графика» при помощи turtle, рисование при помощи алгоритма

Черепашья графика, turtle – принцип организации библиотеки графического вывода, построенный на метафоре Черепахи, воображаемого роботоподобного устройства, которое перемещается по экрану или бумаге и поворачивается в заданных направлениях, при этом оставляя (или, по выбору, не оставляя) за собой нарисованный след заданного цвета и ширины.

Проще: черепашка ползает по экрану и рисует. Мы управляем черепашкой на плоскости при помощи программы.

Начало работы. Движения

В первой строке необходимо добавить:

Мы командуем черепашкой простыми словами на английском языке. left, right – поворот налево и направо, forward и backward – движение вперед и назад. В программе каждое действие – вызов функции из модуля turtle. Простая программа:

Что произошло:

  • Поворот направо на 90 градусов
  • Движение вперед на 100 шагов (пикселей)
  • Поворот налево на 90 градусов
  • Движение назад на 100 шагов

Не похоже на черепашку, это ползающая стрелка! Исправим это:

Отлично! Теперь это черепашка, пусть и монохромная. Дополнительно, функция exitonclick() позволяет закрыть окно и завершить выполнение программы кликом мышкой по окну.
А еще можно использовать сокращенные названия функций: fd(100) вместо forward(100), rt вместо right, lt вместо left, bk вместо backward.

Геометрические фигуры

Рисуем простые геометрические фигуры:

  • Прямая: просто движение вперед
  • Квадрат: вперед, поворот на 90 градусов и так 4 раза. Повторение команд – значит, можно выполнить их в цикле for!
  • Пятиконечная звезда: вперед, поворот на 144 градусов и так 5 раз.

Если мы хотим выполнить инструкции n раз, мы пишем их в цикле

Далее идут инструкции с отступом в 4 пробела. Код с отступами – тело цикла. Когда цикл завершается, отступы больше не ставятся.

Рисуем квадрат:

Скучно рисовать одинокие фигуры. Поэтому мы приготовились рисовать сразу несколько и теперь создаем отдельный экземпляр класса Turtle для каждой фигуры. Так мы можем менять цвет линии и другие параметры отдельно для каждой фигуры. Потом, когда мы захотим дорисовать или изменить параметры фигуры, у нее будут сохранены старые параметры. Их не надо будет устанавливать заново, как это было бы без отдельных экземпляров класса для каждой фигуры.

Звезда рисуется также:

Самостоятельно:

  1. Нарисуйте пятиконечную звезду (угол поворота 144 градуса).
  2. Квадрат и звезду в одной программе, на одном графическом поле, но с разными экземплярами класса Turtle.
  3. Восьмиконечную звезду (угол поворота 135 градусов).
  4. Фигуру из анимации в начале страницы.

Решения

Изменяем параметры во время движения

При отрисовке простых фигур черепашка возвращалась в исходную точку, и программа останавливалась, ожидая, когда будет закрыто окно. Если в цикле продолжить рисовать по прежним инструкциям, фигура будет нарисована заново по уже нарисованным контурам. А если ввести дополнительный угол поворота?

Мы также добавили:

  • color(‘red’, ‘green’) определяет цвет линии и цвет заполнения. Черепашка теперь зеленая!
  • begin_fill() и end_fill() обозначают начало и конец заполнения

Больше программирования!

Напишем обобщенную программу рисования выпуклых равносторонних многоугольников. num_sides – количество граней, side_length – длина грани, angle – угол поворота.

Что будет, если на каждом шаге увеличивать длину пути? В первый день 10 шагов, во второй – 20, далее 30, 40 и так до 200:

Координаты на плоскости

Положение на плоскости определяется двумя числами, x и y:

Черепашку в программе можно перемещать функцией goto(x, y). x и y – числа, или переменные. goto(0, 0) переместит черепашку в начало координат.

Вместо звезды-спирали мы получили 5 линий, расходящихся из точки начала координат.

Круг и точка

Не хватает плавных изгибов? На помощь приходят функции dot() и circle():

  • изменили заголовок окна функцией title(),
  • установили толщину линии – pensize(),
  • установили цвет линии – pencolor(),
  • Подняли черепашку перед перемещением – penup() и опустили после – pendown().

Самостоятельно:

  • Используя код из примеров и функцию goto(), нарисовать галерею из 5 или более многоугольников на одном поле. Использовать экземпляр класса turtle.Turtle().
  • Нарисованные многоугольники закрасить разными цветами. Пробуйте стандартные цвета или их шестнадцатеричное представление. Не забудьте кавычки вокруг названия или кода цвета!

Решения

  • У нас есть два варианта нарисовать несколько фигур: используя отдельные классы и не используя их. Рассмотрим оба варианта.
  • Без классов:
  • Получается довольно многословно. С классами (начало):
  • Так еще многословнее. Зачем нам понадобилось писать для каждой фигуры отдельный класс? Для того, чтобы подготовиться к написанию программы с помощью функций, которые помогут обобщить и сократить наш код.
    Создадим функции, используя написанную ранее обобщенную программу рисования выпуклых равносторонних многоугольников. Функция prepare() делает все приготовления для рисования: переходит в нужную точку холста, устанавливает нужный цвет и дает команду заполнять цветом. У функции три входных параметра: координаты по осям X, Y и кодовое слово цвета.
    Функция draw_polygon() – наш старый знакомый, так мы рисуем выпуклый многоугольник. У функции два входных параметра: количество граней и длина грани.
  • Получилось существенно сократить программу, и она стала более читаемой. Но повторяющиеся действия остались. Значит, есть еще работа для программиста! Будем рисовать все 5 фигур в цикле. Для этого все параметры соберем в списки, а внутри цикла будем брать значение параметра по индексу (номеру минус 1) в списке. Теперь всего 22 строки кода:
  • Получились фигуры разного размера. Самостоятельно: Задать переменной внутри цикла длину грани так, чтобы фигуры казались (или являлись) равновеликими.

Делаем фигуры равновеликими

Площадь квадрата со стороной 100 пикселей – 10 000 квадратных пикселей. Вычислим площади всех фигур со стороной 100 от треугольника до 7-угольника. Формула площади правильного многоугольника содержит тангенс, поэтому «поверим на слово» результату, зависимости количество углов (вершин) – площадь:

  • 3 – 4330.13
  • 4 – 10000
  • 5 – 17204.77
  • 6 – 25980.76
  • 7 – 36339.12

Изобразим ее на графике:

Получается, что площадь 7-угольника в 36339.12 / 4330.13 = 8.4 раза больше, чем площадь треугольника! Это очень заметно на рисунке:

Чтобы фигуры стали равновеликими, надо сделать длину грани вместо константы 100 – переменной, которая зависит от количества углов.

Как: приведем все площади к 10000. Для треугольника площадь увеличится на 10000 / 4330.13 = 2.31 раза. Для 7-угольника – уменьшится в 36339.12 / 10000 = 3.63 раз. Значит, стороны должны измениться в 1.52 и 0.52 раз соответственно, то есть, до 152 и 32.7 пикселей (снова «верим на слово»). Эту зависимость можно нащупать «на глаз», в чем и заключалось задание.

Наша программа без труда масштабируется до большего количества фигур:

Программа, в которой вычисляются точные значения:

Как построить график (если кто захочет):

  1. Поставить Matplotlib, набрав в командной строке
  2. Запустить программу

Другие полезные функции:

  • turtle.setup(800, 400) устанавливает размеры окна в 800 на 400 пикселей
  • turtle.setworldcoordinates(0, 0, 800, 400) устанавливает начало координат в точку 800, 400
  • turtle.tracer(0, 0) отключает анимацию
  • setpos(x, y) устанавливает черепашку (курсор) в позицию с координатами (x, y)
  • seth(x) устанавливает направление в градусах. 0 – горизонтально направо (на восток), 90 – вверх (на север) и так далее
  • hideturtle() скрывает черепашку (или стрелку, курсор)
  • speed(x) изменяет скорость рисования. Например, speed(11) – почти моментальная отрисовка простых фигур
  • clear() очищает холст от нарисованного
  • reset() очищает холст и возвращает курсор в начало координат

Пример двух рисунков – экземпляров класса Turtle() – на одном полотне

Что произошло:

  1. Задали название окна,
  2. создали экземпляр класса Turtle под именем circ. Все изменения сохраняются для класса circ;
  3. цвет линии и заполняющий цвет,
  4. форму и размер курсора,
  5. установили 10-ю скорость
  6. продвинулись на 150 пикселей вперед от старта,
  7. начали заполнять фигуру цветом,
  8. нарисовали круг
  9. закончили заполнять цветом,
  1. Объявили переменную n и присвоили ей значение 10,
  2. создали новый экземпляр класса Turtle под именем t. У него нет настроек экземпляра класса circ!
  3. В цикле while: пока переменная n меньше или равна 50, рисовать круги радиусом n;
  4. после нарисованного круга увеличить переменную n на 10.
  5. Алгоритм рисования кругов прекратит рисовать круги после 4-го круга.

Итог: функции и классы на примере turtle

  • Функция – фрагмент программного кода, к которому можно обратиться по имени. Иногда функции бывают безымянными.
  • У функции есть входные и выходные параметры. Функция fd(150) – фрагмент программного кода, который двигает курсор вперед на заданное во входном значении количество пикселей (150). Выходного значения у функции fd() нет.
  • Когда функцию надо выполнить, после ее названия пишут круглые скобки. fd – просто название, ничего не происходит. fd(100) – функция выполняется с входным параметром 100. Обычно названия функций пишут с маленькой буквы.
  • Класс – программный шаблон для создания объектов, заготовка для чего-то, имеющего собственное состояние. Мы можем нарисовать прямоугольник и назвать его кнопкой, но это еще не кнопка, потому что у нее нет собственных свойств и поведения. Прямоугольник надо научить быть самостоятельной, отличной от других, кнопкой.
  • Turtle – класс, его имя пишется с большой буквы. через оператор присваивания = мы создаем экземпляр класса: circ = turtle.Turtle(). Turtle – класс (шаблон, трафарет, заготовка), circ – его экземпляр (рисунок, набор уникальных цветов, штрихов и свойств). На картинке выше видно, что экземпляр класса circ богат установленными свойствами, а экземпляр t обладает свойствами по умолчанию: тонкая черная линия, треугольный курсор.
  • Программирование с использованием классов и их экземпляров будем называть объектно-ориентированным программированием, ООП. объектно-ориентированный подход необходим при построении графического интерфейса пользователя, GUI.

Графический интерфейс средствами библиотеки turtle.

Нарисуем прямоугольник и сделаем его кнопкой: при нажатии кнопка исчезает и появляется круг:

Что произошло:

  1. Задали название и размеры (500 на 500 пикселей) окна,
  2. Создали экземпляр класса btn1 и спрятали курсор (черепашку),
  3. Нарисовали прямоугольник 80 на 30;
  4. подняли перо и перешли на координаты (11, 7);
  5. написали Push me шрифтом Arial 12-го размера, нормальное начертание. Попробуйте вместо normal ключевые слова bold (полужирный), italic (наклонный);

Задаем поведение кнопки:

  • Функции turtle.listen() и turtle.onscreenclick() будут слушать (listen) и реагировать на клик по экрану (onscreenclick). Реакцией будет запуск функции btnclick(x, y)
  • Напишем btnclick(x, y). У нее 2 входных параметра – координаты точки, куда мы кликнули. Наша задача: если клик был по кнопке, спрятать ее и показать оранжевый круг
  • Мы помним: кнопка 80 на 30 пикселей от точки (0, 0). Значит, мы попали по кнопке, если x между 0 и 80 и y между 0 и 30. Условие попадания по кнопке: if 0<x<80 and 0<y<30:
  • 1) Убираем кнопку: btn1.clear(), 2) создаем экземпляр класса ball = turtle.Turtle(), 3) устанавливаем ему нужные свойства.

Самостоятельно:

  • Нарисовать вторую кнопку (не изменяя первую!), сделать обработчик нажатия: при клике программа завершается, выполняется функция exit()
  • При нажатии на первую кнопку появляется случайная фигура: при рисовании фигуры использовать random:

Уточнения

  • Чтобы окно не закрывалось сразу, мы использовали turtle.exitonclick(). Теперь, когда клик обрабатывается функцией, пишем в конце turtle.done().
  • функция exit() самостоятельная, это не команда turtle. Писать turtle.exit() неверно.
  • Случайная фигура – это любая фигура, при рисовании которой используются случайные числа. Например: Но есть и второй вариант: случайное число будет индексом списка и укажет на одну из заранее подготовленных неслучайных фигур: Таким приемом можно случайно выбирать цвета фигур. Функция choice делает тоже самое изящнее:

Управляем рисунком с клавиатуры

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

  • turtle.onkeypress(fun, key): вызывается функция fun при нажатии клавиши key
  • turtle.onkey(fun, key): вызывается функция fun при отпускании клавиши key

Клавиша задается строкой с ее названием. Например, ‘space’ – пробел, ‘Up’ (с заглавной буквы) – стрелка вверх. Клавиши букв задаются заглавными, только если мы хотим нажать именно заглавную (с Shift или Caps Lock).

По нажатию клавиши мы будем перемещать фигуру. Для этого понадобятся функции, которые сообщают и изменяют координаты:

  • xcor() и ycor() выдают координаты по x и y как дробные числа
  • setx(x) и sety(y) устанавливают координаты. x и y – числа

Создадим экземпляр класса Turtle и выведем его координаты:

Получили вывод «0.0 0.0». Теперь напишем функцию up(), которая будет запускаться при нажатии стрелки вверх и перемещать наш circ на 10 пикселей вверх:

Очень похоже на нажатие мышкой! Функцию up() можно сократить до одной строчки:

Будет работать, но функции в одну строчку писать не принято. Для таких случаев используют анонимные функции: у них может вовсе не быть имени. В Python в качестве анонимных функций используются лямбда-выражения, мы их уже использовали для сортировки. Так будет выглядеть лямбда-функция up:

Она используется у нас только в одном месте, внутри функкии turtle.onkeypress(). А почему бы не соединить их вместе? Так будет выглядеть наша программа в сокращенном виде:

Всего 8 строк, и функции действительно не понадобилось имени! Как видим, язык Python дает возможность писать разными стилями, и мы можем выбирать на свой вкус: писать развернуто и красиво (как писал Гавриил Романович Державин) или кратко (как Эрнест Хемингуэй).

Самостоятельно:

  • Добавить движение circ влево, вправо и вниз
  • Скорость движения (у нас пока 10 пикселей за раз) сделать переменной

Соединяем все вместе

У нас уже есть кнопка с текстом и обработчик клика мышкой. Соединим все в одну программу:

Есть стартовый экран, управляемый с клавиатуры персонаж. Добавим препятствие, и уже почти готова игра!

Решение задач на исполнение алгоритмов исполнителями Черепашка и Чертежник

Нажмите, чтобы узнать подробности

Задание 6 ОГЭ по информатике определяет умение ученика исполнить заданный алгоритм для конкретного исполнителя с фиксированным набором команд. В этой работе рассматривается решение задач для исполнителей Чертежник и Черепашка. Даются необходимые пояснения. После разбора задач размещены задачи для самостоятельного решения.

Просмотр содержимого документа
«Решение задач на исполнение алгоритмов исполнителями Черепашка и Чертежник»

Задачи на умение исполнить алгоритм для конкретного исполнителя

Задача 1. Исполнитель Чертежник

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

Найдем смещения Чертежника по осям x и y. Ко­ман­да По­вто­ри 3 раз означает, что ко­ман­ды Сме­стить­ся на (-2, -3), Сме­стить­ся на (3, 2) и Сместиться на (-4, 0) вы­полнят­ся три раза. Получаем смещения для x и y:

x = 3*(–2 + 3 – 4) = –9

y = 3*(–3 + 2 + 0) = –3

алгоритм можно заменить командой Сместиться на (–9, –3) – это ответ 1.

Ответ: 1.

Задача 2. Исполнитель Чертежник

Ис­пол­ни­тель Чертёжник пе­ре­ме­ща­ет­ся на ко­ор­ди­нат­ной плос­ко­сти, остав­ляя след в виде линии. Чертёжник может вы­пол­нять ко­ман­ду Сме­стить­ся на (a, b) (где a, b — целые числа), пе­ре­ме­ща­ю­щую Чертёжника из точки с ко­ор­ди­на­та­ми (x, у) в точку с ко­ор­ди­на­та­ми (x + а, у + b). Если числа a, b по­ло­жи­тель­ные, зна­че­ние со­от­вет­ству­ю­щей ко­ор­ди­на­ты уве­ли­чи­ва­ет­ся; если от­ри­ца­тель­ные, умень­ша­ет­ся.

На­при­мер, если Чертёжник на­хо­дит­ся в точке с ко­ор­ди­на­та­ми (4, 2), то ко­ман­да Сме­стить­ся на (2, −3) пе­ре­ме­стит Чертёжника в точку (6, −1).

По­вто­ри k раз

Ко­ман­да1 Ко­ман­да2 Ко­ман­даЗ

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

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

По­вто­ри 2 раз

Ко­ман­да1 Сме­стить­ся на (3, 2) Сме­стить­ся на (2, 1) Конец

Сме­стить­ся на (−6, −4)

После вы­пол­не­ния этого ал­го­рит­ма Чертёжник вер­нул­ся в ис­ход­ную точку. Какую ко­ман­ду надо по­ста­вить вме­сто ко­ман­ды Ко­ман­да1?

1) Сме­стить­ся на (−2, −1)
2) Сме­стить­ся на (1, 1)
3) Сме­стить­ся на (−4, −2)
4) Сме­стить­ся на (2, 1)

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

Если Чертежник возвращается в исходную точку смещения по x и по y равны 0. Ко­ман­да По­вто­ри 2 раз означает, что ко­ман­ды Сме­стить­ся на (3, 2) и Сместиться на (2, 1) вы­полнят­ся два раза. Для нахождения смещений по осям x и y, нужно сумму значений координат x и y умножить на 2 и приравнять к 0. Первую координату команды 1 заменим на x1, а вторую на y1. После цикла стоит команда Сме­стить­ся на (−6, −4). Т.к. эта команда стоит вне цикла, то значения координат прибавляем уже к полученным произведениям. Получаем:

Смещение x = 2*(x1 + 3 + 2) – 6 = 0

Смещение y = 2*(y1 + 2 +1) – 4 = 0

Мы получили систему из двух уравнений, которую необходимо решить:

Получается команда Сместиться на (–2, –1) – это ответ 1.

Задача 3. Исполнитель Чертежник.

Ис­пол­ни­тель Чертёжник пе­ре­ме­ща­ет­ся на ко­ор­ди­нат­ной плос­ко­сти, остав­ляя след в виде линии. Чертёжник может вы­пол­нять ко­ман­ду Сме­стить­ся на (a, b) (где a, b — целые числа), пе­ре­ме­ща­ю­щую Чертёжника из точки с ко­ор­ди­на­та­ми (x, у) в точку с ко­ор­ди­на­та­ми (x + а, у + b). Если числа a, b по­ло­жи­тель­ные, зна­че­ние со­от­вет­ству­ю­щей ко­ор­ди­на­ты уве­ли­чи­ва­ет­ся; если от­ри­ца­тель­ные, умень­ша­ет­ся.

На­при­мер, если Чертёжник на­хо­дит­ся в точке с ко­ор­ди­на­та­ми (4, 2), то ко­ман­да Сме­стить­ся на (2, −3) пе­ре­ме­стит Чертёжника в точку (6, −1).

По­вто­ри k раз

Ко­ман­да1 Ко­ман­да2 Ко­ман­да3

озна­ча­ет, что по­сле­до­ва­тель­ность ко­манд Ко­ман­да1 Ко­ман­да2 Ко­ман­да3 по­вто­рит­ся k раз.

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

Сместиться на (1,3)

Повтори 4 раза

Сместиться на (0,2) Сместиться на (3,1) Сместиться на (–4,–4)

Сместиться на (a,b)

Найдите такие числа a и b, при которых после выполнении программы Чертежник возвратится в исходную точку. В ответе укажите сумму этих чисел.

Запишем выражения для нахождения смещений по осям x и y.

Сначала идет команда Сместиться на (1,3). Эта команда вне цикла и выполняется она 1 раз. К значениям координат этой команды будем прибавлять значения следующих координат.

Далее идет цикл Повтори 4 раза. Следовательно команды Сместиться на (0,2) Сместиться на (3,1) Сместиться на (–4,–4) выполняются 4 раза, т.е. сумму значений координат этих команд нужно умножить на 4.

Далее идет команда Сместиться на (a,b). Она тоже находится вне цикла, поэтому и выполняется она 1 раз. Добавим значения ее координат к полученной сумме.

Так как Чертежник в результате выполнения алгоритма возвращается в исходную точку, то смещения по осям x и y равны 0.

В результате получаем следующие выражения для смещений по осям x и y:

Смещение x = 1 + 4*(0 + 3 – 4) + a = 0

Смещение y = 3 + 4*(2 + 1 – 4) + b = 0

Выполняем арифметические операции и находим значения a и b:

Сумма a + b = 3 + 1 = 4

Ответ: 4.

Задача 4. Исполнитель Чертежник.

Сначала найдем смещения Чертежника после выполнения заданного алгоритма.

Смещение x = –3 + 2*(1 – 3 + 0) = –7

Смещение y = 1 + 2*(1 + 2 – 4) = –1

Чертежник сместился по оси x на –7, а по оси y на –1. Чтобы ему вернуться в исходную точку, Чертежнику необходимо выполнить команду Сместиться на (7, 1) – это ответ 4.

Задача 5. Исполнитель Черепашка.

Ис­пол­ни­тель Че­ре­паш­ка пе­ре­ме­ща­ет­ся на экра­не ком­пью­те­ра, остав­ляя след в виде линии. В каж­дый кон­крет­ный мо­мент из­вест­но по­ло­же­ние ис­пол­ни­те­ля и направ­ле­ние его дви­же­ния. У ис­пол­ни­те­ля су­ще­ству­ет две ко­ман­ды: Вперед(n) (где n — целое число), вы­зы­ва­ю­щая пе­ре­дви­же­ние Че­ре­паш­ки на n шагов в направ­ле­нии дви­же­ния; На­пра­во (m) (где m — целое число), вы­зы­ва­ю­щая из­ме­нение на­прав­ле­ния дви­же­ния на m гра­ду­сов по ча­со­вой стрел­ке. За­пись По­вто­ри k [Ко­ман­да1 Ко­ман­да2 Ко­ман­да3] озна­ча­ет, что по­сле­до­ва­тель­ность ко­манд в скоб­ках необходимо по­вто­рить k раз.

Решение задачи:

В результате выполнения заданного алгоритма Черепашка нарисует 6 отрезков длины 50 единиц, расположенных под углом 60 градусов друг к другу.

Полный круг Черепашки составляет 360 градусов. Разделим 360 : 60 = 6 – такое количество повторов необходимо Черепашке, чтобы нарисовать правильный 6-угольник. В заданном алгоритме 6 повторов. Поэтому Черепашка нарисует правильный 6-угольник – это ответ 1.

Замечание: Если бы в алгоритме было повторов меньше 6, получилась бы незамкнутая ломаная линия, а если повторов больше необходимых 6, получится все равно правильный 6-угольник, просто по некоторым линиям Черепашка пройдет несколько раз.

такой рисунок получится, если в цикле 4 повтора

Задача 6. Исполнитель Черепашка.

Решение:

360 : 72 = 5 – такое количество повторов необходимо Черепашке, чтобы при выполнении заданного алгоритма получился бы правильный многоугольник.

В заданном алгоритме 6 повторов – Черепашка нарисует правильный
5-угольник и по одной из линий пройдет два раза.

Задача 7. Исполнитель Черепашка.

Решение: 360 : 60 = 6 – такое количество повторов необходимо Черепашке, чтобы при выполнении заданного алгоритма получился бы правильный многоугольник. В алгоритме только 5 повторов, поэтому Черепашка не дорисует многоугольник и получится незамкнутая ломаная линия.

Задача 8. Исполнитель Черепашка.

Исполнитель Черепашка перемещается на экране компьютера, оставляя след в виде линии. В каждый конкретный момент известно положение исполнителя и направление его движения. У исполнителя существуют две команды:

Вперед n (где n – целое число), вызывающая передвижение Черепашки на n шагов в направлении движения.

Направо m (где m – целое число), вызывающая изменение направления движения на m градусов по часовой стрелке.

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

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

Повтори 10 [Направо 36 Вперед 20 Направо 36]

Какая фигура появится на экране?

1) Правильный пятиугольник

2) Правильный шестиугольник

3) Правильный десятиугольник

4) Незамкнутая ломаная линия

Черепашка выполняет поворот на 36 градусов 2 раза внутри одного цикла, поэтому можно сложить 36 + 36 = 72 – это угол поворота Черепашки в заданном алгоритме.

360 : 72 = 5 — такое количество повторов необходимо Черепашке, чтобы при выполнении заданного алгоритма получился бы правильный многоугольник.

В заданном алгоритм 10 повторов – этого количества повторов хватает для того, чтобы Черепашка нарисовала правильный многоугольник. По некоторым линиям Черепашка пройдет несколько раз. Т.к. количество повторов равно 5, то в результате работы заданного алгоритма Черепашка нарисует правильный 5-угольник – это ответ 1.

Задачи для самостоятельного решения

Исполнитель Черепашка перемещается на экране компьютера, оставляя след в виде линии. В каждый конкретный момент известно положение исполнителя и направление его движения. У исполнителя существуют две команды:

Вперед n (где n – целое число), вызывающая передвижение Черепашки на n шагов в направлении движения.

Направо m (где m – целое число), вызывающая изменение направления движения на m градусов по часовой стрелке.

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

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

Повтори 4 [Вперед 20 Направо 120]

Какая фигура появится на экране?

1) правильный треугольник

3) правильный шестиугольник

4) незамкнутая ломаная линия

Исполнитель Черепашка перемещается на экране компьютера, оставляя след в виде линии. В каждый конкретный момент известно положение исполнителя и направление его движения. У исполнителя существуют две команды:

Вперед n (где n – целое число), вызывающая передвижение Черепашки на n шагов в направлении движения.

Направо m (где m – целое число), вызывающая изменение направления движения на m градусов по часовой стрелке.

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

ЕГЭ по информатике 2023 — Задание 6 (Задачи с Черепахой)

Привет! Сегодня разберём новый тип 6 задания из ЕГЭ по информатике 2023! Добавим недостающий пазл в видеокурс по подготовке к ЕГЭ по информатике.

Так же Вы можете посмотреть разбор 6 задания из ДЕМОВЕРСИИ 2023.

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

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

Рассмотрим первую тренировочную задачу из 6 задания ЕГЭ по информатике 2023.

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

Повтори k [Команда1 Команда2 … КомандаS]

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

Повтори 15 [Вперёд 15 Направо 120]

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

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

Черепаха идёт вверх на 15 единиц. Потом поворачивает направо на 120 градусов. Потом идёт на 15 единиц по заданному курсу и снова поворачивает на 120 градусов, идёт на 15 единиц ещё и попадает в исходную точку. В итоге получается равносторонний треугольник! Дальнейшие повторения не имеют смысла, т.к. нового больше ничего не нарисуется.

ЕГЭ по информатике 2023 - Задание 6 Черепаха исполнитель (равносторонний треугольник)

Проведём перпендикуляры от каждой точки с целыми координатами на оси Y внутри треугольника.

ЕГЭ по информатике 2023 - Задание 6 (Проводим перпендикуляры)

Для каждой точки на оси Y мы можем найти этот перпендикуляр. Это и есть искомое количество точек на каждой такой линии, если округлить это значение в меньшую сторону.

Посмотрим, как найти такой перпендикуляр, если точка на оси Y находится до середины стороны. Пусть есть точка (0, yn), а dn — это перпендикуляр для этой точки. Тогда

Для второй половины длины перпендикуляров будут такие же.

Напишем программу на Питоне, которая подсчитает все точки.

Нам необходимо взять первые 7 точек, дальше ситуация симметричная. Пишем в цикле for 8, потому что последнее число не проходится в Питоне.

Вычисляем по формуле длину каждого перпендикуляра. Тангенс вычисляется с помощью функции math.tan. Для неё нужна математическая библиотека math. Функция должна получить градусы в радианах, поэтому ей передаём π /3 = 60 o .

В цикле суммируем все точки для каждой линии. Результат нужно умножить на 2, чтобы учесть вторую половину треугольника.

Задача(Считаем точки вручную)

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

Повтори k [Команда1 Команда2 … КомандаS]

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

Повтори 16 [Налево 36 Вперёд 4 Налево 36]

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

В это задачке достаточно не просто составить уравнения прямых полученной фигуры. В таких случаях можно попробовать вручную посчитать точки с помощью известной программы Кумир от НИИСИ РАН. Скачать её можно с официального сайта НИИСИ РАН.

Вероятно, это программа окажется на компьютере на экзамене.

Запустим программу Кумир-Стандарт. В начале нужно подключить модуль Черепаха.

ЕГЭ по информатике 2023 - Задание 6 (Настройка программы Кумир-Стандарт)

После того, как модуль Черепаха подключён, можно написать программу на языке Кумир.

В начале нужно подключить модуль Черепаха. Слово алг обозначает начало алгоритма. Слово нач — это начало программы.

Опускаем хвост у Черепахи. Цикл пишем с помощью команды нц — начало цикла. Команда кц — это конец цикла. Команда влево — это аналог команды Налево (видим, что эти команды пишутся по-разному). Аналогично есть команда вправо в программе Кумир. Команда вперед пишется без буквы ё.

После того, как алгоритм перенесли в программу Кумир, запускаем программу, нажав на кнопку F9 (или кнопка плей в виде треугольника).

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

ЕГЭ по информатике 2023 - Задание 6 (Рисунок в программе Кумир)

Необходимо настроить масштабирование на 1.

ЕГЭ по информатике 2023 - Задание 6 (Рисунок в программе Кумир масштабирование)

После этого можно сделать скриншот и перенести рисунок в программу Paint, где и посчитать точки вручную.

ЕГЭ по информатике 2023 - Задание 6 (Рисунок в программе Кумир, подсчитываем точки)

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

Даже если нет программы Кумир, можно подсчитать точки вручную через Python. Напишем программу.

Программа выведет такую картину.

ЕГЭ по информатике 2023 - Задание 6 (Подсчёт точек вручную на Python)

В программе подключаем модуль turtle. В начале повернём Черепаху на 90 градусов налево, с помощью команды left. Это делается из-за того, в Python Черепаха смотрит вдоль положительного направления оси абсцисс.

Далее идёт цикл, который указан в задаче. Он должен повторится 16 раз. Внутри цикла пишем программу для Черепахи. Команда left() — поворот налево (аналогично right() — поворот направо), команда forward() — это движение верёд.

4 единицы внутри команды forward() умножаются на 40. Число 40 — это коэффициент размера нашего рисунка. Попробуйте «поиграть» с этим числом, чтобы посмотреть эффект уменьшения или увеличения рисунка.

Команда penup() позволяет поднять кисть, чтобы проставить точки, которые будут символизировать точки с целыми координатами.

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

Команда setpos() ставим точки. Умножаем координаты x и y на тот же коэффициент, что использовали ранее.

Команда dot() устанавливает жирность и цвет точки.

Задача (Составляем уравнения)

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

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

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

Вперёд 100 Направо 90 Вперёд 100 Направо 30 Опусти Повтори 10 [Вперёд 25 Направо 90]

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

Нарисуем общий рисунок.

ЕГЭ по информатике 2023 - Задание 6 (Общий рисунок)

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

Коэффициент k — это тангенс угла наклона α к оси X ( 0 ≤ α π , но α ≠ π /2). Число b — это смещение прямой по оси Y относительно нуля.

Для прямой AE k1=tan(60 o )=√3. Так же она проходит через точку (100, 100).

Найдём число b. Подставим в общее уравнение координаты точки (100, 100):

y = k*x+b = √3*100 + b = 100
b=100*(1 — √3)

Получается уравнение прямой AE:

Найдём на сколько смещена FC по оси Y относительно AE.

ЕГЭ по информатике 2023 - Задание 6 (Общий рисунок 2)

cos(60 o ) = 25 (сторона квадрата) / AB
AB = 25 / cos(60 o ) = 25 / 0,5 = 50

Получается, что уравнение для прямой FC:

Для прямой EC k2=-tan(30 o ) = — √3/3. Эта прямая тоже проходит через точку (100, 100). Подставим эти координаты в уравнение и найдём b.

y = (-√3/3) * x + b = (-√3/3) * 100 + b = 100
b = 100(1 + √3/3)

Тогда уравнение для прямой EC получается:

Найдём на сколько смещена прямая AF относительно EC по оси Y.

cos(30 o ) = 25 (длина стороны) / CD
CD = 25 / cos(30 o ) = 25 / (√3/2) = 50/√3

Тогда для прямой AF:

Пробежимся с помощью Питона для переменной x от 0 до 150. Для переменной y от 0 до 100. Чтобы получить точку, используем вложенные циклы!

Точки, которые лежат в квадрате должны удовлетворять следующим условиям:

Проверить выше или ниже некоторая точка M(xm, ym), чем прямая y=k*x+b, можно следующим образом:

ЕГЭ по информатике 2023 - Задание 6 (Шестиугольник)

Если ym > k*xm + b, то точка лежит выше прямой.
Если ym

Получается правильный шестиугольник. Угол ∠СВА = 120 o . Как раз угол правильного n-угольника равен (n-2)*180 o /n. Для шестиугольника получается (6-2)*180 o /6 = 120 o .

Будем решать методом составления уравнений.

ЕГЭ по информатике 2023 - Задание 6 (Шестиугольник 2)

Рассмотрим прямую BC. Если провести от точки B прямую параллельную оси X, то мы увидим, что угол наклона прямой BC равен 30 o .

Прямая DC имеет угол наклона -30 o к оси X. Она расположена выше, чем BC на МВ. Треугольник BCM равносторонний. Значит, МВ=31. Тогда уравнение для DC будет:

Уравнение для AF будет:

Прямая EF имеет угол наклона 30 o относительно оси X. Смещена она вниз на AP. Треугольник AFP так же является равносторонним. Следовательно, AP = 31. Тогда для EF получается:

Прямая AB это x=0. Найдём так же ED.

ЕГЭ по информатике 2023 - Задание 6 (Шестиугольник)

cos(30 o ) = BQ / BC
BQ = BC * cos(30 o )
BQ = 31 * (√3/2)
BD = 2 * BQ = 2 * 31 * (√3/2) = 31 * √3

Значит, уравнение для ED: x = 31 * √3.

Когда уравнения готовы, можно написать программу.

Точки должны быть ниже прямых BC и CD, но выше прямых AF и EF. Так же координаты x должны быть 0

Исполнитель Черепаха

Исполнитель Черепаха умеет делать рисунки и чертить на плоскости. Поскольку ей нужны все ее лапы, чтобы ходить, она держит перо в зубах.

Среда Черепахи – плоскость с системой координат. Система координат необходима для того, чтобы однозначно определять место Черепахи на плоскости. Черепаха редко использует прямоугольную систему координат, она поступает так же, как и человек – может развернуться в любую сторону и идти вперед или назад. Такая система координат (“вправо-влево-вперед-назад”) называется естественной системой координат.

Какие команды понимает Черепаха?

СКИ Черепахи:

покажись; Черепаха появляется на экране

скройся; Черепаха исчезает

опусти_перо; Черепаха оставляет за собой след

подними_перо; Черепаха перемещается без следа

в_точку ( x, y ); переместиться в точку с координатами (x,y)

вперед ( n ); переместиться вперед на n шагов

назад ( n ); переместиться вперед на n шагов

влево ( a ); развернуться влево на угол a градусов

вправо ( a ); развернуться вправо на угол a градусов

Как видно из этого списка команд, для Черепахи важно не только ее начальное положение на плоскости, но и ее направление. Мы будем считать, что в исходном положении Черепаха смотрит вверх (“на север”).

Как управлять Черепахой?

Сначала выполним простейшую задачу для Черепахи — нарисуем квадрат со стороной 40 шагов. Черепаху будем обозначать черным треугольником. Как вы знаете, все углы квадрата равны 90 градусов, поэтому программа выглядит так:

вперед ( 40 ); вправо ( 90 );

вперед ( 40 ); вправо ( 90 );

вперед ( 40 ); вправо ( 90 );

Как раскрасить рисунок?

Вы заметили, что Черепаха рисует все время черной линией. Используя специальные команды, рисунок можно раскрасить.

Для изменения цвета линии используется команда

цвет ( n ); /* установить цвет линии n */

Цвет линии может иметь значения от 0 до 15, таким образом можно использовать всего 16 цветов:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *