Добавил:
СПбГУТ * ИКСС * Программная инженерия Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Язык Си. Лабораторные работы / Справочник. Часть 1 (СПбГУТ).doc
Скачиваний:
50
Добавлен:
10.09.2019
Размер:
949.25 Кб
Скачать

2.2.2.3. Использование вложенных инструкций if ... If

Этот способ является альтернативным по отношению к способу, использующему вложенные инструкции if...else...if. Общепринятым является мнение о том, что его использование приводит к плохо читаемому программному коду. Дело в том, что при его использовании в программном коде условие, обеспечивающее выбор действия, и само выбранное действие оказываются далеко расположенными. В этом можно убедиться, если обратиться к приведённой ниже обобщённой схеме использования рассматриваемого способа, в которой имеется две вложенные инструкции.

if(<выр1>) if(<выр2>) if(<выр3>) <инструкция4> else <инструкция3> else <инструкция2> else <инструкция1>

Условие выр1 обеспечивает выбор действия, определяемого инструкцией инструкция1. В программе это условие и выбранное с его помощью действие будут далеко расположены. Это приведёт к ухудшению читабельности программы.

Применим этот подход к решению задачи, рассмотренной в п. 2.2.2.2. В результате получим следующий программный код, реализующий вычисление функции

if(x > 0) if(x > 5) if(x > 10) y = -3 * x + 45; else y – x + 5; else y = 2 * x; else y = 0;

2.2.2.4. Использование сокращённых форм инструкции if

При использовании этого способа предусматривается, что выбор каждого из действий, входящих в набор возможных действий, выполняется независимо от других. Главным здесь является нахождение условия, позволяющего сделать требуемый выбор. Следующим шагом является запись сокращённой инструкции if, в логической части которой записывается найденное условие, а внутренняя инструкция реализует действие, соответствующее этому условию. Количество инструкций if, которое требуется для решения, совпадает с количеством действий, входящих в набор возможных действий.

Руководствуясь этими соображениями, можно получить следующее решение для задачи, сформулированной в п. 2.2.2.2.

if(x <= 0) y = 0; if(x > 0 && x <= 5) y = 2 * x; if(x > 5 && x <= 10) y = x + 5; if(x > 10) y = -3 * x + 45;

К достоинствам полученного решения можно отнести:

▪ отсутствие вложенных инструкций, что облегчает чтение программного кода,

▪ инструкции if могут следовать в любой последовательности, что уменьшает количество ошибок.

Имеется существенный недостаток, присущий данному способу, который состоит в том, что всегда выполняются все проверки. Это является существенным ограничением при практическом применении данного метода.

Отмеченный недостаток можно устранить, объединив сокращённые формы инструкции if в одну инструкцию if. Для этого необходимо между сокращёнными инструкциями записать зарезервированное слово else. При этом полученное выше решение приобретёт следующий вид

if(x <= 0) y = 0; else if(x > 0 && x <= 5) y = 2 * x; else if(x > 5 && x <= 10) y = x + 5; else if(x > 10) y = -3 * x + 45;

Отметим, что полученное решение совпадает со вторым решением, которое приведено в п. 2.2.2.2. Следует отметить, что указанное решение получено совсем из других соображений.