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). |