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

Си­сте­ма ко­манд ис­пол­ни­те­ля РОБОТ, «жи­ву­ще­го» в пря­мо­уголь­ном ла­би­рин­те на клет­ча­той плос­ко­сти:

вверх вниз влево впра­во

При вы­пол­не­нии этих ко­манд РОБОТ пе­ре­ме­ща­ет­ся на одну клет­ку со­от­вет­ствен­но: вверх, вниз, влево, впра­во.

Че­ты­ре ко­ман­ды про­ве­ря­ют ис­тин­ность усло­вия от­сут­ствия стены у той клет­ки, где на­хо­дит­ся РОБОТ:

свер­ху
сво­бод­но
снизу
сво­бод­но
слева
сво­бод­но
спра­ва
сво­бод­но

Цикл

ПОКА <усло­вие> ко­ман­да

вы­пол­ня­ет­ся, пока усло­вие ис­тин­но, иначе про­ис­хо­дит пе­ре­ход на сле­ду­ю­щую стро­ку.

Сколь­ко кле­ток ла­би­рин­та со­от­вет­ству­ют тре­бо­ва­нию, что, вы­пол­нив пред­ло­жен­ную про­грам­му, РОБОТ оста­но­вит­ся в той же клет­ке, с ко­то­рой он начал дви­же­ние?

 

НА­ЧА­ЛО

ПОКА <слева сво­бод­но> вниз

ПОКА <снизу сво­бод­но> впра­во

ПОКА <спра­ва сво­бод­но> вверх

ПОКА <свер­ху сво­бод­но> влево

КОНЕЦ

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

Ре­ше­ние.

Вы­яс­ним, что не­об­хо­ди­мо для того, чтобы РОБОТ оста­но­вил­ся в той же клет­ке, с ко­то­рой он начал дви­же­ние. Так как про­грам­ма за­кан­чи­ва­ет­ся ко­ман­дой "ПОКА <свер­ху сво­бод­но> влево", сле­до­ва­тель­но, для того, чтобы робот оста­но­вил­ся в той же клет­ке, с ко­то­рой он начал дви­же­ние, не­об­хо­ди­мо, чтобы у этой клет­ки была стен­ка свер­ху. Этому усло­вию удо­вле­тво­ря­ют все клет­ки верх­ней стен­ки ла­би­рин­та и еще шесть кле­ток кроме нее. Про­ве­рим каж­дую клет­ку, удо­вле­тво­ря­ю­щую усло­вию. Об­ра­тим вни­ма­ние, что воз­мож­ны за­цик­ли­ва­ния, на­при­мер, если на­чать дви­же­ние из клет­ки А1, Б1, если ну­ме­ро­вать циф­ра­ми свер­ху вниз, а бук­ва­ми слева на­пра­во.

 

Ответ: три клет­ки В1, А2 и Д3.

 

При­ме­ча­ние.

1.  Не­об­хо­ди­мо усло­вить­ся о том, что про­ис­хо­дит с РО­БО­ТОМ, если он пы­та­ет­ся вы­пол­нить ко­ман­ду "вниз" в клет­ке, где есть ниж­няя стен­ка (или ана­ло­гич­ную ко­ман­ду, при­во­дя­щую к тому, что РОБОТ упи­ра­ет­ся в стен­ку).

В ре­ше­нии пред­по­ла­га­ет­ся, что РОБОТ в этом слу­чае оста­нет­ся в той же клет­ке и будет бес­ко­неч­но по­вто­рять по­пыт­ку сде­лать шаг вниз, то есть про­изой­дет за­цик­ли­ва­ние (на­при­мер, в клет­ке А1). Клет­ки, при на­ча­ле дви­же­ния из ко­то­рых про­ис­хо­дит за­цик­ли­ва­ние, не под­хо­дят, так как РОБОТ в них не оста­нав­ли­ва­ет­ся (не за­кан­чи­ва­ет вы­пол­не­ние про­грам­мы).

Но можно счи­тать, что при по­пыт­ке сде­лать шаг вниз из клет­ки, где есть ниж­няя стен­ка, РОБОТ разо­бьет­ся. Тогда он разо­бьет­ся, на­при­мер, начав дви­же­ние из клет­ки А1. Клет­ки, при на­ча­ле дви­же­ния из ко­то­рых РОБОТ разо­бьет­ся, не под­хо­дят.

 

2.  За­ме­тим, что про­грам­ма со­сто­ит из че­ты­рех цик­лов. В част­но­сти, при вы­пол­не­нии стро­ки

ПОКА <снизу сво­бод­но> впра­во

РОБОТ будет по­вто­рять шаги впра­во до тех пор, пока не ока­жет­ся в клет­ке, где снизу есть стена. На­при­мер, начав дви­же­ние из клет­ки Д5, РОБОТ сде­ла­ет шаг впра­во, ока­жет­ся в клет­ке Е5 и разо­бьет­ся (или за­цик­лит­ся) при по­пыт­ке сде­лать еще один шаг впра­во.

