В) Циклические алгоритмы

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

Пример 3: (по учебнику математики Л.Г. Петерсон 2 класс) Андрей записал алгоритм игры в прятки. Верно, ли он определил последовательность действий игроков в этой игре?

Решение:

1. Ребята считаются и выбирают ведущего

2. Ведущий считает до 100, а ребята прячутся

3. Ведущий ищет

4. Нашел ли ведущий прячущегося игрока?

5. Если нет. Перейти к пункту 3

6. Если да. Перейти к пункту 7

7. Успел ли ведущий выручиться?

8. Если нет. Перейти к пункту 3

9. Если да. Перейти к пункту 10

10. Продолжить игру?

11. Если да. Перейти к пункту 1

12. Если нет. Конец игры

 

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

В циклах с известным числом повторений явно задается управляющая количеством повторений переменная (параметр цикла), ее начальное и конечное значения и шаг изменения. Примером такого цикла может служить вычисление суммы последовательных целых чисел: . Здесь i – параметр цикла; его начальное значение и шаг изменения равны 1, а конечное значение равно n.

Структура цикла. Любой цикл состоит из трех частей: начала, проверки и серии. Начало – всегда первая часть цикла и главная его функция – подготовить цикл: назначить начальные значения всем переменным, значения которых изменяются в цикле (например, параметру цикла, если он есть). Другая функция начала – выполнить «чистку» цикла вычисления, не зависящие от параметра цикла, вынести за цикл. Проверка определяет момент выхода из цикла. Она содержит зависящие от переменных серии условие, которое может соблюдаться или не соблюдаться. Именно условие устанавливает, сколько раз подряд будет выполняться серия. Серия или тело цикла состоит из рабочей части и продвижения. В первой производятся, например, вычисления по формулам алгоритма, пересылка данных, вывод текущих результатов и т.п. Вторая означает: сделать очередное обновление параметра цикла. В итеративных циклах продвижение часто совпадает с рабочей частью.

Составные части серии могут меняться местами, что влияет на начальное значение параметра цикла (предпервое, первое) и на запись условия. Проверка и серия переставимы друг с другом. Это приводит к тому, что одни циклы (циклы с предусловием – While) могут не выполняться вообще, а другие (циклы с постусловием – Repeat…Until) будут всегда работать хотя бы одни раз.

Решим задачу для вычисления суммы последовательных n чисел. Расположим составные части цикла в определенном порядке (Цикл с предусловием):

 

S 0

i 1

метка если i £ n

     то

         S S + i

         i i +1

     иди к метка

     конец-если

Здесь до входа в цикла начальное значение суммы равно нулю (S 0), а значение параметра цикла единице (i 1). Если с самого начала условие не соблюдается (k > n), цикл не выполняется ни разу, S останется равно 0 и управление передается на слово конец-если. Если же условие i £ n истинно, то цикл выполняется n раз. Тогда в теле цикла накапливается сумма S и подсчитываются новые значения счетчика цикла i i +1.

Теперь рассмотрим цикл с постусловием.

 

      

В серии продвижение и рабочую часть разместим двояко: сначала – продвижение®рабочая часть, а затем рабочая часть®продвижение:

S 0 i 1 метка i i +1        S S + i если i < n      то      иди к метка      конец-если S 0 i 1 метка S S + i           i i +1 если i £ n      то      иди к метка      конец-если

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

Построение алгоритма. Команды «повторение». Цикл с предусловием можно описать командами пока выполнять и для выполнять. Это составные команды. Первую из них можно представить псевдокодом и графически так:

пока условие выполнять

серия

конец-цикл

 

 

Серия выполняется, пока условие сохраняет силу; если с самого начала условие не соблюдается, то серия не выполняется ни разу. Условие – это логическое выражение (способное принимать одно из двух возможных значений – истина или ложь). Наша задача теперь решается так:

S 0

i 1

пока i £ n выполнять

         S S + i

         i i +1

     конец-цикл

        

Для описания цикла с параметром предназначена команда для выполнять (можно использовать команду пока):

для i Î M выполнять

серия

Конец-цикл

где i – параметр цикла, М – некоторое множество и предполагается, что известен порядок выборки из M.

    Если в М элементов нет, то цикл заканчивается; в противном случае выполняется серия и выбирается очередной элемент.

для i от j 1 до j 3 [ шаг j 2] выполнять

серия

Конец-цикл

 

 


                                                                                  

Здесь j1, j3 – начальное и конечное значения параметра i, а j2 – шаг изменения i. Эту команду можно было бы представить менее лаконично с помощью команд «ветвление» и «цепочка». Считаем (для определенности), что j2 > 0:

если j1 £ j3

то

i j 1    серия

i j 1 + j 2 серия

ij 1 + 2 j 2 серия

i j 3    серия


Конец-если

    Таким образом, серия выполняется, если соблюдается условие i £ j3, и не выполняется, если i > j3, или когда в процессе повторений значение i превзойдет j3. Если фраза шаг j 2 пропущена, по умолчанию предполагается j 2 =1.

Запишем алгоритм подсчета суммы первых последовательных n чисел:

S 0

для i от 1 до n шаг 1 выполнять

         S S + i

Конец-цикл

Цикл с постусловием можно описать командой выполнять пока. В записи псевдокодом и блок-схемой алгоритм будет иметь вид.

Выполнять

серия

Пока условие

Здесь серия всегда выполняется один раз, каким бы ни было начальное значение условия, а затем повторяется до тех пор, пока условие остается верным.

Например, вычисление суммы n последовательных целых чисел можно записать так:

S 0

i 1

Выполнять

        i i +1

        S S + i

пока i £ n

Командная скобка конец-цикл в команде выполнять пока не нужна.

Команды повторения с предусловием не имеют преимуществ перед командой с постусловием и наоборот. Выбор команды повторения задается алгоритмом.

 


Практическая часть:



Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: