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

Арифметическое выражение строится из объектов: арифметических (числовых) констант; идентификаторов переменных, описанных как числовые; функций, которые возвращают в результате их вычисления; арифметических значений этих объектов, соединённых между собой знаками арифметических операций и круглыми скобками. В качестве констант могут применяться арифметические константы, заданные в явном виде: 5; 5.35, -7.374 Е + 01 и т.п., а также имена констант, определённые в разделе const.

В качестве переменных используются переменные, определённые в разделе Var как byte, integer, real, и их разновидности, например, longinteger, и т.д., если им уже присвоены начальные значения.

В качестве функций могут применяться стандартные функции языка Паскаль, библиотечные функции и функции, написанные самим пользователем. Библиотечные функции доступны после подключения модулей библиотек. Функции пользователя должны быть описаны в разделе function.

Основные стандартные функции Паскаля:

Обозначения: I - целочисленный тип; B - байтовый тип; R - вещественный тип; IBR - целочисленный, или байтовый, или вещественный типы.

ABS (IBR) - определение абсолютной величины аргумента типа i,b,r.

ARCTAN (IBR) - вычисление угла (в радианах), тангенс которого равен IBR.

Cos (IBR) , Sin (IBR).

Exp (IBR) - вычисление значения eIBR.

Ln (IBR) - натуральный логарифм IBR.

Sgr (IBR) - возведение в квадрат IBR.

Sgrt (IBR) - вычисление корня квадратного из IBR.

Возведение в степень выполняется по формуле ar= exp (r *ln(a)) для положительных a либо организуется последовательное умножение на а r раз.Для отрицательных а возможен только второй способ.

Арифметические операции: +, -, - умножить; / - разделить; mod - нахождение остатка от деления: 11 mod 5, результат 1; div - целочисленное деление (дробная часть отбрасывается) 11 div 5, результат 2. Арифметические "и" - аnd и "или" - or производят поразрядное булевское умножение или сложение целых значений операндов согласно таблицам:

A аnd B A or B

0 аnd 0 = 0 0 or 0 = 0

1 аnd 0 = 0 1 or 0 = 1

0 аnd 1 = 0 0 or 1 = 1

1 аnd 1 = 1 1 or 1 = 1

Пример: a: = 12 ; b: = 27.

Во внутреннем коде машины, в двоично-десятичной системе, цифры представляются в десятичной системе:

0000 = ноль

0001 = один

0010 = два

0011 = три

0100 = четыре

0101 = пять

0110 = шесть

0111 = семь

1000 = восемь

1001 = девять

Тогда 12 в десятичной системе эквивалентно 0001 0010 двоично-десятичной системы. напомним, что в двоично-десятичной системе каждая десятичная цифра представлена 4-значным двоичным кодом этой цифры. В этом случае 27 - 0010 0111.

А аnd B А or B

0001 0010 0001 0010

0010 0111 0010 0111

результат: 0000 0010 результат: 0011 0111

Результат преобразуется в десятичную форму 2 и 37 соответственно.

ХOR, исключающее "или", производит операцию согласно таблице

A xor B

1 xor 1 = 0

1 xor 0 = 0

0 xor 1 = 1

0 xor 0 = 0

Результат преобразуется в десятичную форму.

Циклический сдвиг: k shl N - сдвиг числа к влево на N позиций,

k shr N - сдвиг числа к вправо на N позиций,

k и N - целые.

Пример: 2 shl 7 = 256

0000 0000 0000 0010

0000 0001 0000 0000

0 единиц

0 двоек

0 четверок

0 восьмерок

0 шестнадцать

0 тридцать два

0 шестьдесят четыре

0 сто двадцать восемь

1 двести пятьдесят шесть

Пояснение: в любой позиционной системе счисления на первом месте справа в числе стоит количество оснований системы счисения в степени 0, на втором месте справа - количество оснований в степени 1, на третьем месте справа - количество оснований в степени 2 и т.д. так, для десятичной системы имеем:

3 2 4

количество единиц 100 * 4 = 4

количество десятков 101 * 2 = 20

количество сотен 102 * 3 = 300

сложим = 324

Для двоичной системы:

1 0 1 1 0 0 1

количество единиц 20 * 1 = 1

количество двоек 21 * 0 = 0

количество четверок 22 * 0 = 0

количество восьмерок 23 * 1 = 8

количество шестнадцаток 24 * 1 = 16

количество тридцать вторых 25 * 1 = 0

количество шестьдесят четверок 26 * 1 = 64

сложим = 89

т.е. десятичное 89 имеет изображение 1011001 в двоичной системе.

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

1. Запрещено последовательное появление знаков двух операций, т.е.

A + - B - неверно, A + (-B) - верно.

2. Порядок выполнения операций: /,,div, mod, and, or, shl, shr, -, +. Порядок может быть нарушен круглыми скобками, так как часть выражения, заключённая в круглые скобки, выполняется в первую очередь.

3. Если операции имеют одинаковый приоритет, то они выполняются последовательно.

4. Унарная операция имеет самый низкий приоритет, поэтому -A b интерпретируется как -(A b).

5. Не следует записывать выражения, не имеющие арифметического смысла, например, деление на выражение, равное 0.

6. Следует помнить, что операции / и * имеют одинаковый приоритет, например, 18/2*3=27, а не 3. чтобы было 3, необходимо записать 18/(2*3).