Задания
Версия для печати и копирования в MS Word
Тип 6 № 47391
i

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

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

Спрятать решение

Ре­ше­ние.

Решим эту за­да­чу, ис­поль­зуя язык про­грам­ми­ро­ва­ния 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.  Об­ра­ти­те вни­ма­ние, что цик­лов в про­грам­ме не 14, а 12, так как че­ре­па­ха на 13 и 14 цикле ри­су­ет по уже су­ще­ству­ю­щей линии.

2.  Сле­ду­ет за­ме­тить, что если при таком спо­со­бе ре­ше­ния по­ста­вить мас­штаб­ный ко­эф­фи­ци­ент k не­до­ста­точ­но боль­шим, то рас­че­ты будут не­точ­ны­ми. На прак­ти­ке сле­ду­ет за­дать не­ко­то­рое до­ста­точ­но боль­шое зна­че­ние k, а затем на вся­кий слу­чай уве­ли­чить его, чтобы про­ве­рить не­за­ви­си­мость от­ве­та от k.

 

При­ведём ре­ше­ние на языке КуМир.

Вы­бе­ри­те мас­штаб сетки рав­ным 1, за­пу­сти­те про­грам­му для ис­пол­ни­те­ля Че­ре­па­ха.

ис­поль­зо­вать Че­ре­па­ха

алг

нач

опу­стить хвост

нц 14 раз

впра­во(60)

впе­ред (2)

впра­во (60)

впе­ред (2)

впра­во (270)

кц

кон

После вы­пол­не­ния про­грам­мы счи­та­ем точки фи­гу­ры по­лу­ча­ем 149.

 

 

При­ведём ре­ше­ние Сер­гея Донец на языке 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.


Аналоги к заданию № 47390: 47391 Все