Файл: Задания 20. Короткий алгоритм в среде формального исполнителя или на языке программирования Вариант 20. 1.docx

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 30.11.2023

Просмотров: 950

Скачиваний: 4

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.


 

 

 

 

 Задания 20. Короткий алгоритм в среде формального исполнителя или на языке программирования

Вариант 56.

 20.1 Ис­пол­ни­тель Робот умеет пе­ре­ме­щать­ся по лабиринту, на­чер­чен­но­му на плоскости, раз­би­той на клетки. Между со­сед­ни­ми (по сторонам) клет­ка­ми может сто­ять стена, через ко­то­рую Робот прой­ти не может.

У Ро­бо­та есть де­вять команд. Че­ты­ре команды — это команды-приказы:

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

При вы­пол­не­нии любой из этих ко­манд Робот пе­ре­ме­ща­ет­ся на одну клет­ку соответственно: вверх ↑ вниз ↓, влево ← , впра­во →. Если Робот по­лу­чит ко­ман­ду пе­ре­дви­же­ния сквозь стену, то он разрушится.

Также у Ро­бо­та есть ко­ман­да закрасить, при ко­то­рой за­кра­ши­ва­ет­ся клетка, в ко­то­рой Робот на­хо­дит­ся в на­сто­я­щий момент.

Ещё че­ты­ре команды —  это ко­ман­ды про­вер­ки условий. Эти ко­ман­ды проверяют, сво­бо­ден ли путь для Ро­бо­та в каж­дом из четырёх воз­мож­ных направлений:

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

Эти ко­ман­ды можно ис­поль­зо­вать вме­сте с усло­ви­ем «если», име­ю­щим сле­ду­ю­щий вид:

 если условие то

последовательность команд

все

 Здесь условие — одна из ко­манд про­вер­ки условия. Последовательность команд — это одна или не­сколь­ко любых команд-приказов. Например, для пе­ре­дви­же­ния на одну клет­ку вправо, если спра­ва нет стенки, и за­кра­ши­ва­ния клет­ки можно ис­поль­зо­вать такой алгоритм:


если спра­ва сво­бод­но то

вправо

закрасить

все

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

 если (справа свободно) и (не снизу свободно) то

вправо

все

 Для по­вто­ре­ния по­сле­до­ва­тель­но­сти ко­манд можно ис­поль­зо­вать цикл «пока», име­ю­щий сле­ду­ю­щий вид:

 нц пока условие

последовательность команд

кц

 Например, для дви­же­ния вправо, пока это возможно, можно ис­поль­зо­вать сле­ду­ю­щий алгоритм:

 нц пока спра­ва сво­бод­но

вправо

кц




Выполните задание.

 

Р обот на­хо­дит­ся в пра­вой клет­ке уз­ко­го го­ри­зон­таль­но­го коридора. Ши­ри­на ко­ри­до­ра — одна клетка, длина ко­ри­до­ра может быть произвольной. Воз­мож­ный ва­ри­ант на­чаль­но­го рас­по­ло­же­ния Ро­бо­та приведён на ри­сун­ке (Робот обо­зна­чен бук­вой «Р»):
Напишите для Ро­бо­та алгоритм, за­кра­ши­ва­ю­щий все клет­ки внут­ри ко­ри­до­ра и воз­вра­ща­ю­щий Ро­бо­та в ис­ход­ную позицию. Например, для приведённого выше ри­сун­ка Робот дол­жен за­кра­сить сле­ду­ю­щие клет­ки (см. рисунок). Ал­го­ритм дол­жен ре­шать за­да­чу для про­из­воль­но­го ко­неч­но­го раз­ме­ра коридора. При ис­пол­не­нии ал­го­рит­ма Робот не дол­жен разрушиться. Ал­го­ритм может быть вы­пол­нен в среде фор­маль­но­го ис­пол­ни­те­ля или за­пи­сан в тек­сто­вом редакторе.

 

 

 

 

  Задания 20. Короткий алгоритм в среде формального исполнителя или на языке программирования

