Условный переход
Поупражняемся.
114. Напишите программы, которые в зависимости от введенного числа либо вычисляют функцию, либо выдают сообщение, что функция не определена:
115. Напишите программу для вычисления функции:
116. Напишите программу, определяющую четность или нечетность введенного с клавиатуры целого числа.
117. Напишите программу, находящую меньшее из двух, введенных с клавиатуры чисел.
118. По четырехзначному номеру года, запрошенному с клавиатуры определите номер столетия (например, для 1492 г. – ответ XV век, для 1812 г. – XIX век). Учесть, что началом века считается первый, а не нулевой, год. (То есть, 2000-й год, из астрономии – последний год XX века).
Выше мы рассмотрели полную форму условного оператора, когда в зависимости от истинности или ложности условия выполняются те или иные действия, после чего программа переходит к выполнению следующей за условным оператором команды.
Существует также неполная форма условного оператора. Она выглядит так:
IF условие THEN команды,_выполняемые_в_случае_истинности_условия
В этом случае программа проверяет условие, и в случае его истинности выполняет команды, указанные после служебного слова then. Если же условие ложно, то программа переходит к выполнению следующей за условным оператором команды.
Например, программу автомата по продаже сигарет можно модифицировать при помощи сокращенного варианта условного оператора:
CLS INPUT "Как Вас зовут"; N$ INPUT "А сколько Вам полных лет"; S IF S<18 THEN?"Вам еще рановато курить, ";N$: END ?'Минздрав России предупреждает – курение опасно для вашего здоровья!"
Здесь появляется новый оператор end, выполнение которого в любом месте программы приводит к ее остановке.
Возможен еще также составной условный оператор, когда после служебных слов then или else вновь следует условный оператор, когда выполнение тех или иных действий зависит не от одного, а от нескольких условий.
Например, допустим, что Преображенский полк гренадеров набирали только из тех новобранцев, рост которых был не менее 180 см, а вес – не менее 80 кг. Программа этого процесса выглядела бы следующим образом:
CLS INPUT "Как Вас зовут?"; N$ INPUT "Каков Ваш рост в см"; R INPUT "Каков Ваш вес в кг"; М IF R >=180 THEN IF M >=80 THEN?"Вы – достойный кандидат в гренадеры, ";N$ ELSE? N$; ", к сожалению, вы в гренадеры не годитесь"
Здесь условный оператор сначала проверяет соответствие кандидата по росту, а затем еще и по весу, и только в случае выполнения обоих условий выдается сообщение о пригодности кандидата.
При использовании составных условных операторов надо быть очень осторожным, чтобы не запутаться самому в then и else. Есть правило, по которому else относится к ближайшему слева от него then. В рассматриваемом случае первый условный оператор, который проверяет рост, относится к сокращенной форме, у него нет else, а второй является полным.
Отсюда получается такой казус, что если кандидат сразу не проходит по росту, то на экране вовсе не появится никакого сообщения, потому что программа должна перейти к следующей за условным оператором команде, а ее нет. Чтобы разобраться в этом, выполните упражнение. Вообще, лучше не злоупотреблять составными условными операторами, а разбивать их на несколько простых или использовать сложные условия, о которых мы поговорим чуть ниже.