ЕГЭ, ОГЭ, программирование и робототехника в Калининграде

№ 6211. Авторская задача

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

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

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

Сместиться 10, 20
Опустить перо
Сместиться 40, 60
Сместиться 80, 76
Сместиться 140, 64
Сместиться 120, 20
Сместиться 80, 0
Сместиться 10, 20

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

import math as m
from turtle import *

tracer(0)

teleport(10, 20)

# --- if Python < 3.12 ---
# pu()
# goto(10, 20)
# pd()
# --- end if ---

begin_poly()
goto(40, 60)
goto(80, 76)
goto(140, 64)
goto(120, 20)
goto(80, 0)
goto(10, 20)
end_poly()
update()

coords = get_poly()
angles = []

for coord in coords[1:]:
    angles.append(towards(*coord))
    goto(coord)

# Эту часть лучше сделать циклом

k_1 = m.tan(m.radians(angles[0]))
k_2 = m.tan(m.radians(angles[1]))
k_3 = m.tan(m.radians(angles[2]))
k_4 = m.tan(m.radians(angles[3]))
k_5 = m.tan(m.radians(angles[4]))
k_6 = m.tan(m.radians(angles[5]))

angle_1 = 180 + m.degrees(m.atan((k_2 - k_1) / (1 + k_2 * k_1)))
angle_2 = 180 + m.degrees(m.atan((k_3 - k_2) / (1 + k_3 * k_2)))
angle_3 = m.degrees(m.atan((k_4 - k_3) / (1 + k_4 * k_3)))
angle_4 = 180 + m.degrees(m.atan((k_5 - k_4) / (1 + k_5 * k_4)))
angle_5 = 180 + m.degrees(m.atan((k_6 - k_5) / (1 + k_6 * k_5)))
angle_6 = m.degrees(m.atan((k_1 - k_6) / (1 + k_1 * k_6)))

print(angle_1)
print(angle_2)
print(angle_3)
print(angle_4)
print(angle_5)
print(angle_6)

done()
Разберём это задание на бесплатном пробном занятии

Преподаватель покажет, как решать такие задачи, и подскажет, с чего начать подготовку. Группы до 8 человек, очно в Калининграде и онлайн.

Записаться на пробное занятие