
- •Lesson 2 Ветвления и циклы
- •Блок-схемы алгоритмов
- •Управляющие операторы
- •Операторы перехода
- •Условный оператор If
- •Оператор If...Then
- •Оператор If...Then...Else
- •Оператор If с тремя и более блоками
- •Переключатель Select
- •Безусловный переход GoTo
- •Операторы Stop и Return
- •Операторы цикла
- •Операторы Exit и Cycle
- •Цикл по переменной
- •Количество повторений цикла по переменной
- •Подробная блок-схема цикла по переменной
- •Цикл Do while
- •Бесконечный цикл
- •Вложенные циклы
- •Неявные циклы
Оператор If с тремя и более блоками
В наиболее полной форме оператор If...then...elseможет содержать несколько блоков альтернативных действий, добавляемых конструкциейelseif...then:
If(логическое выражение 1)then
Блок if
Elseif (логическое выражение 2)then
Блок elseif2
Elseif (логическое выражение 3)then
Блок elseif3
Else
Блок default ! выполняется при невыполнении всех условий
Endif
Ключевое слово Elseif, логическое выражение и слово thenпишутся в одной строке. Это один составной оператор, и завершающийEndifтожетолько один.
Ветвей Elseif...thenв операторе может быть несколько, ветвьElseможет отсутствовать.
Изображение такой конструкции на блок-схеме:
Оператор выполняется следующим образом: последовательно проверяются логические выражения в скобках, пока не будет найдено истинное. Тогда проверка прекратится, и будет выполнен соответствующий блок, а затем управление будет передано оператору Endif. Если среди всех условий нет ни одного истинного, выполнитсяБлок default. Если же в этой ситуации ветвьElseотсутствует, не будет выполнено никаких действий.
Это наиболее общая форма структурного оператора If. Очевидно, что операторIf...then...elseс двумя блоками является ее частным случаем и может быть получен удалением ветвейElseif. Если, кроме того, удалить ветвьElse, то в оператореIfостанется только один блок.
Пример 1
If(x > 0)then
Write(*,*) 'x > 0'; y = sqrt(x)
Elseif (x < 0)then
Write(*,*) 'x < 0'
Elseif (x == 0)then
Write(*,*) 'x = 0’; y = 0
Else
Write(*,*) 'Так не бывает'
Endif
Попробуем реализовать ту же конструкцию, используя встроенные операторы If
Пример 2
A1: If(x > 0)then
Write(*,*)'x > 0'; y = sqrt(x)
Else
A2: If (x < 0)then
Write(*,*)'x < 0'
Else
A3: If (x == 0)then
Write(*,*)'x = 0’; y = 0
Else
Write(*,*)'Так не бывает'
Endif A3
Endif A2
Endif A1
Легко убедиться в лаконичности и наглядности многоблочного оператора If.
На примере 2хорошо видно, почему каждый блок, встроенный в некую конструкцию, рекомендуется сдвинуть вправо на несколько позиций. Это хороший стиль программирования. Текст визуально становится более легким для чтения.
Если в программе несколько операторов If, можно дать имя каждому из них. Имя оператора является необязательным, но если оно указано в его заголовке, то становится обязательным для завершающей строки оператора. Применение имен операторов А1, А2, А3 также продемонстрировано напримере 2.
Переключатель Select
Оператор selectпредназначен для реализации ветвлений выбором одного варианта изнесколькихвозможных. В этой конструкции проверяется только одно выражение; значение его может быть либо целым, либо символьным.
В общем виде конструкция выглядит так:
Select case (выражение)
Case (множество значений 1)
Блок case1
Case (множество значений 2)
Блок case2
. . .
Case Default
Блок default
End select
Блок-схема оператора select:
В круглые скобки после ключевого слова Case помещаются списки непересекающихся значений и интервалов, поэтому выполнение оператора – это выполнение не более одного блокаCase. Если значения выражения не принадлежит ни одному из указанных множеств, то выполняетсяблок default,
Пример(переменнойRange присваивается значение в зависимости от значения абсолютной величины переменнойNumber):
Integer:: Number, Range
Select case (abs(Number))
Case (-5:-3, 6:9)
Range = 1
Case (-2:2)
Range = 2
Case (3, 5)
Range = 3
Case (4)
Range = 4
Case Default
Range = 10
End select