Исполнитель Черепаха действует на плоскости с декартовой системой координат. В начальный момент Черепаха находится в начале координат, её голова направлена вдоль положительного направления оси ординат, хвост опущен. При опущенном хвосте Черепаха оставляет на поле след в виде линии. В каждый конкретный момент известно положение исполнителя и направление его движения. У исполнителя существует две команды:
Определите, сколько точек с целочисленными координатами будут находиться внутри области, ограниченной линией, заданной данным алгоритмом. Точки на линии учитывать не следует.
Решим эту задачу, используя язык программирования Python.
from turtle import * # Подключим модуль черепашка
color('black','red') # устанавливаем цвет пера и цвет заливки
speed(100)
lt(90)
k = 100 # коэффициент для настраивания более удобного масштаба
begin_fill()
for i in range(12): #указываем число циклов необходимое до полного завершения фигуры
rt(60)
fd(2*k)
rt(60)
fd(2*k)
rt(270)
end_fill()
cnt = 0
canvas = getcanvas()
for x in range(-100*k,100*k,k):
for y in range(-100*k,100*k,k):
s = canvas.find_overlapping(x,y,x,y)
if len(s) == 1 and s[0] == 5:
cnt+=1
print(cnt)
done()
exit()
Программа выведет количество точек внутри нарисованной фигуры — 149.
Ответ: 149.
Примечания.
1. Обратите внимание, что циклов в программе
2. Следует заметить, что если при таком способе решения поставить масштабный коэффициент k недостаточно большим, то расчеты будут неточными. На практике следует задать некоторое достаточно большое значение k, а затем на всякий случай увеличить его, чтобы проверить независимость ответа от k.
Приведём решение на языке КуМир.
Выберите масштаб сетки равным 1, запустите программу для исполнителя Черепаха.
использовать Черепаха
алг
нач
опустить хвост
нц 14 раз
вправо(60)
вперед (2)
вправо (60)
вперед (2)
вправо (270)
кц
кон
После выполнения программы считаем точки фигуры
Приведём решение Сергея Донец на языке PascalABC.NET.
uses turtle;
begin
down;
loop 14 do begin{Повтори 14
[Направо 60 Вперёд 2 Направо 60 Вперёд 2 Направо 270].}
TurnRight(60);Forw(2);TurnRight(60);Forw(2);TurnRight(270);
end;
end.

