§5. Арифметические выражения

Арифметические выражения состоят из операций и операндов. В языке программирования Pascal существует шесть операций: сложение (обозначается знаком «+»), вычитание (обозначается знаком «-»), умножение (обозначается знаком «*»), деление (обозначается знаком «/»), деление нацело (обозначается словом «div») и взятие остатка от деления нацело (обозначается словом «mod»). Слова div и mod являются служебными зарезервированными.

Важным понятием в арифметике является понятие операнда. Операндами называются те объекты, над которыми выполняется арифметическая операция. В математике различные операции могут иметь разное количество операндов, но все арифметические имеют два операнда. Операндом для операции может являться как одиночное число или имя переменной, так и целое арифметическое выражение. Рассмотрим выражение (2+2)*2. У операции сложения операндами являются два числа `2`, а у операции умножения правый операнд – это число `2`, а левый – это выражение в скобках `(2+2)`. Прежде чем выполнять операцию, необходимо вычислить оба её операнда. 
Приоритет операций в Паскале точно такой же, как и в математике. Сначала выполняются операции умножения, деления, div и mod (это тоже операции деления), а потом операции сложения и вычитания. Операции одного приоритета выполняются слева направо. Для изменения порядка действий можно использовать круглые скобки. Операции в скобках имеют более высокий приоритет, чем операции вне скобок. Так при вычислении выражения 2+2*2 получается число `6`, потому что операция умножения имеет более высокий приоритет, чем сложение, и, следовательно, выполняется первой. Если же записать выражение (2+2)*2, то при вычислении получается число `8`, потому что сложение в скобках выполняется раньше умножения.
Рассмотрим, как определить тип результата при вычислении арифметического выражения. Операции сложения, вычитания и умножения выдают целый результат, если оба их операнда целые, и вещественный, если хотя бы один из операндов – вещественный. Операция деления «/» всегда выдаёт вещественный результат. Даже если мы `4` делили на `2`, всё равно в итоге получается нецелое число. На первый взгляд это кажется странным, но в отличие от математики в программировании каждое число кроме значения ещё имеет тип, и если типы у чисел не совпадают, то они НЕ считаются равными. Нужно уяснить, что `bb(1!=1.0)`. Это несложно понять, если помнить, что раз числа `1` и `1.0` имеют различные типы, то будут представлены совершенно разными последовательностями битов. Операции div и mod всегда выдают целый результат и, в отличие от всех остальных арифметических операций, могут иметь только целые операнды. Попытка применить данные операции к вещественным числам приведёт к тому, что программа просто не будет работать.

Давайте подробнее познакомимся с двумя последними операциями. Операция a div b выдаёт целую часть от деления числа a на число b. То есть 5 div 2 = 2, а 3 div 7 = 0. Операция a mod b выдаёт остаток от деления a на b по следующему закону:

a mod b = a – ((a div b) * b)

Приведём примеры выполнения этих их операций для всех возможных знаков операндов:

Примеры

 5 div 3 = 1;   5 mod 3 = 2;
-5 div 3 = -1; -5 mod 3 = -2;
 5 div -3 = -1; 5 mod -3 = 2;
-5 div -3 = 1; -5 mod -3 = -2;
    

Операндами в арифметическом выражении также могут быть стандартные математические функции, которые приведены в таблице ниже.

Функция Комментарий Тип аргумента Тип результата
abs(x)  $$ │x│$$ — модуль $$ x$$ integer, real совпадает с типом аргумента
sqr(x) $$ {x}^{2}$$ integer, real совпадает с типом aргумента
sqrt(x) `sqrt x`$$ $$ — корень  квадратный из $$ x$$ integer, real real
Pi `3.1415926535897932385` нет real
sin(x) $$ \mathrm{sin}x$$ integer, real real
cos(x) $$ \mathrm{cos}x$$ integer, real real
arctan(x) `"arctg"x` integer, real real
trunc(x) отсекание дробной части $$ x$$ real integer
round(x) округление $$ x$$ до ближайшего целого. Половины округляются в сторону увеличения модуля.  real integer

Необходимо отметить, что функциям `sin` и `cos` угол следует подавать в радианах, а не в градусах! Также функция `arctan` возвращает результат в радианах.