Разветвляющиеся алгоритмы и программы
В жизни нам часто приходится сталкиваться с ситуацией, когда
необходимо выбрать какой-то один из нескольких вариантов действий в
зависимости от некоторого условия. Классическим примером такого вы-
бора является сюжет из сказки: «Едет добрый молодец на коне и подъ-
езжает к развилке из трех дорог.....» (рис.3.1):
Разветвляющиеся алгоритмы и программы
В жизни нам часто приходится сталкиваться с ситуацией, когда
необходимо выбрать какой-то один из нескольких вариантов действий в
зависимости от некоторого условия. Классическим примером такого вы-
бора является сюжет из сказки: «Едет добрый молодец на коне и подъ-
езжает к развилке из трех дорог.....» (рис.3.1):
Аналогичных примеров из жизни можно привести много,
например:
ЕСЛИ пошел дождь,
ТО надо открыть зонт
ВСЕ
ЕСЛИ назвался груздем,
ТО полезай в кузов
ВСЕ
ЕСЛИ ласточки летают низко,
ТО будет дождь,
ИНАЧЕ дождя не будет
ВСЕ
В программировании для реализации такого рода ситуаций используются разветвляющиеся алгоритмы (программы):
Разветвляющимся называется алгоритм (программа), в котором в зависимости от истинности или ложности некоторого условия, выбирается один из двух (или нескольких) возможных путей продолжения алгоритма.
Эти пути продолжения называют ветвями.
В зависимости от количества ветвей различают:
1. Полное ветвление (две ветви)
2.Неполное ветвление (одна ветвь)
3.Многократное ветвление (больше двух ветвей)
На рисунке 3.2 приведена блок-схема полного и неполного ветвлений
В языке Паскаль для реализации разветвляющихся программ
используется условный оператор.
Он имеет следующий формат:
If <логическое выражение>
then <оператор 1>
[else <оператор2>];
Если в условном операторе присутствуют обе ветви (then и
else), то такую форму оператора называют полной, если же ветвь else
отсутствует – неполной.
При выполнении условного оператора в полной форме вычис-
ляется значение логического (булевского) выражения. Если оно равно
‘true’, то выполняется <оператор 1>, а <оператор 2> пропускается; если
же оно равно ‘false’, то выполняется <оператор 2>, а <оператор 1> про-
пускается.
При выполнении условного оператора в неполной форме также
сначала вычисляется значение булевского выражения. Если оно равно
‘true’, то выполняется <оператор 1>, если ‘false’- осуществляется пере-
ход к оператору, следующему за условным оператором, то есть в по-
следнем случае <оператор 1> просто пропускается (“обходится”).
После ключевых слов then и else по правилам языка Паскаль
можно записывать только один оператор, а часто бывает необходимо
выполнить несколько операторов на каждой из ветвей. Тогда эти опера-
торы объединяются в один составной оператор при помощи оператор-
ных скобок, роль которых выполняют ключевые слова begin (откры-
вающаяся скобка) и end (закрывающаяся скобка). То есть составной
оператор имеет следующий формат:
begin
<оператор 1>;
<оператор 2>;
...............
<оператор n>
end;
Если в разветвляющейся программе необходимо организовать
более двух ветвей (многократное ветвление), то можно использовать
вложенные условные операторы, то есть в качестве операторов на ветвях
then или else будут также стоять условные операторы.
При этом для удобочитаемости программы необходимо вырав-
нивать по левому краю (то есть располагать на одной вертикальной ли-
нии) соответствующую пару ключевых слов then-else:
If <логическое выражение 1>
then
if < логическое выражение 2>
then <.........>
else <.........>
else
if < логическое выражение 3>
then <..........>
else <...........>;
В целом же следует помнить, что по правилам языка Паскаль
каждому else соответствует ближайший стоящий перед ним then (if).
Это соглашение позволяет избежать неоднозначности в
трактовке выполнения вложенных условных операторов.
В качестве примера рассмотрим классическую задачу нахож-
дения максимального из трех чисел и проиллюстрируем ее решение не-
сколькими способами.
Постановка задачи
Даны три целых числа. Найти максимальное из них.
Введем обозначения: исходные числа a,b,c. Результат - m (мак-
симальное из них).
1 способ решения
Сравним первые два числа, найдем максимальное из них и ре-
зультат сохраним в переменной m (полное ветвление).
Затем сравним m и c (неполное ветвление)
Ниже (рис.3.3) приведены блок-схема алгоритма, текст про-
граммы и протокол работы в среде Паскаль АВС
Рис. 3.3 Первый способ решения
2 способ решения
Сначала считаем, что максимальное – первое число (m:=a). Потом
сравниваем последовательно m и b , m и c (неполные ветвления).
На рисунке 3.4 приведены блок-схема и текст программы:
Рис. 3.4 Второй способ решения
3 способ решения (этот способ интуитивно понятный, но неэффек-
тивный)
Три последовательных неполных ветвления с составными условия-
ми (рис. 3.5):
Рис. 3.5 Третий способ решения
4 способ решения
Вложенные ветвления: во внешнем сравниваем два первых числа,
а на каждой из ветвей соответственно максимальное из них с третьим
(рис. 3.6):