Иногда при решении задач возникает ситуация, когда в качестве операторов, содержащихся в ветвях, могут, в свою очередь, быть другие операторы условия. Их называют составными операторами. Причем количество вложений или, как еще говорят, уровней вложений может быть несколько. Теоретически это количество не ограничено, но практически это ограничение определяется объемом оперативной памяти компьютера, а, главное, удобством чтения и восприятия такого оператора. На практике используют не более трех вложений. Например, вычислить значения нелинейной функции у = f(х), график которой представлен на рис.11.1.
y
a
- b
b х
– а
Рис. 11.1 График функции
–
+ _
+
Рис. 11.2. Фрагмент блок – схемы вычисления функции
Из приведенного фрагмента блок–схемы видно, что в альтернативной ветви «НЕТ» условия первого уровня вложен другой оператор условия (второго уровня). Запись этого фрагмента с помощью оператора условия будет иметь вид:
if ((x > – b) && (z < b)) y = a/b*x;
else if (x < = – b) y = – a;
else y = a;
Здесь в альтернативной ветви else первого оператора условия вложен другой оператор условия.
Возможны случаи, когда оператор условия вкладывается в основную ветвь.
_
+
_ if (a > b)
{
+ if (b > 0) k++;
}
else k – –;
Рис.11.3. Фрагмент блок – схемы вычисления функции
Здесь вложенный оператор условия заключен в фигурные скобки и расположен в альтернативной ветви, но собственной альтернативной ветви не имеет. Фигурные скобки в этом случае играют важную роль. Дело в том, что компилятор языка С++ автоматически подсоединяет альтернативную ветвь else к основной ветви ближайшего оператора условия. Поэтому запись без фигурных скобок вида:
if (a > b)
if (b > 0) k ++;
else k – –;
соответствовала бы алгоритму, приведенному на рис.11.4.
–
+
–
+
Рис.11.4. Фрагмент алгоритма.
Как видно из рисунка этот алгоритм отличается от предыдущего и искажает логику вычислений, а, следовательно, влияет на результат.
Поэтому, вложенные в альтернативную ветвь безальтернативные операторы условия, всегда следует заключать в фигурные скобки. Для того чтобы особенно не раздумывать, когда ставить, а когда не ставить фигурные скобки, проще и надежнее всего заключать все вложенные операторы условия в эти скобки. Такой подход гарантирует исключение ошибки.