На нескінченному картатому поле є горизонтальна стіна. Управління виконавцем Робот - Гіпермаркет знань

Робот діє на прямокутному картатому поле. Між деякими клітинами поля можуть бути розташовані стіни. Деякі клітини можуть бути зафарбовані (рис. 3.11).

Робот займає рівно одну клітку поля. За командам вгору, вниз, вліво і вправо Робот переміщається в сусідню клітку в зазначеному напрямку. Якщо на шляху виявляється стіна, то відбувається відмова - видається повідомлення про неможливість виконати чергову команду.

За командою зафарбувати Робот зафарбовує клітку, в которой.стоіт. Якщо клітина вже була зафарбована, то вона закраситься повторно, хоча ніяких видимих ​​зміні не відбудеться.

Важливо пам'ятати, що Робот може виконувати тільки правильно записані команди. Наприклад, якщо замість команди вниз написати ВНІС, то Робот цей запис не зрозуміє і відразу ж повідомить про помилку.

Згадайте, як називаються помилки в запису команд. Яких ще помилок слід уникати при розробці алгоритмів?

  Приклад алгоритму управління Роботом

напишемо програму   , Виконуючи яку Робот намалює на картатому поле меандр з п'яти витків (рис. 3.12).

Програма може мати вигляд:

ПОВТОРИТИ 5 РАЗІВ
  вправо
  зафарбуй; вліво
  зафарбуй; вліво
  зафарбуй; вгору
  зафарбуй; вгору
  зафарбуй; вправо; зафарбуй
  вправо; вправо; вправо
  вниз; вниз
КІНЕЦЬ

Тут ми використовували конструкцію повторення, так як абсолютно однакові фрагменти повторюються на малюнку 5 разів. При записи тіла цикл а ми в одному рядку через крапку з комою записували кілька команд.

Якщо оформити процедуру виток, то основна програма виявиться зовсім короткою.

Допоміжний алгоритм:
ПРОЦ виток
ПОЧАТОК
вправо
зафарбуй; вліво
зафарбуй; вліво
зафарбуй; вгору
зафарбуй; вгору
зафарбуй; вправо; зафарбуй
вправо; вправо; вправо
вниз; вниз
КІНЕЦЬ

Основний алгоритм:
ПОВТОРИТИ 5 РАЗІВ
  виток
КІНЕЦЬ

Запропонуйте свій варіант програми для малювання меандру.

  Цикл «поки»

А тепер спробуємо написати програму для вирішення дуже простий завдання: зафарбувати всі клітини праворуч від Робота (рис. 3.13).

Правда, скільки саме клітин слід зафарбувати, що не уточнено. Відомо тільки, що:

1) справа на невідомому відстані є стіна;
2) клітини потрібно фарбувати, поки Робот не підійде до стіни впритул.

Скористаємося тим, що Робот може аналізувати і повідомляти обстановку навколо себе, перевіряючи наступні прості умови:

праворуч вільно
зліва вільно
зверху вільно
знизу вільно
закрашено

Ясно, що поки буде виконуватися умова справа вільно, потрібно виконувати команди:

вправо
зафарбуй

Для оформлення таких послідовностей дій використовується спеціальна конструкція алгоритмічної мови - цикл «поки».

ПОКИ справа вільно РОБИТИ
  вправо
  зафарбуй
КІНЕЦЬ

У загальному вигляді цикл «поки» записується так:

БУВАЙ<условие>   РОБИТИ
<тело цикла (последовательность команд)>
КІНЕЦЬ

Блок-схема циклу «поки» має вигляд, показаний на рис. 3.14.


При виконанні цього циклу виконавець повторює наступні дії:

1) перевіряє записане після службового слова ПОКИ умова;

2) якщо умова не дотримується (Робот відповів «Ні»), то виконання циклу припиняється, і Робот починає виконувати команди, записані після службового слова КІНЕЦЬ. Якщо ж умова дотримується (Робот відповів «Так»), то Робот виконує тіло циклу і знову перевіряє умова.

Напишемо програму, виконуючи яку Робот намалює на картатому поле меандр (рис. 3.12), число витків якого залежить від положення правої стіни.

Виток меандру вміщується на картатому поле, якщо між кліткою, займаної Роботом, і правою стіною є 1 клітина.

ПОКИ справа вільно РОБИТИ
  вправо
  зафарбуй; вліво
  зафарбуй; вліво
  зафарбуй; вгору
  зафарбуй; вгору
  зафарбуй вправо; зафарбуй
  вправо; вправо; вправо
  вниз; вниз
КІНЕЦЬ

Залежно від вихідного положення Робота тіло циклу поки може не виконатися жодного разу. Така ситуація не є відмовою.

Подумайте, яким має бути вихідне положення Робота в програмі малювання меандру, щоб тіло циклу не виповнилося жодного разу.

Через логічних помилок, допущених при складанні алгоритму, може виникнути ситуація зациклення. Це означає, що умова буде завжди дотримуватися, і виконання циклу «поки» ніколи не завершиться.

Розглянемо наступний приклад:

ПОКИ справа вільно РОБИТИ
  вправо; вліво
КІНЕЦЬ

Що буде відбуватися, якщо праворуч від Робота не мають муру навколо?

Умова в циклі «поки» перевіряється тільки перед ви виконанням тіла циклу, але не в процесі його виконання.

Подумайте, що станеться, якщо Робот почне виконувати нашу програму малювання меандру з циклом «поки», перебуваючи в наступному вихідному положенні:

Що спільного у циклів «повторити п раз» і «поки»? Які між ними відмінності? Чи потрібні дві конструкції для опису повторюваних дій?

  Прості і складові умови

У циклі «поки» можуть використовуватися не тільки прості, але і складові умови.

Складений умова утворюється з одного або декількох простих умов і службових слів І, АБО, НЕ.

Розглянемо складене умова А І В, де А, В - прості умови. Умова А І В виконано, коли виконано кожне з двох вхідних в нього простих умов.

Нехай А - просте умова справа вільно, В - просте умова справа вільно. Розглянемо докладно перевірку складеного умови А І В - зверху вільно. (Рис. 3.15).

У разі а виконана умова А (зверху вільно), виконана умова В (праворуч вільно). Складений умова А І В (зверху вільно І справа вільно) також виконано.

У разі б виконана умова А, умова В не виконано. Складений умова А І В не виконано.

У разі в не виконана умова А, умова В виконано. Складений умова А І В не виконано.

У разі г не виконана умова А, не виконана умова В. Складений умова А І В не виконано.

Чи потрібно перевіряти умову В в складеному умови АИВ, якщо умова А не виконана?

Складений умова А ЧИ В виконано, коли виконано хоча б одне з двох вхідних в нього простих умов.

Розглянемо перевірку складеного умови А ЧИ В - зверху вільно АБО справа вільно (див. Рис. 3.15).

У разі а виконана умова А (зверху вільно), виконана умова В (праворуч вільно). Складений умова А ЧИ В (зверху вільно АБО справа вільно) виконано.

У разі б виконана умова А, не виконана умова В. Складений умова А ЧИ В виконано.

У разі в не виконана умова А, виконана умова В. Складений умова А ЧИ В виконано.

У разі г не виконана умова А, не виконана умова В. Складений умова А ЧИ в не виконано.

Чи потрібно перевіряти умову В в складеному умови А ЧИ В, якщо умова А виконано?

Складений умова НЕ А виконано, коли не виконана умова А.

Нехай А - просте умова закрашено. Розглянемо перевірку складеного умови НЕ А (рис. 3.16).

У разі а умова А виконано, умова НЕ А (НЕ закрашено) не виконано.

У разі б умова А не виконана, умова НЕ А (НЕ закрашено) виконано.

Розглянемо приклад використання складеного умови.

Відомо, що Робот знаходиться десь в вертикальному коридорі. Жодна з клітин коридорах зафарбована.

Складемо, під керуванням якого Робот зафарбувати всі клітини цього коридору і повернеться в початкове положення.

Так як Роботу належить зафарбувати тільки клітини коридору, ми повинні «навчити» його їх розпізнавати. Чим же клітини коридору відрізняються від всіх інших клітин поля? З рис. 3.17 видно, що кожна клітина коридору зліва і справа обмежена стіною.

Робот знаходиться в коридорі, поки зліва стіна і праворуч стіна. У СКІ нашого виконавця такі умови не передбачені. Там є протилежні умови: зліва вільно, праворуч вільно. Використовуємо службове слово НЕ:

зліва стіна -\u003e НЕ зліва вільно
праворуч стіна -\u003e НЕ справа вільно

Необхідна умова набуде вигляду:
НЕ зліва вільно І НЕ справа вільно.

Уявімо план дій Робота укрупненими кроками (рис. 3.18).