Раздел кодификатора ФИПИ: 1.6.2 Вы­чис­ли­мость. Эк­ви­ва­лент­ность ал­го­рит­ми­че­ских мо­де­лей
Гость 09.12.2013 22:19

У всех кле­ток стол­би­ка А слева не сво­бод­но. Ни­ка­кое дви­же­ние вниз робот со­вер­шать не может! Ответ А2 есть ВАША ошиб­ка.

Три ко­ман­ды ал­го­рит­ма из точки В1-верны, но в точке Г1 - двой­ная ошиб­ка. Свер­ху не сво­бод­но. Здесь не может быть дви­же­ния влево!!! Да и пре­пят­ствие между В1 и Г1, ме­ша­ю­щее ему вер­нуть­ся в клет­ку Б1.

********************************

Из 10 задач, решённых мною, в 9 за­да­чах со­дер­жат­ся ошиб­ки со­зда­те­ля!

Надо при­нять меры!

Петр Мурзин

Доб­рый вечер.

Для того, чтобы рас­крыть суть вашей ошиб­ки, про­ана­ли­зи­ру­ем вы­пол­не­ние ал­го­рит­ма на при­ме­ре клет­ки А2.

НА­ЧА­ЛО

ПОКА <слева сво­бод­но> вниз {Для клет­ки А2 усло­вие «слева сво­бод­но» не вы­пол­ня­ет­ся, сле­до­ва­тель­но, дан­ный цикл не вы­пол­ня­ет­ся — ис­пол­ни­тель пе­ре­хо­дит к сле­ду­ю­ще­му циклу в про­грам­ме.}

ПОКА <снизу сво­бод­но> впра­во {Для клет­ки А2 усло­вие «снизу сво­бод­но» вы­пол­ня­ет­ся, сле­до­ва­тель­но, дан­ный цикл вы­пол­ня­ет­ся, после его ис­пол­не­ния робот ока­жет­ся в клет­ке Д2}

ПОКА <спра­ва сво­бод­но> вверх {Для клет­ки Д2 усло­вие «спра­ва сво­бод­но» не вы­пол­ня­ет­ся, сле­до­ва­тель­но, дан­ный цикл не вы­пол­ня­ет­ся — ис­пол­ни­тель пе­ре­хо­дит к сле­ду­ю­ще­му циклу в про­грам­ме.}

ПОКА <свер­ху сво­бод­но> влево {Для клет­ки А2 усло­вие «свер­ху сво­бод­но» вы­пол­ня­ет­ся, сле­до­ва­тель­но, дан­ный цикл вы­пол­ня­ет­ся, после его ис­пол­не­ния робот ока­жет­ся в клет­ке А2}

КОНЕЦ

 

Таким об­ра­зом, клет­ка А2 со­от­вет­ству­ют не­об­хо­ди­мо­му тре­бо­ва­нию.

Ваша ошиб­ка — си­сте­ма­ти­че­ская. Надо при­нять меры.

Евгений Журавлёв 21.03.2014 17:57

А по­че­му клет­ка А1 не под­хо­дит?

А А3 по­че­му не под­хо­дит?

А1: 1) слева не сво­бод­но, зна­чит вниз не идём (А1)

2) снизу не сво­бод­но, зна­чит впра­во не идём (А1)

3) спра­ва сво­бод­но, зна­чит идём вверх (вверх идти не­ку­да, остаёмся, А1)

4) Свер­ху не сво­бод­но, остаёмся (А1)

С А3 тоже самое.

Или тут соль в том, что если РОБОТ не вы­пол­нил ни од­но­го пе­ре­ме­ще­ния, то про­грам­ма не ра­бо­та­ла и нель­зя учи­ты­вать эту точку?

Петр Мурзин

Пункт 3) в вашем ре­ше­нии: спра­ва сво­бод­но, пы­та­ем­ся идти вверх, свер­ху стен­ка, всё равно дви­га­ем­ся вверх, упи­ра­ясь в стен­ку. Соль в том, что Робот не оста­но­вил­ся в клет­ке, то есть он в ней на­хо­дит­ся, но не оста­нав­ли­ва­ет­ся.

Ещё раз дру­ги­ми сло­ва­ми. В усло­вии ска­за­но: «Сколь­ко кле­ток ла­би­рин­та со­от­вет­ству­ют тре­бо­ва­нию, что, вы­пол­нив пред­ло­жен­ную про­грам­му, РОБОТ оста­но­вит­ся в той же клет­ке, с ко­то­рой он начал дви­же­ние?». Стар­туя из клет­ки А1 Робот не вы­пол­нит про­грам­му, на шаге «ПОКА <спра­ва сво­бод­но> вверх» начнётся бес­ко­неч­ное по­вто­ре­ние дви­же­ния вверх, то есть за­цик­ли­ва­ния.

Пом­ни­те, что ис­пол­ни­те­лем про­грам­ма вос­при­ни­ма­ет­ся бук­валь­но.