43-45 Алгоритмические структуры: линейная, выбор, ветвление
Дата публикации: 15.03.2018 17:59:12
Операторы, переменные, некоторые функции
Выбор стр. 24 (+презентация в файлах)
Алгоритмическая структура Ветвление (презентация 2, с заданиями)
Разветвленная структура предусматривает выбор одной из двух или более последовательностей операторов в зависимости от некоторого условия. Основной вариант реализации в программе — с помощью условного оператора:
if логическое выражение
then оператор1
else оператор2
Если значение логического выражения — истина, выполняется «оператор1», иначе (т.е. при ложности логического выражения) — «оператор2».
Пример:
if x > 0
then y := sqrt(x)
else y := 0;
При положительном x переменная y получит значение квадратного корня из x, в другом случае — значение 0.
Если нужно выбирать более чем из 2 вариантов, используют вложенные условные операторы, например:
if x > 0
then y := sqrt(x)
else if x > -10
then y := 0
else y := -sqrt(-x-10);
При выполнении этого фрагмента программы x сначала сравнивается с нулем, если условие в первом условном операторе не выполнено, то затем сравнивается с -10. В зависимости от результата проверки выбирается одно из трех возможных действий. В общем случае, количество условных операторов оказывается на 1 меньше числа возможных вариантов.
Второй вариант реализации ветвления — оператор множественного выбора:
case дискретное выражение of
значение1: оператор1;
значение2: оператор2;
...
значениеN: операторN;
end;
Оператор выбора используется только в тех случаях, когда «ключевое» выражение может принимать несколько конкретных значений. В программе указывается действия, выполняемые при каждом из этих значений. В ряде реализаций языка может быть также указан оператор, выполняемый при несовпадении выражения ни с одним из перечисленных значений (эта часть, начинающаяся вместо значения словом «otherwise» или, в зависимости от реализации, «else», всегда записывается последней).
Пример:
write('Введите операцию');
readln(c);
case c of
'+': write(x + y);
'-': write(x - y);
'*': write(x * y);
'/': write(x / y);
else write('Недопустимая операция')
end;