Для простоти припустимо, що над коридором і під коридором є хоча б по одній клітці без стін (інакше доведеться робити додаткові перевірки зверху вільно, знизу вільно).

1. Щоб зафарбувати всі клітини коридору, що знаходяться вище Робота, накажемо Роботу зробити крок вгору і виконаємо цикл «поки»:

вгору
  РОБИТИ
  зафарбуй
  вгору
КІНЕЦЬ

Під управлінням цього алгоритму Робот зафарбувати всі клітини коридору, що знаходяться вище від нього, і виявиться на клітці поруч з верхньою межею коридору.

При якому вихідному положенні Робота цей цикл не виконається жодного разу?

2. Командою вниз повернемо Робота в коридор. Наше завдання - повернути його у вихідну точку. Ця точка має єдиний відмітна ознака - вона не зафарбована. Тому поки займана Роботом клітина виявляється зафарбованою, будемо переміщувати його вниз:

вниз
ПОКИ закрашено РОБИТИ
  вниз
КІНЕЦЬ

Під управлінням цього алгоритму Робот виявиться у вихідній клітці.

3. Виконавши команду вниз, Робот пройде вихідну клітину і займе перший клітку, розташовану нижче вихідної. Тепер можна зафарбовувати клітини коридору, розташовані нижче вихідної:

вниз
ПОКИ ЩО НЕ зліва вільно І НЕ справа вільно
РОБИТИ
  зафарбуй
  вниз
КІНЕЦЬ

Чи можлива ситуація, що цей цикл не виконається жодного разу?

4. Так як, виконавши попередній алгоритм, Робот виявиться під коридором, командою вгору повернемо його в коридор. Повернення в вихідну точку забезпечується алгоритмом:

вгору
ПОКИ закрашено РОБИТИ
  вгору
КІНЕЦЬ

5. За командою зафарбуй Робот зафарбовує вихідну точку.

Повністю програма управління Роботом виглядає так:

вгору
ПОКИ ЩО НЕ зліва вільно І НЕ справа вільно
РОБИТИ
  зафарбуй
  вгору
КІНЕЦЬ
вниз
ПОКИ закрашено РОБИТИ
  вниз
КІНЕЦЬ
вниз
ПОКИ ЩО НЕ зліва вільно І НЕ справа вільно
РОБИТИ
  зафарбуй
  вниз
КІНЕЦЬ
вгору
ПОКИ закрашено РОБИТИ
  вгору
КІНЕЦЬ
зафарбуй

  команда розгалуження

Згадаймо, що форма організації дій, при якій в залежності від виконання або невиконання деякої умови здійснюється або одна, або інша послідовність дій, називається розгалуженням.

Графічно розгалуження можна уявити, як показано на рис. 3.19.


Для організації розгалужень у СКІ Робота передбачена спеціальна команда ЯКЩО. Її загальний вигляд:

ЯКЩО<условие>   ТО<серия действий 1>
ІНАКШЕ<серия действий 2>
КІНЕЦЬ

Службові слова ЯКЩО, ТО, ІНАКШЕ мають звичайний сенс.

Між ТО і ІНАКШЕ записуються одне або кілька дій, що становлять серію дій 1. Між ІНАКШЕ і КІНЕЦЬ поміщається серія дій 2. Службове слово ІНАКШЕ разом з серією дій 2 може бути відсутнім (скорочена форма розгалуження).

Нехай тепер Робот знаходиться в горизонтальному коридорі, нижня межа якого суцільна, а у верхній є виходи (рис. 3.20). Потрібно провести Робота через весь коридор і зафарбувати клітини коридору, що не мають верхніх меж.

Єдиною ознакою коридору є наявність ¿нижній межі, т. Е. Виконання умови НЕ знизу вільно. Якщо при цьому виконується умова зверху вільно, то клітку потрібно зафарбувати, інакше - фарбувати не треба. Аналогічно нагоди зафарбовування вертикального коридору, припускаємо, що зліва і праворуч від горизонтального коридору є клітини. Блок-схема алгоритму має вигляд, показаний на рис. 3.21.

програма:

ПОКИ ЩО НЕ знизу вільно РОБИТИ
  ЯКЩО зверху вільно ТО
  зафарбуй
  КІНЕЦЬ
  вправо
КІНЕЦЬ

Коротко про головне

Виконавець Робот діє на прямокутному картатому поле. Між деякими клітинами поля можуть бути розташовані стіни. Деякі клітини можуть бути зафарбовані. Робот займає рівно одну клітку поля.

