
- •Часть 1
- •Содержание
- •Введение
- •Интегрированная среда разработки
- •Задания для выполнения
- •Линейные алгоритмы
- •Задания для выполнения
- •Дополнительные задания
- •Нелинейные алгоритмы. Ветвление
- •Задания для выполнения
- •If t then writeln(‘Кирпич пройдет’)
- •Нелинейные алгоритмы. Циклы
- •Задания для выполнения
- •Массивы
- •Задания для выполнения
- •Библиография
Нелинейные алгоритмы. Ветвление
-
Что такое ветвление? Во многих ситуациях приходится делать выбор между несколькими способами поведения в зависимости от имеющихся условий. Например, обращаясь к житейским ситуациям, можно сказать, что если на улице холодно, то нужно надеть теплые вещи, если жарко – наоборот, легкие. Выполнение различных действий в ответ на выполнение или невыполнение некоторого условия – это ветвление.
-
Как выглядит блок-схема ветвления? Проверяется истинность некоторого Условия. Если это Условие истинно, то выполняется один блок действий, в противном случае (когда Условие ложно), выполняется другой блок действий. Это так называемое полное ветвление. Есть неполное ветвление, при котором в случае ложности Условия ничего не выполняется.
Рис. 7. Блок-схемы полного и неполного ветвления
3. Как выглядит оператор ветвления? Синтаксис оператора полного ветвления таков:
If Условие Then Предложение1 Else Предложение2;
Читается оно так: если (If) выполняется Условие, то (Then) выполняется предложение Предложение1, в противном случае (Else) выполняется предложение Предложение2. Синтаксис неполного ветвления:
If Условие Then Предложение1;
В неполном ветвлении нет блока предложений, выполняющихся в том случае, когда Условие ложно.
Заметим, что Условие может быть составным. О правилах построения подобного выражения см. в п.23 и п.24 Части 2.
Кроме того, в операторе ветвления Предложение1 или Предложение2 могут состоять только из единичной команды. Как же поступить в случае, когда нужно выполнить не одно, а несколько действий? Нужно эти несколько предложений обязательно заключить в операторные скобки begin .. end, и каждый из блоков предложений воспринимается таким образом как единое целое.
-
Как быть, если нужно проверить несколько условий? Для этого пользуются либо составными выражениями, либо вложенными ветвлениями.
Рассмотрим пример: проверить, является ли первое из трех чисел 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(‘Ложь, что первое число больше остальных’);
-
Если нужно проверить, принимает ли переменная одно из ряда значений, можно ли использовать иной оператор, не if? Да, такой оператор существует. Это оператор множественного выбора case. Применяется он в случае, когда нужно сделать выбор значения некоторой переменной порядкового типа. Таким образом, он заменяет в данном случае вложенное ветвление.
-
Каков формат оператора 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, и каждый из них воспринимается, таким образом, как единое целое.