Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Раздел 3_2.pdf
Скачиваний:
23
Добавлен:
11.02.2016
Размер:
1.22 Mб
Скачать

Tип1 является вещественным типом, а Tип2 является целочисленным типом;

Tип1 и Tип2 являются строковыми типами;

Tип1 является строковым типом, а Tип2 является символьным типом (Char);

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

Выражения и операции

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

В Паскале определены в зависимости от количества и типа операндов (данных, участвующих в операции) следующие виды операций:

унарные

бинарные (в которых участвуют два операнда);

поразрядные операции (операции над битами);

отношений (сравнение двух операндов);

логические (операции над логическими операндами);

операции над строками.

Арифметические выражения и операции

В Паскале предусмотрены следующие математические операции

Обозначение

Содержание операции

+

сложение

-

вычитание

*

умножение

/

деление

div

деление нацело (отбрасывание дробной части)

mod

взятие остатка при делении

Следует отметить, что применение операции деления приводит к вещественному результату и не применимо для выражений целого типа.

Этот набор арифметических операций существенно расширяется за счет стандартных функций, которые дают вещественный результат, как при вещественном, так и целом аргументе:

sin(x) тригонометрический синус (аргумент задается в радианах); cos(x) тригонометрический косинус;

arctan(x) – арктангенс (возвращает результат в радианах); ln(x) – натуральный логарифм (по основанию е); exp(x) – экспонента (ех);

sqrt(x) – квадратный корень из х.

abs(х) – абсолютная величина х (модуль числа); sqr(x) – квадрат значения х;

Стандартные функции abs(x) и sqr(x) при вещественном аргументе вырабатывают вещественный результат, а при целом целый.

Следует заметить, что в Паскале не предусмотрено стандартной функции возве-

42

дения в степень. Для возведения числа в целую не отрицательную степень необходимо перемножить основание само на себя необходимое число раз, а в нецелую - произвести вычисление по формуле exp(a*ln(x)) {X в степени а}.

Поразрядные операции

Для описания действий над битами в Паскале имеются следующие операции:

Операция

Описание

shl

сдвигает биты влево на указанное число позиций, заполняя оставшиеся

справа разряды нулями;

shr

сдвигает биты вправо на указанное число позиций, заполняя оставшие-

ся слева разряды нулями;

and

выполняет логическое and (и) над парой битов, возвращает 1, если оба

бита 1 и 0 в противном случае;

or

выполняет логическое or (или) над парой битов, возвращает 0, если оба

бита равны 0 и 1 в противном случае;

xor

выполняет логическое исключающее "или" над парой битов, возвраща-

ет 1, если биты имеют разное значение и 0 в противном случае;

not

операция логического дополнения бита - заменяет 0 на 1 и обратно.

Эти операции выполняют действия на битовом уровне только с целочисленными значениями.

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

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

Операции отношений сравнивают два значения, возвращая в результате значение True или False. В Паскале реализуются следующие операции отношений:

>

больше;

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

<

меньше;

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

=

равно;

<> не равно;

in

есть элемент.

 

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

В следующей таблице приведены результаты работы выражений использующие логические операции

Значения операндов

Результат бинарной логической операции

Операнд1

Операнд2

and

or

xor

True

True

True

True

False

True

False

False

True

False

False

True

False

True

False

False

False

False

False

True

Между логическими операциями и поразрядными операциями имеют место следующие различия:

логические операции возвращают результат True или False (булево значение), в

43

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

другими словами, выражение Flag and Index недопустимо, если Flag имеет булев тип, а Index целый (или наоборот).

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

X<20.2 X<=Xmax P<>0.0 (X<=(20+N))and(X>=(50+N))

Not(CanExit and (C<>0)) {CanExit : Boolean} (A<0)and(B>2)

Следует заметить, что запись предыдущего выражения в виде (A<0 and B>2) неверна т.к. операция and имеет более высокий приоритет, чем операции сравнения. Вначале будет вычислена побитовая операция 0 and B, а затем <, что приведет к ошибке, т.к. A<(0 and B) имеет тип Boolean, а в операциях сравнения допускаются только переменные одинаковых типов.

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

Например, если Х - переменная вещественного типа с одинарной точностью, а Y - переменная вещественного типа с двойной точностью, то результатом выполнения следующих операторов будет значение False:

X := 1/3;

Y := 1/3; Writeln(X = Y);

Причина этого состоит в том, что Х имеет точность только до 7-8 цифр, а Y - точность до 15-16 цифр, и когда оба значения преобразуются к типу с повышенной точностью, то после первых 7-8 цифр остальные цифры будут различаться. Аналогично, результатом выполнения операторов:

X := 1/3; Writeln(X = 1/3);

будет значение False, результат 1/3 в операторе вывода Writeln вычисляется с точностью до 20 значащих цифр.

Операции со строками

Над строками определена единственная операция "+" , которая выполняет конкатенацию двух строк (объединение содержимого двух объектов строкового типа).

Все остальные действия над строками осуществляются с помощью функций, описанных в руководстве по языку.

Приоритеты операций

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

Приоритеты операций

Операция

Приоритет

Категория операции

@, not

Первый (высший)

Унарные

*, /, div, mod, and, shl, shr

Второй

Мультипликативные

+, -, or, xor

Третий

Аддитивные

=, <>, <, >,<=, >=, in

Четвертый (низший)

Отношения

Операции равного приоритета выполняются слева направо, хотя компилятор мо-

44