Система команд виконавця представлена ​​в наступній таблиці:

Робот може виконувати цикл «повторити n разів».

Якщо заздалегідь не відомо, скільки саме раз слід виконати тіло циклу, використовується спеціальна конструкція алгоритмічної мови - цикл «поки».

У циклі «поки» можуть використовуватися не тільки прості, але і складові умови. Складений умова утворюється з одного або декількох простих умов і службових слів І, АБО, НЕ.

Для організації розгалужень у СКІ Робота передбачена спеціальна команда ЯКЩО.

Запитання і завдання

1. Наведіть всі алгоритми з трьох команд, які перемістять Робота з вихідного положення в клітку Б.

Чи існує для цього завдання алгоритм, при виконанні якого Робот робить: а) два кроки; б) чотири кроки; в) п'ять кроків; г) сім кроків; д) 2001 крок; е) 2006 кроків?

2. Петя склав алгоритм, що переводить Робота з клітки А в клітку Б з зафарбовуванням якихось клітин. Що повинен зробити Коля з цим алгоритмом, щоб отримати алгоритм, що переводить Робота з Б в А і зафарбовувати ті ж клітини?

3. Петя склав алгоритм, при виконанні якого Робот повернувся в початкове положення. Коля стер одну з команд. При виконанні Колиного алгоритму Робот також повернувся в початкове положення. Яку команду стер Коля?

4. Маша придумала візерунок для Робота. Коля стер рівно половину зафарбованих клітин. Відновіть малюнок, знаючи, що він симетричний відносно вертикальної осі. Напишіть програму для Робота.

5. Напишіть програму, за допомогою якої Робот зможе потрапити в клітку Б у всіх трьох лабіринтах.

6. Напишіть програму, за допомогою якої Робот потрапить в клітку Б.

7. Відомі два допоміжних алгоритму Робота:


Намалюйте, що вийде при виконанні Роботом наступних основних алгоритмів:


8. Складіть алгоритми, під керуванням яких Робот зафарбувати зазначені клітини:


9. Відомо, що десь правіше Робота є стіна.

Складіть алгоритм, під керуванням якого Робот зафарбувати ряд клітин до стіни і повернеться в початкове положення.

10. Відомо, що десь правіше Робота є зафарбована клітина.

Складіть алгоритм, під керуванням якого Робот зафарбувати ряд клітин до зафарбованою клітини і повернеться в початкове положення.

11. Відомо, що Робот знаходиться поруч з лівим входом в горизонтальний коридор.

12. Відомо, що Робот знаходиться десь в горизонтальному коридорі. Жодна з клітин коридорах зафарбована.

Складіть алгоритм, під керуванням якого Робот зафарбувати всі клітини цього коридору і повернеться в початкове положення.

13. У ряду з десяти клітин правіше Робота деякі клітини зафарбовані.

Складіть алгоритм, який зафарбовує клітини:

а) нижче кожної зафарбованою клітини;
б) вище і нижче кожної зафарбованою клітини.

14. Що можна сказати про правильність наступного фрагмента алгоритму?

ПОКИ з а фарбовані РОБИТИ
  ЯКЩО праворуч вільно ТО
  вправо
  зафарбуй
  КІНЕЦЬ
КІНЕЦЬ

15 Напишіть програму, за допомогою якої Робот зможе потрапити в клітку Б у всіх трьох лабіринтах.


Виконавець Робот вміє переміщатися по лабіринту, накресленому на площині, розбитою на клітини.

Нижче наведено опис Робота



При виконанні будь-якої з цих команд Робот переміщається на одну клітку відповідно: угору, вниз, вліво, вправо. Між сусідніми (по сторонам) клітинами може стояти стіна, через яку Робот пройти не може. Якщо Робот отримає команду пересування через стіну, то він зруйнується.

Чотири команди перевіряють істинність умови відсутності стіни у кожної сторони тієї клітини, де знаходиться Робот:

зверху вільно

знизу вільно

зліва вільно

праворуч вільно

Ці команди можна використовувати разом з умовою «якщо», що має такий вигляд:

якщо то

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

усе

«Послідовність команд» - це одна або декілька довільних команд, виконуваних Роботом. Наприклад, для пересування на одну клітку вправо, якщо справа немає стінки, можна використовувати такий алгоритм:

якщо справа вільно то

вправо
усе


В однієї умови можна використовувати кілька команд, застосовуючи логічні зв'язки і, або, не, наприклад:

якщо (праворуч вільно) і (не знизу вільно) то

