§13. Алгоритмическая конструкция повторение

13.1. Алгоритмы с циклами

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

Человеку также регулярно приходится выполнять повторяющиеся действия: умываться, готовить еду, посещать парикмахерскую, ходить на работу и др.

Как правило, человек составляет программы, в которых каждая команда в отдельности и весь алгоритм в целом выполняются за конечное число повторений.

Алгоритмическая конструкция повторение (цикл) определяет последовательность действий, выполняемых многократно. Эту последовательность действий называют телом цикла.

Существует несколько возможностей управлять тем, сколько раз будет повторяться тело цикла.

Команда цикл с параметром (цикл со счетчиком, цикл «для») – способ организации алгоритмической конструкции повторение (цикл), при котором количество повторов зависит от начального и конечного значений параметра цикла.

Цикл с параметром организует выполнение команд тела цикла заранее известное число раз (пример 13.1).

Параметр цикла играет роль счётчика и определяет нумерацию повторов тела цикла. Часто нумерацию начинают с 0 и ограничивают числом N. Цикл выполнится N раз для значений 0, 1, …, N – 1. Если нумерация установлена двумя произвольными числами N1 (начальное значение) и N2 (конечное значение), то цикл выполнится (N2 – N1) раз (примеры 13.2, 13.3).

Алгоритмическая конструкция цикла с параметром может изображаться на блок-схеме следующим образом:

В этой конструкции в прямоугольнике(-ах) записываются повторяющиеся команды(а) алгоритма (тело цикла), которые выполняются N раз (Да). При этом, после каждого выполнения команд тела цикла происходит проверка, который раз выполняется цикл. На блок-схеме переход на проверку условия изображается в виде стрелки, выходящей из тела цикла и возвращающейся к проверке. Как только команды тела цикла выполнятся N раз (Нет), цикл завершается. Если 𝑁 ≤ 0, то команды из тела цикла не выполнятся ни разу.

Для записи цикла с параметром в языке Python используется команда for. Формат записи команды:

for i in range (N1, N2):
      тело цикла

Строка for i in range (N1, N2): является заголовком цикла. Эту строку можно прочитать следующим образом: «Для переменной 𝑖 в диапазоне от 𝑁1 до 𝑁2 делай». Переменную 𝑖 называют переменной (параметром) цикла. Одно выполнение тела цикла называют итерацией цикла. Процесс работы цикла for описан в примере 13.4. Команды тела цикла записываются со сдвигом относительно заголовка цикла.
В языке Python существуют другие варианты записи цикла for. Если нужно указать только количество выполнений цикла, то его можно записать так:

for i in range (N):
     тело цикла

Такая запись соответствует записи

for i in range (0, N):
     тело цикла

Если переменная цикла должна изменятся не на 1, то можно задать шаг ее изменения:

for i in range (N1, N2, h):
     тело цикла

В этом случае при каждой итерации цикла значение переменной i будет изменяться на величину h. Значение h может быть положительным или отрицательным целым числом, но не может равняться нулю (пример 13.5).

13.2. Использование команды цикла с параметром для исполнителя Робот

Пример 13.6. Написать программу для закраски 10 клеток поля Робота по образцу.
Для закраски всех 10 клеток поля нужно
в цикле выполнить 10 раз команды:

Закрасить
Вправо

Данные команды образуют тело цикла.
Командами, образующими тело цикла, могут быть любые команды из системы команд исполнителя. Кроме того, в теле цикла может вызываться вспомогательный алгоритм.
Использование вспомогательного алгоритма позволить сократить запись тела цикла и сделает программу более понятной.

Пример 13.7. Написать программу для закраски клеток поля Робота по образцу.
На поле исполнителя Робот присутствуют стены. При обходе стен Робот выполняет следующие команды:

закрасить, вниз
закрасить, влево
закрасить, вверх
закрасить, влево

Для решения задачи данную группу команд Робот должен повторить 5 раз. Оформим эти команды как вспомогательный алгоритм kvadrat и вызовем в цикле этот алгоритм. В данном примере тело цикла состоит из одной команды kvadrat.

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

Пример 13.1. Приготовление пельменей.

ПельмениАлгоритм:

1. Вскипятить воду

2. Для i от 1 до 10 повторять

2.1. Достать пельмень из упаковки
2.2. Бросить пельмень в кипящую воду

3. Варить 7 минут

В данном примере параметр цикла i изменяется от 1 до 10. Действия «Достать пельмень из упаковки» и «Бросить пельмень в кипящую воду» составляют тело цикла. Тело цикла выполнится 10 раз (для значений i = 1, 2, … 10).
Блок схема данного алгоритма будет выглядеть следующим образом:

Пример 13.2. Вычислить an (например, 35 = 243. Алгоритм возведения числа в степень может быть описан следующим образом:

1. Ввести значения a и n.
2. Определить начальное значение результата r = 1.
3. Для i от 0 до n повторять
    3.1.Умножить результат на a
4. Записать результат

Пример 13.3. В фольклорных произведениях часто встречается
многоголовый Змей Горыныч (количество голов может быть, например 7).

Алгоритм победы над Змеем Горынычем может быть описан следующим образом:

1. Найти Змея Горыныча
2. Для i до 7 повторять
 2.1.Отрубить голову Змею Горынычу
3. Отпраздновать победу

Блок-схема данного алгоритма:

   Пример 13.4. Работа цикла for i in range (N1, N2).
Вначале цикл выполняется для значения i = N1. Затем значение i увеличивается на 1 и цикл выполняется для значения i = N1 + 1. Так продолжается до тех пор, пока i не достигнет значения N2. При значении i = N2 цикл завершает работу и команды в теле цикла больше не выполняются. Последний раз команды в теле цикла выполняются для значения i = N2 – 1.

Многие роботы, которые используются в быту и на производстве, могут выполнять циклические алгоритмы. Примером такого робота является суширобот, который может производить от 450 до 4000 заготовок для суши за 1 час.

Пример 13.6. Начальная обстановка.

робот

from pyrob.api import *

@task
def prim_13_6():
      for i in range (10):
           fill_cell()
           move_right()
 

run_tasks()

Результат работы программы:

Пример 13.7. Начальная обстановка.

роботПрограмма для исполнителя Робот

from pyrob.api import *

@task
def prim_13_7():
      def kvadrat():
            fill_cell()
            move_down()
            fill_cell()
            move_left()
            fill_cell()
            move_up()
            fill_cell()
            move_left()
      for i in range (5):
            kvadrat()

run_tasks()

 

1. Какие циклические процессы, происходящие в окружающем мире, вы можете назвать?
2. Что понимают под алгоритмической конструкцией повторение?
3. Что такое тело цикла?
4. Что такое команда цикл с параметром?
5. Какие ключевые слова входят в описание заголовка цикла с параметром в Python?
6. Что такое итерация цикла?
7. Какие есть способы записи команды цикла в языке Python?

Упражнения

1. Опишите словесно или изобразите с помощью блок-схемы следующие алгоритмы:
робот1. Рисование в графическом редакторе следующего изображения (повторить 4 раза рисование квадрата с диагоналями и закрашенными областями):
2. Сверление 10 отверстий
3. Сервировка стола к обеду на 6 персон.
4. Каждую минуту бактерия делится на две. Изначально есть одна бактерия. За бактериями наблюдали 10 минут. Определите количество бактерий в конце наблюдения. Заполните таблицу согласно алгоритму.
2. Семиклассник Вася после школы пригласил своего друга Колю помочь ему в решении 5 задач по математике. В гостях Коля посоветовал Васе провести остаток дня, воспользовавшись следующим алгоритмом, записанным в виде блок-схемы. Почему Вася получил двойку по математике?

 

3. Составьте программу для решения задачи upr_13_3. Сравните алгоритм решения этой задачи с примером 13.5. Что у них общего? Чем они отличаются? 

4. Составьте программу для решения задачи upr_13_4. Сравните ее решение с упражнением 3 и примером 13.5.

5. Составьте программу для решения задачи upr_13_5. Используйте вспомогательный алгоритм для решения задачи.

6. *Составьте программу для решения задачи upr_13_6. Используйте вспомогательный алгоритм для решения задачи.

7. Составьте программу для решения задачи upr_13_7.

8. *Составьте программу для решения задачи upr_13_8.

9. Для решения задачи upr_13_9 Петя составил алгоритм и записал программу. Петин младший брат Олег удалил несколько команд. Сколько команд удалил Олег? Восстановите программу, которую написал Петя.

робот10. Вася пытается представить, как можно было бы использовать роботов в различных ситуациях, описанных в литературных произведениях. Например, для Тома Сойера, которого тетушка Поли отправила красить забор, Вася придумал робота-маляра. Вася решил, что такому роботу в системе команд достаточно одной команды: покрась доску. Алгоритм покраски забора из 20 досок Вася записал так:

1. установить робота у левого края забора
2. для i = 0..20 повторять
3. покрась доску

Сможет ли робот-маляр покрасить забор? В чем ошибка Васи? Исправьте алгоритм, добавив необходимую(-ые) команду(-ы)