Вариант 57.

20.1 Ис­пол­ни­тель Робот умеет пе­ре­ме­щать­ся по лабиринту, на­чер­чен­но­му на плоскости, раз­би­той на клетки. Между со­сед­ни­ми (по сторонам) клет­ка­ми может сто­ять стена, через ко­то­рую Робот прой­ти не может.

У Ро­бо­та есть де­вять команд. Че­ты­ре ко­ман­ды – это команды-приказы:

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

При вы­пол­не­нии любой из этих ко­манд Робот пе­ре­ме­ща­ет­ся на одну клет­ку соответственно: вверх ↑, вниз ↓, влево ←, впра­во →. Если Робот по­лу­чит ко­ман­ду пе­ре­дви­же­ния сквозь стену, то он разрушится. Также у Ро­бо­та есть ко­ман­да 

закрасить, при ко­то­рой за­кра­ши­ва­ет­ся клетка, в ко­то­рой Робот на­хо­дит­ся в на­сто­я­щий момент.

Ещё че­ты­ре ко­ман­ды – это ко­ман­ды про­вер­ки условий. Эти ко­ман­ды проверяют, сво­бо­ден ли путь для Ро­бо­та в каж­дом из четырёх воз­мож­ных направлений:

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

Эти ко­ман­ды можно ис­поль­зо­вать вме­сте с усло­ви­ем «eсли», име­ю­щим сле­ду­ю­щий вид:

если условие то

последовательность команд

все

Здесь условие – одна из ко­манд про­вер­ки условия.

Последовательность команд — это одна или не­сколь­ко любых команд-приказов.

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

если спра­ва сво­бод­но то

вправо

закрасить

все

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

если (справа свободно) и (не снизу свободно) то

вправо

все

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

«пока», име­ю­щий сле­ду­ю­щий вид:

нц пока условие

последовательность команд

кц

 Например, для дви­же­ния вправо, пока это возможно, можно ис­поль­зо­вать сле­ду­ю­щий алгоритм:

 нц пока спра­ва сво­бод­но

вправо

кц

 




Выполните задание.

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

первого отрезка. На ри­сун­ке ука­зан один из воз­мож­ных спо­со­бов рас­по­ло­же­ния стен и Ро­бо­та (Робот обо­зна­чен бук­вой «Р»).

 Напишите для Ро­бо­та алгоритм, за­кра­ши­ва­ю­щий все клетки, рас­по­ло­жен­ные не­по­сред­ствен­но пра­вее вто­ро­го от­рез­ка и над третьим. Робот дол­жен за­кра­сить толь­ко клетки, удо­вле­тво­ря­ю­щие дан­но­му условию. Например, для приведённого выше ри­сун­ка Робот дол­жен за­кра­сить сле­ду­ю­щие клет­ки (см. рисунок).


 Конечное рас­по­ло­же­ние Ро­бо­та может быть произвольным. Ал­го­ритм дол­жен ре­шать за­да­чу для про­из­воль­но­го раз­ме­ра поля и лю­бо­го до­пу­сти­мо­го рас­по­ло­же­ния стен внут­ри пря­мо­уголь­но­го поля. При ис­пол­не­нии ал­го­рит­ма Робот не дол­жен разрушиться.

 Алгоритм может быть вы­пол­нен в среде фор­маль­но­го ис­пол­ни­те­ля или за­пи­сан в тек­сто­вом редакторе.

 

 

  Задания 20. Короткий алгоритм в среде формального исполнителя или на языке программирования

Вариант 58.

20.1 Ис­пол­ни­тель Робот умеет пе­ре­ме­щать­ся по лабиринту, на­чер­чен­но­му на плоскости, раз­би­той на клетки. Между со­сед­ни­ми (по сторонам) клет­ка­ми может сто­ять стена, через ко­то­рую Робот прой­ти не может.