вправо

усе

Для повторення послідовності команд можна використовувати цикл «поки», що має такий вигляд:

нц поки

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


Наприклад, для руху вправо, поки це можливо, можна використовувати наступний алгоритм:

нц поки справа вільно

вправо
кЦ


Також у Робота є команда   зафарбувати, Зафарбовувати клітку, в якій Робот знаходиться в даний момент.

Виконайте завдання.




На нескінченному полі є горизонтальна стіна. Довжина стіни невідома. Від правого кінця стіни вгору відходить вертикальна стіна також невідомої довжини. Робот знаходиться в клeткe, розташованої під горизонтальною стіною.

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

Напишіть для Робота алгоритм, зафарбовувати все клітини, розташовані лівіше вертикальної стіни Робот повинен зафарбувати тільки клітини, що задовольняють даній умові. Наприклад, для наведеного вище рисунка Робот повинен зафарбувати наступні клітини (див. PІCУHOK)

Кінцеве розташування Робота може бути довільним. Алгоритм повинен вирішувати задачу ДЛЯ довільного розміру поля і будь-якого допустимого розташування стін BHУТPІ прямокутного поля. При виконанні алгоритму Робот не повинен руйнуватися. Алгоритм напишіть в текстовому редакторі і збережіть е текстовому файлі.

Назва файлу та каталог для збереження Вам повідомлять організатори іспиту.


Напишіть для Робота алгоритм, зафарбовувати все клітини, розташовані лівіше вертикальної стіни Робот повинен зафарбувати тільки клітини, що задовольняють даній умові. Наприклад для наведеного вище рисунка Робот повинен зафарбувати наступні клітини (див. PІCУHOK РЕЗУЛЬТАТ)
РІШЕННЯ
НЦ ПОКИ СВЕРХУ СВОБОДНО

ВГОРУ

НЦ ПОКИ (НЕ СВЕРХУ ВІЛЬНО)

ВЛЕВО

ВГОРУ

НЦ ПОКИ СПРАВА СВОБОДНО

ВПРАВО

НЦ ПОКИ (НЕ СПРАВА ВІЛЬНО)

зафарбувати ВГОРУ

Виконавець Робот. Рішення задач ДПА

1. Робот знаходиться в лівому верхньому кутку обгородженого простору, що має форму прямокутника. Розміри прямокутника невідомі. Десь посередині прямокутника є вертикальна стіна, що розділяє прямокутник на дві частини. У цій стіні є прохід, при цьому прохід не є самої верхньої або найнижчій кліткою стіни. Точне розташування проходу теж невідомо. Одне з можливих розташувань стіни і проходу в ній наведено на малюнку

Напишіть для Робота алгоритм, що переміщає Робота в правий нижній кут прямокутника (див. Малюнок)

Спочатку потрібно довести Робота до стіни, використовуючи цикл з умовою. Потім провести Робота уздовж стіни до проходу також за допомогою циклу з умовою. Потім провести Робота в правий нижній кут за допомогою двох циклів з умовами.

2. На нескінченному полі є довга горизонтальна стіна. Довжина стіни невідома. Робот знаходиться в одній з клітин безпосередньо зверху стіни. Початкове положення Робота також невідомо. Одне з можливих положень Робота наведено на малюнку

Напишіть алгоритм для Робота, зафарбовувати все клітини, розташовані вище стіни і прилеглі до неї, незалежно від розміру стіни і початкового положення Робота. Наприклад, для наведеного вище рисунка Робот повинен зафарбувати наступні клітини:

Завдання для самостійного виконання:

1. Робот знаходиться в лівому верхньому кутку обгородженого простору, що має форму прямокутника. Розміри прямокутника невідомі. Один з можливих розмірів прямокутника і розташування Робота наведено на малюнку:

Напишіть для Робота алгоритм, зафарбовувати чотири кутові клітини прямокутника. Робот повинен зафарбувати тільки кутові клітини. Наприклад, для наведеного вище рисунка Робот повинен зафарбувати наступні клітини (див. Малюнок):

2. На нескінченному полі є вертикальна стіна. Довжина стіни невідома. Від верхнього краю стіни вправо відходить горизонтальна стіна також невідомої довжини. Від правого краю верхньої стіни відходить вертикальна стіна також невідомої довжини. На малюнку вказано один з можливих способів розташування стін і Робота:

Напишіть алгоритм для Робота, зафарбовувати все клітини, розташовані праворуч від першої вертикальної стіни і одну кутову клітку між горизонтальною стіною і правої вертикальної стіною. Наприклад, для наведеного вище рисунка Робот повинен зафарбувати наступні клітини:

Колеги, ну ось ми і дісталися до самого головного!

Постараємося використовувати отримані знання для вирішення завдань ДПА. А знаємо ми вже немало! І я навіть не сумніваюся в тому, що у нас все вийде!

Розглянемо задачу з демоверсії-2012. Наведу тут повне формулювання завдання.

20.1.   Виконавець Робот вміє переміщатися по лабіринту, накресленому на площині, розбитою на клітини. Нижче наведено опис Робота.
   У Робота є чотири команди переміщення:

вгору
   вниз
   вліво
   вправо

При виконанні будь-якої з цих команд Робот переміщається на одну клітку
   відповідно: угору, вниз ↓, вліво ←, вправо →.
Між сусідніми (по сторонам) клітинами може стояти стіна, через яку Робот пройти не може. Якщо Робот отримає команду пересування через стіну, то він зруйнується.
   Чотири команди перевіряють істинність умови відсутності стіни у кожної
   боку тієї клітини, де знаходиться Робот:

зверху вільно
   знизу вільно
   зліва вільно
   праворуч вільно

Ці команди можна використовувати разом з умовою «eсли», що має
   такий вигляд:

якщо<условие>   то
   послідовність команд
   Усе

   «Послідовність команд» - це одна або декілька довільних команд, виконуваних Роботом. Наприклад, для пересування на одну клітку вправо,
   якщо справа немає стінки, можна використовувати такий алгоритм:

якщо справа вільно то
   вправо
   Усе

В однієї умови можна використовувати кілька команд, застосовуючи
   логічні зв'язки і, або, не, наприклад:

якщо (праворуч вільно) і (не знизу вільно) то
   вправо
   Усе

Для повторення послідовності команд можна використовувати цикл
   «Поки», що має такий вигляд:

нц поки< условие >
   послідовність команд
   кЦ

Наприклад, для руху вправо, поки це можливо, можна використовувати
   наступний алгоритм:

нц поки справа вільно
   вправо
   кЦ

Також у Робота є команда зафарбувати, зафарбовувати клітку, в якій
   Робот знаходиться в даний момент.

Виконайте завдання.

На нескінченному полі є вертикальна стіна. Довжина стіни невідома. Від верхнього кінця стіни вправо відходить горизонтальна стіна також невідомої довжини. Робот знаходиться в клітці, розташованої зліва від нижнього краю вертикальної стіни.
   На малюнку вказано один з можливих способів розташування стін і Робота
   (Робот позначений буквою «Р»).

Напишіть для Робота алгоритм, зафарбовувати все клітини, розташовані
   лівіше вертикальної стіни і вище горизонтальної стіни і прилеглі
   до них. Робот повинен зафарбувати тільки клітини, що задовольняють даному
   умові. Наприклад, для наведеного вище рисунка Робот повинен
   зафарбувати наступні клітини (див. малюнок).

Кінцеве розташування Робота може бути довільним. алгоритм
   повинен вирішувати задачу для довільного розміру поля і будь-якого
   допустимого розташування стін всередині прямокутного поля. при
   виконанні алгоритму Робот не повинен руйнуватися.
   Алгоритм напишіть в текстовому редакторі і збережіть в текстовому файлі.
   Назва файлу та каталог для збереження Вам повідомлять організатори
   іспиту.

Рішення: Колеги, так ми всі це вміємо, вірно ?!


От і все! Ну що, пробуємо самостійно?

Я не буду приводити повне умову задачі, воно повторюється. Обмежуся коротким, думаю, що все буде зрозуміло.

Завдання 4.

Завдання 4.1. На нескінченному полі є вказане розташування стін (дивись малюнок). Довжина стін невідома. Робот знаходиться в клітці, розташованої між горизонтальними стінами, лівіше вертикальної стіни.
   На малюнку вказано один з можливих способів розташування стін і Робота (Робот позначений буквою «Р»).

Напишіть для Робота алгоритм, зафарбовувати верхню і нижню клітини, розташовані правіше вертикальної стіни. Робот повинен зафарбувати тільки клітини, позначені на малюнку.

Кінцеве розташування Робота може бути довільним. Алгоритм повинен вирішувати задачу для довільного розміру поля і будь-якого допустимого розташування стін всередині прямокутного поля. При виконанні алгоритму Робот не повинен руйнуватися.

