Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
БрошюраОкончательный.doc
Скачиваний:
20
Добавлен:
28.10.2018
Размер:
3.14 Mб
Скачать

Нелинейные алгоритмы. Ветвление

  1. Что такое ветвление? Во многих ситуациях приходится делать выбор между несколькими способами поведения в зависимости от имеющихся условий. Например, обращаясь к житейским ситуациям, можно сказать, что если на улице холодно, то нужно надеть теплые вещи, если жарко – наоборот, легкие. Выполнение различных действий в ответ на выполнение или невыполнение некоторого условия – это ветвление.

  2. Как выглядит блок-схема ветвления? Проверяется истинность некоторого Условия. Если это Условие истинно, то выполняется один блок действий, в противном случае (когда Условие ложно), выполняется другой блок действий. Это так называемое полное ветвление. Есть неполное ветвление, при котором в случае ложности Условия ничего не выполняется.

Рис. 7. Блок-схемы полного и неполного ветвления

3. Как выглядит оператор ветвления? Синтаксис оператора полного ветвления таков:

If Условие Then Предложение1 Else Предложение2;

Читается оно так: если (If) выполняется Условие, то (Then) выполняется предложение Предложение1, в противном случае (Else) выполняется предложение Предложение2. Синтаксис неполного ветвления:

If Условие Then Предложение1;

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

Заметим, что Условие может быть составным. О правилах построения подобного выражения см. в п.23 и п.24 Части 2.

Кроме того, в операторе ветвления Предложение1 или Предложение2 могут состоять только из единичной команды. Как же поступить в случае, когда нужно выполнить не одно, а несколько действий? Нужно эти несколько предложений обязательно заключить в операторные скобки begin .. end, и каждый из блоков предложений воспринимается таким образом как единое целое.

  1. Как быть, если нужно проверить несколько условий? Для этого пользуются либо составными выражениями, либо вложенными ветвлениями.

Рассмотрим пример: проверить, является ли первое из трех чисел x, y, z строго большим остальных? Подумаем, как бы искал максимум человек. Он бы сначала сравнил первое число со вторым, а затем, если бы первое было больше второго, сравнил бы первое с третьим и только тогда вынес бы окончательный ответ. Выглядит запись этого сравнения так (части операторов записаны отдельно и с разными отступами для лучшего понимания и удобочитаемости):

if

x<=y

then

writeln(‘Ложь, что первое число больше остальных’) else

if

x<=z

then

writeln(‘Ложь, что первое число больше остальных’)

else

writeln(‘Первое число больше остальных’);

Обратите внимание, что перед и после else в примере не поставлена точка с запятой, по причине незавершенности оператора ветвления. Распространенной ошибкой является постановка точки с запятой перед словом else в операторе if. Не допускайте ее! Точка с запятой ставится только в конце оператора (исключая, конечно, те знаки препинания, которые пишутся между операторами в блоке begin… end).

Заметим, что данный пример можно решить иначе, используя составные логические выражения:

if

(x>y)and(x>z)

then

writeln(‘Первое число больше остальных’)

else

writeln(‘Ложь, что первое число больше остальных’);

  1. Если нужно проверить, принимает ли переменная одно из ряда значений, можно ли использовать иной оператор, не if? Да, такой оператор существует. Это оператор множественного выбора case. Применяется он в случае, когда нужно сделать выбор значения некоторой переменной порядкового типа. Таким образом, он заменяет в данном случае вложенное ветвление.

  2. Каков формат оператора case? Синтаксис оператора следующий:

Case Переменная Of

ДиапазонЗначений1: Предложение1;

ДиапазонЗначений2: Предложение2;

ДиапазонЗначенийN: ПредложениеN;

Else ПредложениеE;

End;

Заметим, что диапазоны значений могут быть записаны как промежутки значений от минимума до максимума, разделенные двумя точками (например: 0..5), либо как перечисление значений через запятые (например: 0, 1, 2, 3, 4, 5), либо как единичное значение.

Работает оператор таким образом: проверяется вхождение Переменной в некоторый из ДиапазоновЗначений, и если такое найдено, то выполняется соответствующее из Предложений1ПредложенийN. Если же вхождение не найдено, то выполняется ПредложениеE. Заметим, что блок Else ПредложениеE является необязательным, а слово End является обязательным.

Если блоки Предложений состоят из нескольких предложений, то они обязательно заключаются в операторные скобки begin .. end, и каждый из них воспринимается, таким образом, как единое целое.