Главная страница / 24. Базовые алгоритмические структуры: 24.3. Циклические алгорит...

24.3. Циклические алгоритмические структуры

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

Цикл с постусловием (послеусловием) представлен в виде блок-схемы на рис. 24.6, а на псевдокоде – следующим листингом:


повторять
<тело цикла>
до <логическое выражение>

img246

Рис. 24.6. Блок-схема цикла с постусловием

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

На блок-схеме цикл с постусловием реализуется с помощью элемента альтернатива, используемого и в бинарном ветвлении.

Цикл с предусловием  представлен в виде блок-схемы на рис. 24.7, а на псевдокоде – следующим листингом:


пока <логическое выражение>
повторять
<тело цикла>

img247

Рис. 24.7. Блок-схема цикла с предусловием

Тело цикла выполнятся, пока логическое выражение имеет значение Истина. Естественно, что при входе в цикл оно должно иметь именно это значение, а при некотором числе повторений изменить свое значение на значение Ложь.

Циклы с постусловием и предусловием взаимозаменяемы. Их различение проявляется только в том, что при вхождении в цикл с «неправильным» значением логического выражения тела цикла с постусловием будет выполнено один раз, а тело цикла с предусловием не будет выполнено ни разу. В конкретной практике разработки алгоритмов иногда удобнее использовать цикл с постусловием, а иногда – с предусловием.

Цикл по переменной (цикл-модификация) с точки зрения теоретического программирования является избыточным, так как он может быть реализован с помощью предыдущих циклических конструкций. Но он используется чаще всего, и во всех языках программирования есть соответствующие ему операторы. Блок-схема этого цикла представлена на рис. 24.8. В данном примере управляющая переменная обозначена условным идентификатором var; B, E и S представляют собой выражения того же типа, что и var. Сначала var принимает значение b выражения B (begin): var := b. Тело цикла исполняется, а затем к переменной var прибавляется значение s выражения S (step):  var := var + s. Затем значение var сравнивается со значением e выражения E (end): var <= e. При выполнении этого условия тело цикла повторяется, при его нарушении – происходит вывод из цикла.

img248

Рис. 24.8. Блок-схема цикла по переменной

На псевдокоде цикл по переменной представляется следующим текстом:


для var от B до E шаг S
нц
тело цикла
кц

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

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

Если тело цикла содержит несколько действий (операторов), то на псевдокоде, как и при ветвлении, они объединяются служебными словами нач и кон. Иногда возникает необходимость прервать цикл при выполнении некоторого дополнительного условия. В таком случае возникает конструкция с выходом из середины тела цикла, представленная на примере цикла с послеусловием на блок-схеме рис. 24.9. Тело цикла при этом разбивается на две части – ТЦ1 и ТЦ2. После выполнения ТЦ1 происходит вычисление логического выражения ЛВ1. Если оно принимает значение Истина, то происходит выход из цикла.

Аналогично можно пропустить часть тела цикла ТЦ2 при его исполнении (рис. 24.10).

Обе этих конструкции в теоретическом программировании считаются избыточными, но во многих языках программирования они поддерживаются соответствующими операторами.

img249 img2410
Рис. Рис. 24.9. Блок-схема цикла
с выходом из середины
Рис. 24.10. Блок-схема цикла
с пропуском части тела цикла