Завдання 4.2. На нескінченному полі є вказане розташування стін (дивись
   малюнок). Довжина стін невідома. Робот знаходиться в клітці, розташованої зліва від вертикальної стіни. На малюнку вказано один з можливих способів розташування стін і Робота (Робот позначений буквою «Р»).

Напишіть для Робота алгоритм, зафарбовувати клітини, розташовані в кутах в місцях з'єднання стін. Робот повинен зафарбувати тільки клітини, що задовольняють даній умові.
   Наприклад, для наведеного вище рисунка Робот повинен
   зафарбувати наступні клітини (див. малюнок).

Кінцеве розташування Робота може бути довільним.
   Алгоритм повинен вирішувати задачу для довільного розміру поля і будь-якого допустимого розташування стін всередині прямокутного поля. При виконанні алгоритму Робот не повинен руйнуватися.

Завдання 4.3.   На нескінченному полі є довга вертикальна стіна. Довжина стіни невідома. Робот знаходиться в одній з клітин, розташованої
   безпосередньо зліва від стіни. Початкове положення робота також
   невідомо. Одне з можливих положень робота приведено на малюнку
   (Робот позначений буквою «Р»):

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

Кінцеве розташування робота може бути довільним. Алгоритм повинен вирішувати задачу для довільного розміру стіни і будь-якого допустимого початкового розташування робота.

завдання 4.4 . На нескінченному полі є довга горизонтальна стіна (довжина стіни дорівнює парним числом клітин). Довжина стіни невідома. Робот знаходиться в одній з клітин, розташованої зверху від стіни (див. Рис)


Напишіть для робота алгоритм, зафарбовувати все клітини, розташовані вище і нижче стіни і прилеглі до неї, причому через одну, починаючи з першої нижньої правої.

Наприклад, для наведеного вище рисунка робот повинен зафарбувати наступні клітини:


Кінцеве розташування робота може бути довільним. алгоритми повинен вирішувати задачу для довільного розміру стіни і будь-якого допустимого початкового розташування робота

Все папки упакуйте в архів з ім'ям Familia I.О._zadanie4і перешліть на поштову скриньку [Email protected]

Не забудьте поставити відмітку про виполнеія роботи в таблиці самозапису

   Це виконавець, який дозволить нам побачити, Як буде виконуватися створений нами алгоритм.

Меню вставка   з основними командами РОБОТА

В меню Виправлення   (Рисунок праворуч) виділені основні команди, за допомогою яких ми будемо управляти РОБОТОМ.А нижче показано вікно написання коду алгоритму. Зверніть увагу на те, що необхідно прибрати коментар   у вікні написання коду!


Вікно написання коду алгоритму

У цьому вікні ми і будемо писати наш алгоритм. Але спочатку звернемося до формулювання завдання: На нескінченному полі є горизонтальна стіна, нескінченно триває вліво і закінчується сходами, яка піднімається зліва направо. Висота кожного ступеня - дві клітини, ширина - чотири клітини. Робот знаходиться на горизонтальній стіні, лівіше сходів.

Напишіть для РОБОТА алгоритм, зафарбовувати все клітини, розташовані безпосередньо над сходами. Потрібно зафарбувати тільки клітини, що задовольняють даній умові. Кінцеве розташування РОБОТА може бути довільним.

Алгоритм повинен вирішувати задачу для довільного розміру поля і будь-якої кількості ступенів. При виконанні алгоритму РОБОТ не повинен руйнуватися.

У тексті завдання обов'язково наводиться малюнки початкового стану РОБОТА та стану РОБОТА після виконання коду алгоритму. Дивись нижче.

Положення РОБОТА позначено на всіх малюнках ромбом.

Розберемо етапи побудови алгоритму пересування РОБОТА (і необхідні дії РОБОТА):

1. Переміщення РОБОТА має два фрагмента:

А) переміщення по сходинці з забарвленням ступені; б) підйом на наступний щабель.

2. Переміщення РОБОТА носить циклічний характер : Повторюється стільки раз, скільки щаблів має сходи. Але (!), За умовою задачі нам невідомо, скільки ступенів має сходи . Отже, ми не може вказувати в алгоритмі кількість ітерацій (повторень), які повинен виконувати РОБОТ.

3. У нас відомі розміри сходинки: висота - 2 клітини; ширина - 4 клітини (на малюнку ширина сходинки - 3 клітини :), але це не повинно нам перешкодити при вибудовуванні послідовності дій РОБОТА).

