next up previous contents
След.: Упражнение Выше: Операторы управления ходом программы Пред.: Упражнение   Содержание


Конструкция выбора

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

[имя:]SELECT CASE (скалярное выражение)

CASE диапазон[,диапазон...] [имя]

блок операторов

[CASE DEFAULT]

END CASE [имя]

Скалярное выражение -- целого, логического или символьного типа. Диапазон имеет вид:

  1. L0,

  2. либо L0:,

  3. либо :L1,

  4. либо L0:L1,

где L0 и L1 -- скалярные выражения того же типа, что и выражение в заголовке. Имя, если указано, должно присутствовать всюду, где указано [имя] и, разумеется, одно и то же. Конструкция работает так. Вычисляется значение выражения; оно сравнивается с выражениями диапазонов. Если вычисленное значение:

  1. совпадает со значением одиночного выражения в блоке CASE;

  2. не меньше, чем значение выражения L0 в блоке CASE

  3. не больше, чем значение выражения L1 в блоке CASE

  4. не меньше, чем значение выражения L0 и не больше, чем значение выражения L1 в блоке CASE,

выполняется соответствующий блок операторов. Если ни одного совпадения не обнаружено, выполняется блок CASE DEFAULT, если он есть. Не допускается более одного совпадения. В любом случае выполняется не более одного блока. Примеры [14]:

SELECT CASE (N)

CASE (:-1)

SIGNUM = -1

CASE (0)

SIGNUM = 0

CASE (1:)

SIGNUM = 1

END SELECT

Блок кода для проверки корректности скобок:

CHARACTER (80) :: LINE

INTEGER:: LEVEL, I

...

LEVEL = 0

SCAN_LINE: DO I = 1, 80

CHECK_PARENS: SELECT CASE (LINE (I:I))

CASE (’(’)

LEVEL = LEVEL + 1

CASE (’)’)

LEVEL = LEVEL - 1

IF (LEVEL < 0) THEN

PRINT *, ’Лишняя правая скобка’

EXIT SCAN_LINE

END IF

CASE DEFAULT

! Пропустить прочие символы

END SELECT CHECK_PARENS

END DO SCAN_LINE

IF (LEVEL > 0) THEN

PRINT *, ’Не хватает правой скобки’

END IF

Множественный выбор:

SELECT CASE (N)

CASE (1, 3:5, 8)

... !сделать что-то

CASE DEFAULT

...!сделать что-то иное

END SELECT



Подсекции
next up previous contents
След.: Упражнение Выше: Операторы управления ходом программы Пред.: Упражнение   Содержание
Ilya A. Chernov 2012-12-19
X