Урок №16. Алгоритмическая конструкция "Цикл N-раз".
Задача. Роботу нужно закрасить все отмеченные клетки.

Как записать решение этой задачи в виде линейного алгоритма? Как изменится алгоритм, если Роботу нужно закрасить не 6, а 1006 клеток подряд? Что вам хотелось бы улучшить в записи алгоритма?
Чтобы не повторять много раз одинаковые строчки в тексте программы, в языки программирования ввели специальные команды, которые сообщают исполнителю, сколько раз нужно повторить те или иные действия. Такие команды называют циклами, а алгоритмы — циклическими.
Циклический алгоритм — это алгоритм, в котором некоторая последовательность действий выполняется несколько раз.
В алгоритмическом языке есть цикл «N раз», который в нашем примере можно записать так:
нц 6 раз
вправо
закрасить
кц
Здесь нц обозначает «начало цикла», а кц — конец цикла.
Тело цикла — это команды, которые выполняются несколько раз.
В тело цикла не входят команды, которые служат для организации работы самого цикла, например проверка количества уже сделанных шагов цикла (или количества шагов, которые осталось сделать). В нашем случае тело цикла состоит из двух команд: вправо и закрасить.
Если нужно обработать не 6 клеток, а 6000, достаточно изменить число повторений после слова нц. При этом длина записи алгоритма не изменится, а количество выполняемых команд вырастет в 1000 раз! Таким образом, с помощью короткого алгоритма можно описать длинную последовательность команд.
Блок-схема циклического алгоритма содержит «петлю» (контур) — возврат к предыдущим командам. На рис. 6.21 петля показана штриховой линией.

Очень важно правильно выбрать начальное положение Робота — клетку, в которой он стоит перед началом цикла.
В рассмотренной выше задаче выгодное начальное положение — это клетка Г (рис. 6.22), потому что Робот может сразу начать выполнение цикла. Можно также начать с клетки Д, при этом команды вправо и закрась в теле цикла нужно поменять местами. Если Робот стоит в другом месте, его лучше сначала привести в одну из этих клеток.

Роботу нужно закрасить все клетки и прийти в клетку Б (База) — рис. 6.23. Выберите наилучшее положение Робота для начала цикла и напишите программу для решения задачи. Сравните свой вариант с решениями одноклассников. Как можно определить, какой вариант лучше?

Рассмотрим задачу, в которой Роботу нужно закрасить поле размером 6×4 клетки (рис. 6.24).

Нам уже несложно написать цикл, который закрашивает верхний ряд:
| закрасить один ряд
нц 6 раз
вправо
закрасить
кц
Символ «|» начинает комментарий.
Комментарии — это пояснения для человека внутри текста программы.
Транслятор пропускает все комментарии, поэтому работа программы не изменится, если комментарии убрать. Комментарии помогают разобраться в том, как работает программа. Это очень помогает, если программа написана давно, и вы уже всё забыли, или её написал другой человек.
После выполнения цикла Робот остановится в клетке А. Для того чтобы такой же цикл можно было использовать ещё раз, нужно перевести Робота в клетку Б, например, так:
| перейти к следующему ряду
вниз
нц 6 раз
влево
кц
Предложите другой вариант перевода Робота из клетки А в клетку Б. Какой из них лучше? Как вы рассуждали?
У нас всего 4 ряда, поэтому можно использовать цикл
нц 4 раз
| закрасить один ряд
нц 6 раз
вправо
закрасить
кц
| перейти к следующему ряду вниз
нц 6 раз
влево
кц
кц
Здесь фоном выделены два цикла, которые оказались внутри другого цикла. Такие циклы называются вложенными.
Вложенный цикл — это цикл, находящийся в теле другого цикла.
Что сделает Робот, если в последней программе заменить число 4 на 6 и число 6 на 15?
В какой клетке остановится Робот после выполнения программы?
Как решить задачу, показанную на рис. 6.24, используя процедуры Ряд и Переход (без вложенных циклов)? Сравните два решения.