4. Виділимо два фрагмента в дії РОБОТА: послідовність кроків

4.1. на відрізку 1    РОБОТ переміщається   вправо: Робить крок; і фарбує сходинку. визначимо умови виконання   цих двох дій: В умові задачі є для цього наступні дані: У РОБОТА є чотири   команди переміщення: вгору, вниз, вліво, вправо. Ці ж команди вказані і для нашого виконавця РОБОТ в кумири (дивись команди меню Вставка - вони підкреслені червоним). При виконанні будь-якої з цих команд РОБОТ переміщається на одну клітку   в зазначеному напрямку. Між сусідніми (по сторонам) клітини може стояти стіна, через яку РОБОТ пройти   не може. Якщо РОБОТ отримує команду пересування через стіну, то він руйнується. Тому чотири команди перевіряють істинність   умови відсутності   стіни у кожної сторони тієї клітини, де знаходиться РОБОТ: 1) зверху вільно; 2) знизу вільно; 3) зліва вільно; 4) справа вільно.

Для повторення послідовності команд можна використовувати цикл БУВАЙ.

Також у РОБОТА є команда   зафарбувати, Яка зафарбовує клітку, в якій знаходиться РОБОТ зараз.

Отже, на відрізку 1    у нас виходять такі команди:

1. зафарбувати   (Так як початкове положення РОБОТА - на горизонтальній стіні - сходинці);

2. (крок)   вправо

І виконувати ці команди треба за умови: знизу стіна і справа не мають муру навколо .

4.2. Коли ж при переміщенні РОБОТА він потрапляє в положення, коли праворуч стіна, То йому треба виконати команди для підйому на наступну сходинку:

1. зафарбувати   (Так як він стоїть на клітці щабель і ця клітина поки не зафарбована);

2. (крок) вгору   (Одна клітина висоти ступені);

3. (крок) вгору   (Друга клітина висоти ступені);

4. (крок) вправо.

5. Об'єднуємо команди РОБОТА ділянок 1 і 2:

НЦ ПОКИ (знизу стіна) і (не справа стіна) зафарбувати вправо кц | РОБОТ зупинився перед стіною якщо справа стіна то зафарбувати вгору вгору вправо все | РОБОТ перемістився на початок наступному ступені (дивись - початкове положення РОБОТА)

Перевіримо, як виконує РОБОТ написаний нами фрагмент алгоритму. Але спочатку розберемося з середовищем КУМІР.

Меню РОБОТ


Стартова обстановка РОБОТА

1. Відкриємо меню РОБОТ   і виберемо команду Змінити стартову обстановку. відкриється вікно редагування стартовою обстановки РОБОТА, де ми повинні відтворити малюнок сходи. Для створення стін клацаємо мишкою на розділову лінію між клітинами. РОБОТА (білий ромб) мишкою переміщаємо в початкову позицію. Розмір поля обмежений, тому відтворити повністю сходи, як на папері, ми не зможемо.

2. Після закінчення редагування виконуємо команду Обстановка \\ Зберегти як стартову ...   Даємо ім'я файлу-обстановці. Але в кумира стартова обстановка змінилася.

3. Відкриємо вікно РОБОТА, натиснувши на кнопку на панелі інструментів вікна КУМИРА Показати вікно Робота .

Демонстрація коду алгоритму (дивись файл медіа).

Ми отримали фрагмент коду алгоритму, в якому два модуля: зафарбування сходинки і підйом на наступну сходинку - виконані. Тепер необхідно повторити цей алгоритм стільки раз, скільки сходинок в сходах. Але ми (за умовою завдання) заздалегідь не знаємо, скільки разів нам необхідно виконати наведений алгоритм, тому застосовуємо ще один ( зовнішній   цикл) БУВАЙ, всередину якого   і вбудуємо наш код.

І наш код тепер виглядає так:

   використовувати Робот алг поч. нц поки знизу стіна. . нц поки не справа стіна. . . зафарбувати. . . вправо. . кц. . якщо (праворуч стіна) і (знизу стіна). . . то. . . . зафарбувати. . . . вгору. . . . вгору. . . . вправо. . Усе . кц кін

Подивіться, як тепер виконує алгоритм наш виконавець РОБОТ:

Як видно з відеоролика, ми виконали всі умови завдання: РОБОТ фарбує всі сходинки НЕ розбився. І, що найголовніше, алгоритм управління РОБОТ "ом раціональний(Оптимальний).