Сдам Сам

ПОЛЕЗНОЕ


КАТЕГОРИИ







Целая и вещественная арифметика





 

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

Алгебраические операторы

Оператор Действие
+ Сложение
- Вычитание
* Умножение
/ Деление
DIV Деление нацело
MOD Вычисление остатка от деления

 

При записи выражений между операндом и оператором, за исключением операторов DIV и MOD, пробел можно не ставить.

Результат применения операторов +, -, * и / очевиден.

Оператор DIV позволяет получить целую часть результата деления одного числа на другое. Например, значение выражения 15 DIV 7 равно 2.

Оператор MOD, деление по модулю, позволяет получить остаток от деления одного числа на другое. Например, значение выражения 15 MOD 7 равно 1.

В простейшем случае выражение может представлять собой константу или переменную.

 

Примеры выражений:

 

1230.001* i+1

А + В/С Summa*0.75 (В1+ВЗ+ВЗ)/3

Cena MOD 100

 

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

Важно уметь определять тип выражения. При определении типа выражения следует иметь в виду, что тип константы определяется ее видом, а тип переменной задается в инструкции объявления. Например, константы 0, 1 и -512 — целого типа (integer), а константы 1.0, 0.0 и 3.2Е-05 — вещественного типа (real).



Любые операции с вещественными числами выполняются с некоторой погрешностью.

В таблице 1приведены правила определения типа выражения в зависимости от типа операндов и вида оператора.

Таблица 1 – Правила определения типа выражения

Оператор Тип операндов Тип выражения
*, +, - Хотя бы один из операндов вещественного типа Вещественный тип
*, +, - Оба операнда целого типа Целый тип
/ Вещественный или целый тип Всегда вещественный тип
DIV, MOD Всегда целый тип Всегда целый тип

Правила использования операций с операндами различного типа приводятся в табл.2.

Таблица 2 – Правила использования операций с операндами различного типа

Операция Действие Тип операндов Тип результата
not Отрицание Логический Логический
not Отрицание Любой целый Тип операнда
@ Адрес Любой Указатель
* Умножение Любой целый Наименьший целый
* Умножение Любой вещественный Extended
* Пересечение множеств Множественный Множественный
/ Деление Любой вещественный Extended
div Целочисленное деление Любой целый Наименьший целый
mod Остаток от деления Любой целый Наименьший целый
and Логическое И Логический Логический
and Логическое И Любой целый Наименьший целый
shl Левый сдвиг Любой целый Наименьший целый
shr Правый сдвиг Любой целый Наименьший целый
+ Сложение Любой целый Наименьший целый
+ Сложение Любой вещественный Extended
+ Объединение множеств Множественный Множественный
+ Сцепление строк Строковый Строковый
- Вычитание Любой целый Наименьший целый
- Вычитание Любой вещественный Extended
or Логическое или Логический Логический
or Логическое или Любой целый Наименьший целый
= Равно Любой простой или строковый Логический
<> Не равно Любой простой или строковый Логический
< Меньше Любой простой или строковый Логический
<= Меньше или равно Любой простой или строковый Логический
> Больше Любой простой или строковый Логический
>= Больше или равно Любой простой или строковый Логический

 

Унарная операция @ применяется к операнду любого типа и возвращает результат типа pointer, в котором содержится адрес операнда. Если операция @ применяется к процедуре, функции или методу в объекте, ее результатом будет адрес точки входа в эту процедуру (функцию, метод). Этот адрес можно использовать только в подпрограмме, написанной на Ассемблере, или во фрагментах INLINE.

В Object Pascal определены следующие логические операции:

Ø not- логическое НЕ;

Ø and- логическое И;

Ø or- логическое ИЛИ;

Ø xor- исключительное ИЛИ.

Логические операции применимы к операндам целого и логического типов. Если операнды - целые числа, то результат логической операции есть тоже целое число, биты которого (двоичные разряды) формируются из битов операндов по правилам, указанным в табл.3.

Таблица 3 – Правила формирования

Логичеcкие операции над данными целого типа (поразрядно)
Операнд 1 Операнд 2 not and or xor
- - - -
- - - -
-
-
-
-

К логическим же в Object Pascal обычно относятся и две сдвиговые операции над целыми числами:

Ø i shlj - сдвиг содержимого i на j разрядов влево; освободившиеся младшие разряды заполняются нулями;

Ø i shrj - сдвиг содержимого i на j разрядов вправо; освободившиеся старшие разряды заполняются нулями.

В этих операциях i и j - выражения любого целого типа.

Логические операции над логическими данными дают результат логического типа по правилам, указанным в Табл.4.

Таблица 4 – Правила проведения логических операций

Логические операции над данными логического типа
Операнд 1 Операнд 2 not and or xor
True - False - - -
False - True - - -
False False - False False False
False True - False True True
True False - False True True
True True - True True False

Операция отношения in применяется к двум операндам. Первым (левым) операндом должно быть выражение любого порядкового типа, вторым - множество, состоящее из элементов того же типа, или идентификатор множественного типа. Результат операции будет True, если левый операнд принадлежит множеству.

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

При вычислении значений выражений следует учитывать, что операторы имеют разный приоритет.

В Object Pascal определены следующие операции:

Ø унарные not, @ ;

Ø мультипликативные *, /, div, mod, and, shi, shr;

Ø аддитивные +, -, or, xor;

Ø отношения =, <>, <, >, <=, >=, in.

Приоритет операций убывает в указанном порядке, т. е. наивысшим приоритетом обладают унарные операции, низшим - операции отношения. Порядок выполнения нескольких операций равного приоритета устанавливается компилятором из условия оптимизации кода программы и не обязательно слева направо. При исчислении логических выражений операции равного приоритета всегда вычисляются слева направо, причем будут вычисляться все или только достаточные операции в зависимости от установленного в среде Delphi переключателя Project | Options | Compiler | Complete Boolean eval: при установленном переключателе вычисляются все операции отношения, при неустановленном - только те, что необходимы для однозначного определения результата исчисления.

Для задания нужного порядка выполнения операций в выражении можно использовать скобки, например:

(r1+r2+r3)/(r1*r2*r3)

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









Не нашли то, что искали? Воспользуйтесь поиском гугл на сайте:


©2015- 2018 zdamsam.ru Размещенные материалы защищены законодательством РФ.