Организация ветвления в алгоритмическом языке Часто перед Роботом стоит выбор: выполнять ту или иную команду. Для организации подобных действий существуют два оператора: команда если и команда выбор. Операция ветвление может быть полной и сокращенной (неполной). да Общий вид полного ветвления: если условие | то действие 1 | иначе действие 2 все Общий вид неполного ветвления: если условие | то действие все нет ? №1 №2 да нет ? №1 Операции ветвления могут вложенными одна в другую: Как правило, такая конструкция называется сложным ветвлением. Часто сложное ветвление можно заменить командой выбора. Общий вид сложного ветвления и команды выбора. если условие 1 |то действие 1 |иначе | если условие 2 | |то действие 2 | |иначе | | если условие 3 | | |то действие 3 | | |иначе действие4 | | все | все все выбор |при условие 1:действие 1 |при условие 2: действие 2 |при условие 3: действие 3 |иначе действие 4 все В данном примере проверяется три условия, выполнение программы может идти по четырем различным ветвям. Все ветви программы сходятся после служебного слова все. Какая бы ветвь не выполнялась бы, за ней будет выполняться команда, идущая после служебного слова все. Пример. Робот находится в тупике длиной в две клетки и шириной в одну клетку. Направление выхода неизвестно. Робот должен выйти из тупика. алг Тупик1 нач | если сверху свободно | |то вверх; вверх | |иначе | | если снизу свободно | | |то вниз; вниз | | |иначе | | | если справа свободно | | | |то вправо; вправо | | | |иначе влево; влево | | | все | | все | все кон алг Тупик 2 нач | выбор | | при сверху свободно: вверх; вверх | | при снизу свободно: вниз; вниз | | при справа свободно: вправо; вправо | | иначе влево; влево | все кон Комбинирование ветвления и цикла в алгоритмическом языке Очень много задач требует одновременное использование и структуры цикла и структуры ветвления. Рассмотрим несколько примеров. 1. Робот находится в горизонтальном коридоре шириной в одну клетку. В коридоре есть ответвления вниз шириной также в одну клетку. Закрасить клетки коридора напротив ответвлений алг Коридор дано | Робот находится в горизонтальном коридоре шириной в одну клетку. В коридоре есть ответвления вниз шириной также в одну клетку. надо | Закрасить клетки коридора напротив ответвлений нач ¦ нц пока сверху свободно ¦ ¦ вверх |выход из ответвления ¦ кц ¦ нц пока сверху стена ¦ ¦ влево |выход в начало коридора ¦ кц ¦ вправо ¦ нц пока сверху стена |проход по коридору и ¦ ¦ если снизу свободно |закраска клетки ¦ ¦ ¦то закрасить |напротив ответвления ¦ ¦ все ¦ ¦ вправо ¦ кц кон 2. Робот находится в горизонтальном коридоре шириной в одну клетку. В коридоре есть ответвления вниз шириной также в одну клетку. (Ответвления заканчиваются тупиками). Закрасить все ответвления. алг Коридор дано | Робот находится в горизонтальном коридоре шириной в одну клетку. В коридоре есть ответвления-тупики вниз шириной также в одну клетку. надо | Закрасить ответвления нач ¦ нц пока сверху свободно ¦ ¦ вверх |выход из ответвления ¦ кц ¦ нц пока сверху стена ¦ ¦ влево |выход в начало коридора ¦ кц ¦ вправо ¦ нц пока сверху стена |проход по коридору и ¦ ¦ если снизу свободно |закраска ответвлений ¦ ¦ ¦то ¦ ¦ ¦ нц пока не снизу стена |вниз по ответвлению ¦ ¦ ¦ ¦ вниз ¦ ¦ ¦ ¦ закрасить ¦ ¦ ¦ кц ¦ ¦ ¦ нц пока сверху свободно |вверх по ответвлению ¦ ¦ ¦ ¦ вверх ¦ ¦ ¦ кц ¦ ¦ все ¦ ¦ вправо ¦ кц кон 3. На поле Робота стен нет. В ряду из десяти клеток правее Робота некоторые клетки закрашены. Робот должен закрасить клетки ниже каждой закрашенной. алг Десять клеток дано | На поле Робота стен нет. В ряду из десяти клеток правее Робота некоторые клетки закрашены надо | Робот должен закрасить клетки ниже каждой закрашенной нач ¦ нц 10 раз ¦ ¦ если клетка закрашена ¦ ¦ ¦то вниз ¦ ¦ ¦ закрасить ¦ ¦ ¦ вверх ¦ ¦ все ¦ ¦ вправо ¦ кц кон