3.15. Условные выражения

Если в языке имеется конструкция IF THEN ELSE, то ее можно использовать в некоторой точке программы, когда одну переменную нужно сравнить с несколькими значениями. Обычно делают так:

IF (A = l) THEN MOVE С ТО D. IF (А=2) THEN MOVE С ТО Е. IF (А"3) THEN MOVE D ТО С.

В этом случае, даже если А—1, будут выполняться все one- * раторы IF. При использовании конструкции с ELSE сравнение можно прекратить, как только будет найдено истинное условие. Например,

IF (A = l) THEN MOVE С ТО D

ELSE IF (А=2) THEN MOVE С TO E

ELSE IF (A=3) THEN MOVE D TO С

В этой программе пропускаются проверки на истинность остальных условий, как только найдено истинное условие.

Дальнейшее улучшение (которое может привести к ухудшению удобочитаемости программы) состоит в том, чтобы расположить на первом месте условие, которое, по всей вероятности, является истинным, а за ним остальную часть условия. То есть если А обычно имеет значение 3, то оператор, проверяющий это, следует поставить первым:

IF (А=3) THEN MOVE D ТО С ELSE ...

Можно также расположить остальные условия в порядке их вероятности быть истинными. В этом случае условия будут в среднем завершаться настолько быстро, насколько это возможно.

Условные выражения часто содержат повторяющиеся выражения. Например, для вычисления корней квадратного уравнения имеется формула

Корни =-^--

Дискриминант Ь2—4ас нужно проверить на отрицательное значение, так как нельзя извлечь квадратный корень из отрицательной величины. Чтобы запрограммировать это, мы, вероятно, сделаем следующее:

^ ФОРТРАН:

1¥ (В*В — 4.0*А*С) 25,10,10 10 ДООТ1 = (—В + Бд!?Т(В*В — 4.0*А*С))/(2.0*А) 1*ООТ2 == ...

Выражение В*В — 4.0 *А* С является повторяющимся, так как оно используется в операторе IF и при вычислении корня. Было бы лучше вычислить выражение перед оператором IF и запомнить его значение, как это сделано в нижеследующей программе:

ФОРТРАН:

DIS = В*В — 4.0*А*С IF (DIS) 25,10,10 10 ROOT1 = (—В + SQRT(DIS))/(2.0*A)

Сложные повторяющиеся выражения предпочтительнее располагать внутри условных операторов, поскольку обычно сначала нужно проверить часть этих вычислений.

3.14. Оптимизация циклов || Оглавление || 3.16. Логические выражения


Услуги