Лесенка if - else if
Из прошлого раздела урока вы узнали о существовании условных операторов. Теперь неплохо было бы получить информацию об особенностях их работы. Предположим нам необходимо написать программу для учета денежной скидки, в зависимости от суммы. Например, если покупатель приобрел товара на сумму больше 100 грн., он получает скидку 5%. Больше 500грн. - 10%, и, наконец больше 1000 грн. - 25%. приложение должно выдать сумму, которую должен уплатить покупатель, если последний получил скидку. Теперь необходимо найти оптимальный вариант ррешения задачи. Вариант решения № 1.
Данный пример, на первый взгляд у начинающего программиста не вызывает нареканий, однако, давайте рассмотрим ситуацию, в которой программа отработает весьма некорректно. Сумма, введенная с клавиатуры, равна 5000. Эта цифра привышает 1000, следовательно, мы должны получить 25% скидку. Однако, произойдет совсем другое. 1. Каждый оператор if является самостоятельным и независит от других if, следовательно, вне зависимости от того, какое из if выполнится, проверка условия все равно будет осуществляться для всех операторов. 2. Сначала, осуществится проверка условия if(summa>100). 5000, естественно больше 100, условие истинно и выполняется тело if. На экране мы получаем :
3. Однако, на этом программа не остановится - далее будет проанализированно условие if(summa>500). 5000 больше 500, условие снова истинно и выполняется тело if. На экране мы получаем :
4. Ну и, наконец программа проверит условие if(summa>1000), которое тоже окажется истинным, так как 5000 больше 1000. И, действие связанное с if, выполняется и теперь. На экран выводится:
Таким образом, вместо одной информационной надписи, мы получаем три. Такое решение задачи является нерентабельным. Попробуем оптимизировать его: Вариант решения № 2.
Для начала, снова представим, что пользователь ввел сумму размером 5000 грн. 1. Сначала, осуществится проверка условия if(summa>100&&summa<=500). 5000 не входит в заданный диапазон, условие ложно и тело if выполнятся не будет. 2. Далее будет проанализированно условие if(summa>500&&summa<=1000). 5000 не входит и в этот диапазон, условие снова ложно и тело if выполнятся не будет. 3. И, наконец программа проверит условие if(summa>1000), которое окажется истинным, так как 5000 больше 1000. И, действие связанное с if, выполнится. На экран выводится:
Казалось бы на этом можно остановиться, но давайте-ка проверим еще один вариант. Например, пользователь вводит значение 600. И, на экране появляются следующие данные:
Такой поворот событий объясняется легко: 1. Сначала, осуществится проверка условия if(summa>100&&summa<=500). 5000 не входит в заданный диапазон, условие ложно и тело if выполнятся не будет. 2. Далее будет проанализированно условие if(summa>500&&summa<=1000). 5000 входит в этот диапазон, условие истинно и тело if выполнится, на экран выведется сообщение о 10% скидке. 3. И, наконец программа проверит условие if(summa>1000), которое окажется ложным. Действие связанное с if выполняться не будет, но у данного самостоятельного оператора if, есть собственный else, который отработает в нашем случае. На экран выводится сообщение об отсутствии скидки. Вывод: во-первых, мы выяснили, что оператор else относится только к последнему if. Во-вторых, пришли к тому, что и данная реализация программы нас не устраивает. Рассмотрим еще один пример решения: Вариант решения № 3.
Внимательно проанализировав данный пример, вы заметите, что каждый следующий if, может выполниться только, в том случае, если не выполнился его "предшественник", так как находится внутри конструкции else последнего. Таким образом, мы наконец-то нашли оптимальный код реализации. Структрура, которую мы только что создали называется "Лесенка if else if", так как условия в ней располагаются в виде лестницы. Теперь, мы с вами знаем, какая это полезная конструкция. Остался последний штрих: Оптимизация кода. В предыдущем разделе урока прозвучало правило: Если к блоку if или else относится только одна команда, то фигурные скобки можно не указывать. Дело в том, конструкция if else считается одной цельной командной структурой. Следовательно, если внутри некоторых else нет ничего кроме вложенной конструкции, фигурные скобки таких else можно опустить:
Вот и всё!!! Задача решена. Мы получили цельную конструкцию множественного выбора, состоящую из отдельных, взаимозависимых условий. Теперь можно переходить к следующим разделам урока, где мы с вами подробно рассмотрим еще несколько примеров использования if else.
©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.
|