У Ро­бо­та есть де­вять команд. Че­ты­ре ко­ман­ды – это команды-приказы:

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

При вы­пол­не­нии любой из этих ко­манд Робот пе­ре­ме­ща­ет­ся на одну клет­ку соответственно: вверх ↑, вниз ↓, влево ←, впра­во →. Если Робот по­лу­чит ко­ман­ду пе­ре­дви­же­ния сквозь стену, то он разрушится. Также у Ро­бо­та есть ко­ман­да закрасить, при ко­то­рой за­кра­ши­ва­ет­ся клетка, в ко­то­рой Робот на­хо­дит­ся в на­сто­я­щий момент.

Ещё че­ты­ре ко­ман­ды – это ко­ман­ды про­вер­ки условий. Эти ко­ман­ды проверяют, сво­бо­ден ли путь для Ро­бо­та в каж­дом из четырёх воз­мож­ных направлений:

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

Эти ко­ман­ды можно ис­поль­зо­вать вме­сте с усло­ви­ем «eсли», име­ю­щим сле­ду­ю­щий вид:

если условие то

последовательность команд

все

Здесь условие – одна из ко­манд про­вер­ки условия.

Последовательность команд — это одна или не­сколь­ко любых команд-приказов.

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

если спра­ва сво­бод­но то

вправо

закрасить

все

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

если (справа свободно) и (не снизу свободно) то

вправо

все

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


«пока», име­ю­щий сле­ду­ю­щий вид:

нц пока условие

последовательность команд

кц

 Например, для дви­же­ния вправо, пока это возможно, можно ис­поль­зо­вать сле­ду­ю­щий алгоритм:

 нц пока спра­ва сво­бод­но

вправо

кц

 

Выполните задание.

 На бес­ко­неч­ном поле име­ют­ся две вер­ти­каль­ные стены оди­на­ко­вой длины, рас­по­ло­жен­ные точно одна на­про­тив другой. Длина стен неизвестна. Рас­сто­я­ние между сте­на­ми неизвестно. Робот на­хо­дит­ся справа от пер­вой стены в клетке, рас­по­ло­жен­ной у её ниж­не­го края. На ри­сун­ке указан один из воз­мож­ных способов рас­по­ло­же­ния стен и Ро­бо­та (Робот обо­зна­чен буквой «Р»).

 Напишите для Ро­бо­та алгоритм, за­кра­ши­ва­ю­щий все клет­ки самого верх­не­го ряда, рас­по­ло­жен­ные между стенами. Робот дол­жен закрасить толь­ко клетки, удо­вле­тво­ря­ю­щие данному условию. Например, для приведённого выше ри­сун­ка Робот дол­жен закрасить сле­ду­ю­щие клетки (см. рисунок).

 Конечное рас­по­ло­же­ние Робота может быть произвольным. Ал­го­ритм должен ре­шать задачу для про­из­воль­но­го размера поля и лю­бо­го допустимого рас­по­ло­же­ния стен внут­ри прямоугольного поля. При ис­пол­не­нии алгоритма Робот не дол­жен разрушиться.

 Алгоритм может быть вы­пол­нен в среде фор­маль­но­го ис­пол­ни­те­ля или за­пи­сан в тек­сто­вом редакторе.

 

 

 

 

  

Ответы.

1. 20.1 Следующий ал­го­ритм вы­пол­нит тре­бу­е­мую задачу.

 

нц

пока не свер­ху свободно

закрасить

вправо

кц

 

нц

пока свер­ху свободно

вправо

кц

 

нц

пока спра­ва свободно

закрасить

вправо

кц

 

нц

пока не спра­ва сво­бод­но

закрасить

вниз

кц

 

нц

пока спра­ва сво­бод­но

вниз

кц

 

нц

пока не спра­ва сво­бод­но

закрасить

вниз

кц

2. 20.1 Следующий ал­го­ритм вы­пол­нит тре­бу­е­мую задачу.

 

нц

пока не снизу свободно

закрасить

вправо

