Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Всё_о_Паскале.doc
Скачиваний:
7
Добавлен:
20.11.2018
Размер:
4.54 Mб
Скачать

7. Разветвляющийся вычислительный процесс и условный оператор

Главное, чего недостает нашим первым программам – гибкости и умения принимать решения. Ведь уже несложный алгоритм решения квадратного уравнения предусматривает два варианта расчета, реальные же алгоритмы могут выдавать результаты, зависящие от десятков и сотен условий.

Разветвляющийся вычислительный процесс (РВП) реализуется по одному из нескольких направлений вычисления (ветвей алгоритма). Выбор одной из ветвей зависит от истинности или ложности некоторого условия (логического выражения), включенного в состав условного оператора. Программа должна учитывать все возможные ветви вычислений. Всегда выполняется только одна из всех возможных ветвей.

7.1. Логические выражения строятся из арифметических выражений, операций отношения, логических операций и круглых скобок.

Результатом вычисления логического выражения является одно из двух значений: TRUE или FALSE.

7.2. Операции отношения имеют следующий общий вид:

арифм.выраж.1 ОО арифм.выраж.2

где ОО – один из следующих знаков операций:

< <= > >= = <>

Последний знак обозначает отношение "не равно". Обратите также внимание на запись отношений "меньше или равно", "больше или равно".

В любое логическое выражение должна входить хотя бы 1 операция отношения!

Пр.

d<0 выбор ветви вычислений зависит от значения d

sqr(x)+sqr(y)<=sqr(R) результат = TRUE для точек с коорд. (x,y), лежащих внутри круга радиуса R с центром в начале координат

cos(x)>1 результат всегда = FALSE

К вещественным значениям операция = ("равно") в общем случае неприменима из-за неточного представления этих значений в памяти компьютера. Поэтому для вещественных переменных отношение вида a=b заменяется на abs(a–b)<E, где Е – малая величина, определяющая допустимую погрешность.

7.3. Логические операции применимы только в логических выражениях и служат для составления сложных условий, требующих более одной операции отношения. В Паскале определены 3 логических операции:

Математическая запись

Запись на Паскале

Название

not

Отрицание

and

Операция "И" (логическое умножение)

or

Операция "ИЛИ" (логическое сложение)

xor

Операция "исключающее ИЛИ"

Операция 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 также связывает не менее 2 логических выражений. Результат равен TRUE, если хотя бы одно выражение истинно и FALSE, если все выражения ложны.

Пр. Распишем выражение : (x<a) or (x>b)

другой способ – not ((x>=a) and (x<=b))

Пр. Распишем условие "хотя бы одно из значений a,b,c положительно":

(a>0) or (b>0) or (c>0)

Пр. Условие "только одно из значений a,b,c положительно":

(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) и в том случае, когда все связанные ей логические выражения истинны. Чтобы лучше уяснить это отличие, составим так называемую таблицу истинности этих двух логических операций. Для краткости значение false обозначим нулем, а true – единицей. Для двух логических аргументов возможно всего 4 комбинации значений 0 и 1:

Аргумент A

Аргумент B

A or B

A xor B

0

0

0

0

0

1

1

1

1

0

1

1

1

1

1

0

Пр. Условие "только одно из значений 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).

Приоритет операций: 1. not. 2. and. 3. or и xor. 4. Отношения.

Поскольку отношения имеют самый низкий приоритет, то их необходимо заключать в круглые скобки.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]