Вещественные выражения

В выражениях вещественного типа допускаются следующие операции:

+ - сложение;

- - вычитание;

* - умножение;

/ - деление.

Наряду с вещественными операндами в вещественных выражениях могут использоваться операнды целого типа. Кроме того, рассмотренные функции Abs и Sqr приусловии вещественного аргумента дают вещественный результат. Приведем функции, которые дают вещественный результат вне зависимости от аргумента:

Sin(x), Cos(x) - вычисляют одноименные тригонометрические функции (значение аргумента передается в функцию в радианах – вещественный тип).

ArcTan(х) - вычисляет обратную тригонометрическую функцию – арктангенс (значение угла возвращается в радианах.); тип аргумента х - Real.

Ln(x) - вычисляет натуральный логарифм – вещественный тип; тип аргумента х - Real.

Exp(x) - вычисляет экспоненту – вещественный тип; тип аргумента х- Real.

Sqrt(x) - вычисляет квадратный корень – вещественный тип; тип аргумента х - Real.

Необходимо отметить, что операция возведения в степень в Паскале отсутствует, но для вещественных выражений эта проблема легко решается, если воспользоваться свойствами функций Exp (экспонента) и Ln (натуральный логарифм). Из математики известны тождества:

Вещественные выражения - student2.ru Вещественные выражения - student2.ru и Вещественные выражения - student2.ru

Отсюда следует, что

Вещественные выражения - student2.ru .

Для вычисления логарифмов по другим основаниям можно применять формулу:

Вещественные выражения - student2.ru .

Здесь a > 0 и a ≠ 1. Приведём пример. Пусть мы имеем математическое выражение:

Вещественные выражения - student2.ru

Средствами языка Паскаль это выражение следует записать так:

(x*x-a)/(sqr(sin(x)/cos(x))-sin(x)*sin(x)*sin(x))*

exp(-b*b/x)-exp((x*x-b)*ln(a))*(b-x)/(a-x*x*x)

Хотя вещественный тип относится к скалярным, но на переменные и выражения данного типа накладываются некоторые ограничения. В частности, к вещественным аргументам нельзя применить функции порядка. - Pred и Succ. Нельзя использовать вещественные значения при индексации массивов, в качестве параметра цикла типа for и т. п.

Логические выражения

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

При выполнении этих операций допускается смешение типов Real (всех вещественных), Integer (всех целых). Результат операции отношения для любых операндов всегда логического типа - {false, true}.

В Паскале реализованы следующие операции отношения:

= - равно;

<> - не равно;

> - больше чем;

< - меньше чем;

>= - больше или равно;

<= - меньше или равно.

Примеры:

А = В {результат равен true, если А равно В

и false, если А не равно В}

А <> В {результат равен true, если А не

равно В и false, если А равно В}

А > В {результат равен true, если А больше

В и false в противном случае}

А > 0 {результат равен true, если А больше

нуля и false в противном случае}

В операциях сравнения для символов и строк необходимо вспомнить, что у каждого элемента скалярного, перечислимого типа есть свой код - порядковый номер. Его можно получить, используя функцию Ord. Заведомо известно, что коды всех латинских и русских букв упорядочены согласно таблице ASCII (смотри п.3.5.4), а коды всех цифр упорядочены по их арифметическим значениям. Данное отношение порядка и позволяет сравнивать любые символы и строки.

Пример:

'А' < 'D'

‘X < ‘Y

‘2’ < ‘5’

ABCD’ < ‘АВСЕ’

'ABC' < 'ABCD'

Кроме операций отношения в логических выражениях используются скобки и логические связки (операции с операндами типа Boolean):

- унарная (имеющая один операнд): not;

- бинарные (имеющие два операнда): and, or, xor.

Запись бинарных логических связок осуществляется следующим образом:

<логическое выражение - первый операнд> <логическая связка> <логическое выражение - второй операнд> ;

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

Примеры логических выражений со связками:

(А>5) and (Т<10)

((М<3) or (Х<0)) and Z.

С помощью произвольных логических выражений X и Y можно легко показать смысл логических связок. Напомним, что выражения X и Y могут иметь только одно из двух значений {false, true}.

X and Y - ("конъюнкция") данное логическое выражение истинно, тогда и только тогда, когда X и Y одновременно истинны.

X or Y - ("дизъюнкция") данное логическое выражение истинно, когда по крайней мере одно из выражений X или Y истины.

X xor Y - ("исключающая дизъюнкция") данное логическое выражение истинно, когда X<>Y и ложно в обратном случае.

not Х - ("отрицание") данное логическое выражение истинно, когда X— ложно и ложно, когда X— истинно.

Используя операции отношения на множестве логических значений можно определить и другие операции математической логики.

Например:

(X, Y:Boolean)

Х<= Y- импликация;

Х = Y— эквивалентность;

Х <> Y— исключающее или.

Сами логические операции очень удобно определять с помощью таблиц истинности, в которых единица соответствует логическому значению true, а ноль - false.

Пусть X и Y это логические операнды. Для всевозможных комбинаций их значений построим таблицу истинности логических выражений X and Y, X or Y, X xor Y, not X, X<=Y , Х = Y.

X Y X and Y X or Y Х <> Y Х<= Y X =Y not Х

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

A B A and B not B A and (not B) (A and B) or (A and (not B))

При вычислении логических выражений можно воспользоваться установкой компилятора {$В-} или {$В+}. Она отвечает за режим оптимизации вычисления логических выражений. Например, в логическом выражении

(2<>2) and (a<y) and (t<z)

достаточно вычислить первый элемент конъюнкции, чтобы сказать, что всё логическое выражение ложно. Но в некоторых случаях режим оптимизации приводит к ошибкам. Например, в той части логического выражения, которая была отброшена в результате оптимизации вызывалась функция, имеющая логическое значение и выполняющая полезную работу, но в результате оптимизации функция не будет вызвана и это приведет к ошибке.

Наши рекомендации