кц

 

нц

пока снизу свободно

вправо

кц

 

нц

пока спра­ва свободно

закрасить

вправо

кц

 

нц

пока не спра­ва сво­бод­но

закрасить

вверх

кц

 

нц

пока справа сво­бод­но

вверх

кц

 

нц

пока не спра­ва сво­бод­но

закрасить

вверх

кц

3. 20.1 Следующий ал­го­ритм вы­пол­нит тре­бу­е­мую задачу.

 

нц

пока не снизу свободно

закрасить

влево

кц

 

нц

пока снизу свободно

влево

кц

 

нц

пока слева свободно

закрасить

влево

кц

 

нц

пока не слева сво­бод­но

закрасить

вверх

кц

 

нц

пока слева сво­бод­но

вверх

кц

 

нц

пока не слева сво­бод­но

закрасить

вверх

кц

4. 20.1 Следующий ал­го­ритм вы­пол­нит тре­бу­е­мую задачу.

 

нц

пока не свер­ху свободно

закрасить

влево

кц

 

нц

пока свер­ху свободно

влево

кц

 

закрасить

нц

пока слева свободно

закрасить

влево

кц

 

нц

пока не слева сво­бод­но

закрасить

вниз

кц

 

нц

пока слева сво­бод­но

вниз

кц

 

нц

пока не слева сво­бод­но

закрасить

вниз

кц

5. нц

пока не слева свободно

закрасить

вниз

кц

 

нц

пока слева свободно

вниз

кц

 

нц

пока снизу свободно

закрасить

вниз

кц

 

нц

пока не снизу сво­бод­но

закрасить

вправо

кц

 

нц

пока снизу сво­бод­но

вправо

кц

 

нц

пока не снизу сво­бод­но

закрасить

вправо

кц

6. 20.1 Следующий ал­го­ритм вы­пол­нит тре­бу­е­мую задачу.

 

нц

пока не спра­ва свободно

закрасить

вниз

кц

 

нц

пока спра­ва свободно

вниз

кц

 

нц

пока снизу свободно

закрасить

вниз

кц

 

нц

пока не снизу сво­бод­но

закрасить

влево

кц

 

нц

пока снизу сво­бод­но

влево

кц

 

нц

пока не снизу сво­бод­но

закрасить

влево

кц

7. 20.1 Следующий ал­го­ритм вы­пол­нит тре­бу­е­мую задачу.

 

нц

пока не спра­ва свободно

закрасить

вверх

кц

 

нц

пока спра­ва свободно

вверх

кц

 

нц

пока свер­ху свободно

закрасить

вверх

кц

 

нц

пока не свер­ху сво­бод­но

закрасить

влево

кц

 

нц

пока свер­ху сво­бод­но

влево

кц

 

нц

пока не свер­ху сво­бод­но

закрасить

влево

кц

8. 20.1 Следующий ал­го­ритм вы­пол­нит тре­бу­е­мую задачу.

 

нц

пока свер­ху свободно

вверх

кц

 

нц

пока не свер­ху свободно

закрасить

влево

кц

 

нц

пока свер­ху свободно

влево

кц

 

нц

пока не свер­ху свободно

закрасить

влево

кц

 

вверх

вправо

 

нц

пока не снизу свободно

закрасить

вправо

кц

 

нц

пока снизу свободно

вправо

кц

 

нц

пока не снизу свободно

закрасить

вправо

кц

9. 20.1 Следующий ал­го­ритм вы­пол­нит тре­бу­е­мую задачу.

 

нц

пока снизу свободно

вниз

кц

 

нц

пока не снизу свободно

закрасить

влево

кц

 

нц

пока снизу свободно

влево

кц

 

нц

пока не снизу свободно

закрасить

влево

кц

 

вниз

вправо

 

нц

пока не свер­ху свободно

закрасить

вправо

кц

 

нц

пока свер­ху свободно

вправо

кц

 

нц

пока не свер­ху свободно

закрасить

