учебник по паскалю. Программа 5 Алгоритм 5 Свойства алгоритма 6 Формы записи алгоритма 6
Скачать 2.21 Mb.
|
7. Разветвляющийся вычислительный процесс и условный операторГлавное, чего недостает нашим первым программам -- гибкости и умения принимать решения. Ведь уже несложный алгоритм решения квадратного уравнения предусматривает два варианта расчета, реальные же алгоритмы могут выдавать результаты, зависящие от десятков и сотен условий. Разветвляющийся вычислительный процесс (РВП) реализуется по одному из нескольких направлений вычисления (ветвей алгоритма). Выбор одной из ветвей зависит от истинности или ложности некоторого условия (логического выражения), включенного в состав условного оператора. Программа должна учитывать все возможные ветви вычислений. При запуске программы, в зависимости от данных, выполняется только одна из возможных ветвей. 7.1. Логические выраженияЛогические выражения (ЛВ) строятся из АВ, операций отношения, логических операций и круглых скобок. Результатом вычисления ЛВ является одно из двух значений: true или false. 7.2. Операции отношенияОперации отношения (сравнения) имеют следующий общий вид: АВ1 ОО АВ2 где АВ -- арифметические выражения, ОО -- один из следующих знаков операций: < <= > >= = <> Последний знак обозначает отношение "не равно". Обратите также внимание на запись отношений "меньше или равно", "больше или равно". В любое логическое выражение должна входить хотя бы одна операция отношения. Приведем примеры ЛВ, включающих одну ОО: d<0 -- выбор ветви вычислений зависит от значения d; sqr(x)+sqr(y)<=sqr(r) -- результат будет равен true для точек с координатами (x, y), лежащих внутри круга радиуса R с центром в начале координат; cos(x)>1 -- результат этого ЛВ всегда равен false. К вещественным значениям в общем случае неприменима операция = ("равно") из-за неточного представления этих значений в памяти компьютера. Поэтому для вещественных переменных отношение вида a=b часто заменяется на abs(a–b) 7.3. Логические операцииЛогические операции применимы только в логических выражениях и служат для составления сложных условий, требующих более одной операции отношения. В Паскале определены логические операции, описанные в табл. 7.1. Табл. 7.1. Логические операции языка Паскаль
Операция NOT применима к одному логическому выражению (является унарной). Ее результат равен true, если выражение ложно и наоборот. Например, выражение NOT (sin(x)>1) всегда даст значение true. Операция AND связывает не менее двух логических выражения (является бинарной). Ее результат равен true, если все выражения истинны или false, если хотя бы одно из выражений ложно. В качестве примера распишем выражение . Т. к. операции принадлежности в Паскале нет, используем операцию AND и операции отношения: (x>=a) and (x<=b). Математическое выражение a,b,c>0 (одновременно) будет иметь вид (a>0) and (b>0) and (c>0). Операция OR также связывает не менее двух логических выражений. Ее результат равен true, если хотя бы одно выражение истинно и false, если все выражения ложны. Распишем выражение . На Паскале оно будет иметь вид(xb). Другой способ связан с применением операции NOT: not ((x>=a) and (x<=b)). Условие "хотя бы одно из значений a,b,c положительно" может быть записано в виде (a>0) or (b>0) or (c>0) . Условие "только одно из значений a,b,c положительно" потребует объединения возможностей операций AND и OR: (a>0) and (b<=0) and (c<=0) or (a<=0) and (b>0) and (c<=0) or (a<=0) and (b<=0) and (c>0). Операция XOR, в отличие от OR, возвращает значение "ложь" (false) и в том случае, когда все связанные ей логические выражения истинны. Чтобы лучше уяснить это отличие, составим так называемую таблицу истинности двух логических операций (табл. 7.2). Для краткости значение false обозначим нулем, а true -- единицей. Для двух логических аргументов возможно всего 4 комбинации значений 0 и 1. Табл. 7.2. Таблица истинности операций OR и XOR
В качестве примера использования операции XOR запишем условие "только одно из значений a,b положительно": (a>0) xor (b>0). К сожалению, записать условие "только одно из значений a,b,c положительно" в напрашивающемся виде (a>0) xor (b>0) xor (c>0) нельзя -- результат этого выражения будет равен true и в случае, когда все три значения положительны. Связано это с тем, что при последовательном расчете логических выражений слева направо (1 xor 1) xor 1 будет равно 0 xor 1 = 1. С помощью xor удобно организовывать различного рода переключатели, которые последовательно должны принимать одно из двух состояний: x := x xor true; writeln ('x=', x); x := x xor true; writeln ('x=', x); Независимо от начального значения логической переменной x, второе выведенное на экран значение будет логическим отрицанием первого. В реальной практике конструкции подобные x := x xor true; не дублируются в коде многократно, а применяются внутри цикла (см. гл. 9). Приоритет логических операций следующий: самая старшая операция -- not, затем and, следующие по приоритету -- or и xor (равноправны между собой), самый низкий приоритет имеют операции отношения. Последнее служит причиной того, что в составных условиях отдельные отношения необходимо заключать в круглые скобки, как и сделано во всех примерах раздела. 0> |