Арифметические выражения и операции
В языках программирования используется линейная запись арифметических выражений (без многоэтажных дробей). В школьном алгоритмическом языке выражение записывается в одну строку, а в Паскале запись можно переносить на следующие строки.
Арифметические выражения могут содержать константы (постоянные значения), имена переменных, знаки арифметических операций, круглые скобки (для изменения порядка действий) и вызовы функций. Например:
При определении порядка действий используется приоритет (старшинство) операций. Они выполняются в следующем порядке:
• действия в скобках;
• умножение и деление, слева направо;
• сложение и вычитание, слева направо.
Таким образом, умножение и деление имеют одинаковый приоритет, более высокий, чем сложение и умножение. Поэтому в приведённом примере значение выражения, заключённого в скобки, сначала разделится на 2, а потом умножится на d.
Если в выражение входят переменные разных типов, в некоторых случаях происходит автоматическое приведение типа к более «широкому». Например, результат умножения целого числа на вещественное — это вещественное число. Переход к более «узкому» типу автоматически не выполняется, поэтому, например, вещественное значение нельзя записать в целую переменную. Нужно помнить, что результат деления (операции «/») — это вещественное число, даже если делимое и делитель — целые и делятся друг на друга нацело 1.
1 В некоторых языках, например в Си, это не так: при делении целых чисел получается целое число и остаток отбрасывается.
Часто нужно получить целый результат деления целых чисел и остаток от деления. В этом случае в школьном алгоритмическом языке используют функции div и mod, а в Паскале — одноимённые операции (они имеют такой же приоритет, как умножение и деление):
Нужно учитывать, что для отрицательных чисел эти операции по-разному выполняются в разных языках. Например, внешне следующие программы аналогичны:
Но программа на школьном алгоритмическом языке выведет результат «-4,1», а программа на Паскале — «-3,-1». Дело в том, что с точки зрения теории чисел остаток — это неотрицательное число, поэтому -7 = (-4) • 2+1, т. е. частное от деления (-7) на 2 равно -4, а остаток равен 1. Поэтому в среде КуМир эти операции выполняются математически правильно. В то же время во многих языках (например, в Паскале и в Си) при целочисленном делении используется модуль числа, а затем к частному и остатку добавляется знак «минус»:
При таком подходе частное от деления (-7) на 2 равно -3, а результат операции mod равен -1.
В школьном алгоритмическом языке есть операция возведения в степень, которая обозначается двумя звездочками: «**». Например, выражение у := 2х2 + z3 запишется так:
у:= 2*x**2+z**3
Возведение в степень имеет более высокий приоритет, чем умножение и деление. В языке Паскаль операции возведения в степень нет.
Следующая страница Вещественные значения