Условный оператор
Возможности, описанные в предыдущих параграфах, позволяют писать линейные программы, в которых операторы выполняются последовательно друг за другом, и порядок их выполнения не зависит от входных данных.
В большинстве реальных задач порядок действий может несколько изменяться, в зависимости от того, какие данные поступили. Например, программа для системы пожарной сигнализации должна выдавать сигнал тревоги, если данные с датчиков показывают повышение температуры или задымлённость.
Для этой цели в языках программирования предусмотрены условные операторы. Например, для того чтобы записать в переменную М максимальное из значений переменных а и b, можно использовать оператор:
Видно, что запись на школьном алгоритмическом языке — это практически точный перевод записи ключевых слов языка Паскаль на русский язык. Обратите внимание, что в языке Паскаль перед ключевым словом else (иначе) точка с запятой не ставится.
В приведённом примере условный оператор записан в полной форме: в обоих случаях (истинно условие или ложно) нужно выполнить некоторые действия. Программа выбора максимального значения может быть написана иначе:
Здесь использован условный оператор в неполной форме, потому что в случае, когда условие ложно, ничего делать не требуется (нет слова иначе и операторов после него).
Для того чтобы сделать текст программы более понятным, всё тело условного оператора сдвинуто вправо. Вообще говоря, это не обязательно: в Паскале вообще вся программа может быть записана в одну строку, а в школьном алгоритмическом языке важно только разбиение программы на строки, а отступы игнорируются. Тем не менее запись с отступами значительно повышает читаемость программ, и мы далее будем её использовать 1.
1 В некоторых языках, например в языке Python, отступы обязательны и все строки одного уровня вложенности должны иметь одинаковые отступы.
Часто при каком-то условии нужно выполнить сразу несколько действий. Например, в задаче сортировки значений переменных а и b по возрастанию нужно поменять местами значения этих переменных, если а > b:
В школьном алгоритмическом языке форма записи совсем не меняется, а на Паскале после ключевого слова then нужно записать составной оператор, в котором между словами begin и end может быть сколько угодно команд.
Кроме знаков < , > в условиях можно использовать другие знаки отношений: <= (меньше или равно), >= (больше или равно)» = (равно) и <> (не равно, два знака < , > без пробела).
Внутри условного оператора могут находиться любые операторы, в том числе и другие условные операторы. Например, пусть возраст Андрея записан в переменной а, а возраст Бориса — в переменной b. Нужно определить, кто из них старше. Одним условным оператором тут не обойтись, потому что есть три возможных результата: старше Андрей, старше Борис и оба одного возраста. Решение задачи можно записать так:
Условный оператор, проверяющий равенство, находится внутри блока иначе (else), поэтому он называется вложенным условным оператором. Как видно из этого примера, использование вложенных условных операторов позволяет выбрать один из нескольких (а не только из двух) вариантов.
При работе с вложенными условными операторами в языке Паскаль нужно помнить правило: любой блок else относится к ближайшему предыдущему оператору if, у которого такого блока ещё не было. Например, оператор
может быть записан с выделением структуры так:
Здесь второй блок else относится к ближайшему (второму, вложенному) условному оператору, поэтому буква Б будет выведена только тогда, когда оба условия окажутся ложными.
Следующая страница Сложные условия