вправо

кц

10. 20.1 Следующий ал­го­ритм вы­пол­нит тре­бу­е­мую задачу.

 

нц

пока снизу свободно

вниз

кц

 

нц

пока не снизу свободно

закрасить

вправо

кц

 

нц

пока снизу свободно

вправо

кц

 

нц

пока не снизу свободно

закрасить

вправо

кц

 

вниз

влево

 

нц

пока не свер­ху свободно

закрасить

влево

кц

 

нц

пока свер­ху свободно

влево

кц

 

нц

пока не свер­ху свободно

закрасить

влево

кц

11. 20.1 Следующий ал­го­ритм вы­пол­нит тре­бу­е­мую задачу.

 

нц

пока с­ле­ва свободно

влево

кц

 

нц

пока не слева свободно

закрасить

вниз

кц

 

нц

пока слева свободно

вниз

кц

 

нц

пока не сс­ле­ва свободно

закрасить

вниз

кц

 

влево

вверх

 

нц

пока не спра­ва свободно

закрасить

вверх

кц

 

нц

пока спра­ва свободно

вверх

кц

 

нц

пока не спра­ва свободно

закрасить

вверх

кц

12. 20.1 Следующий ал­го­ритм вы­пол­нит тре­бу­е­мую задачу.

 

нц

пока спра­ва свободно

вправо

кц

 

нц

пока не спра­ва свободно

закрасить

вниз

кц

 

нц

пока спра­ва свободно

вниз

кц

 

нц

пока не спра­ва свободно

закрасить

вниз

кц

 

вправо

вверх

 

нц

пока не слева свободно

закрасить

вверх

кц

 

нц

пока слева свободно

вверх

кц

 

нц

пока не слева свободно

закрасить

вверх

кц

13. 20.1 Следующий ал­го­ритм вы­пол­нит тре­бу­е­мую задачу.

 

нц

пока спра­ва свободно

вправо

кц

 

нц

пока не спра­ва свободно

закрасить

вверх

кц

 

нц

пока спра­ва свободно

вверх

кц

 

нц

пока не спра­ва свободно

закрасить

вверх

кц

 

вправо

вниз

 

нц

пока не слева свободно

закрасить

вниз

кц

 

нц

пока слева свободно

вниз

кц

 

нц

пока не слева свободно

закрасить

вниз

кц

14. 20.1 Следующий ал­го­ритм вы­пол­нит тре­бу­е­мую задачу.

 

нц

пока слева свободно

влево

кц

 

нц

пока не слева свободно

закрасить

вверх

кц

 

нц

пока слева свободно

вверх

кц

 

нц

пока не слева свободно

закрасить

вверх

кц

 

влево

вниз

 

нц

пока не спра­ва свободно

закрасить

вниз

кц

 

нц

пока спра­ва свободно

вниз

кц

 

нц

пока не спра­ва свободно

закрасить

вниз

кц

15. 20.1 Следующий ал­го­ритм вы­пол­нит тре­бу­е­мую задачу.

 

нц

пока не свер­ху свободно

влево

кц

 

вправо

 

нц

пока не свер­ху свободно

закрасить

вправо

кц

 

влево

 

нц

пока снизу свободно

вниз

кц

 

вправо

вниз

влево

 

нц

пока не свер­ху свободно

закрасить

влево

кц

16. 20.1 Следующий ал­го­ритм вы­пол­нит тре­бу­е­мую задачу.

 

нц

пока не свер­ху свободно

влево

кц

 

вправо

 

нц

пока не свер­ху свободно

закрасить

вправо

кц

 

вверх

влево

 

нц

пока свер­ху свободно

вверх

кц

 

нц

пока не свер­ху свободно

закрасить

влево

кц

17. 20.1 Следующий ал­го­ритм вы­пол­нит тре­бу­е­мую задачу.

 

Дви­га­ем­ся вниз под лест­ни­цей спра­ва налево, пока не дой­дем до стыка лестниц: