
- •Структура программ
- •Блок-схемы алгоритмов
- •Управляющие операторы
- •Операторы перехода
- •Условный оператор 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