Операции и встроенные функции
Программный код большинства примеров данной лекции можно найти в проектах, доступных для просмотра: DocOne8, DocTwo8.
Операции
В любом языке программирования допустимы выражения. Нужно уметь выражаться корректно. Выражения строятся из переменных, констант, встроенных функций с использованием знаков операций и скобок. Запись выражения задает правило (алгоритм) вычисления его значения и его типа. Естественно, что тип и значения всех его переменных должны быть определены до момента вычисления выражения. Языки программирования различаются между собой тем, до какой степени они допускают автоматическое преобразование типов данных в процессе вычисления выражения. Считается, что язык является более надежным, предохраняющим от многих ошибок программиста, если он (язык) не допускает автоматического преобразования типов. Конечно, здесь необходим разумный компромисс. Так все языки допускают при вычислении выражения X+Y вещественный тип для переменной X и целочисленный тип для переменной Y, проводя автоматическое преобразование к вещественному типу и выполняя, затем уже, сложение вещественных чисел. Язык VBA в этом отношении занимает золотую середину. Он не столь строг, как классические языки, предложенные Никласом Виртом - Паскаль, Модула, Оберон, но и не допускает особых вольностей. Среди его встроенных функций есть большое число функций, предназначенных для явного преобразования типов, что позволяет программировать в лучших традициях надежных языков программирования, не доверяя неявным преобразованиям.
Тема построения выражений обширна, достаточно сказать, что число встроенных функций измеряется не десятками, а сотнями. Подробное их описание не входит в нашу задачу, для этого есть справочная система, но общий обзор и некоторые детали мы постараемся привести.
Приведем основные операции, которые можно выполнять над данными в языке VBA, классифицируя их по типу и приоритету:
Если выражение содержит операции разных категорий, то первыми выполняются арифметические операции, затем, операции сравнения и последними - логические.
Все операции сравнения имеют один и тот же приоритет. Арифметические и логические операции выполняются в соответствии с указанным приоритетом.
Одна и та же операция, записанная несколько раз подряд, или операции одного приоритета (умножение и деление, сложение и вычитание) выполняются слева направо, - из двух операций первой выполняется та, которая стоит левее в записи выражения.
Скобки позволяют изменить указанный порядок вычислений выражения, поскольку выражения в скобках имеют наивысший приоритет и вычисляются первыми. Внутри скобок действует обычный порядок вычисления.
Операция конкатенации не является арифметической, но при ее появлении в выражении она выполняется после всех арифметических операций, но до вычисления операций сравнения.
Работа с числовыми данными
Арифметика в VBA представлена достаточно полно, Напомним, что арифметический тип подразделяется на подтипы:
- Byte, Integer, Long - для представления целочисленных данных.
- Single, Double - для представления вещественных данных.
- Decimal - для представления чисел в форме с фиксированной точкой, что важно, в частности, для финансовых вычислений.
- Currency - специальный тип для представления денежных данных.
- Variant - обобщенный тип, позволяющий хранить и обрабатывать данные разного типа.
Возможные арифметические операции мы уже упомянули.
Пример работы с числовыми данными:
Public Sub WorkWithArithmetic() Dim X As Integer, Y As Integer Dim U As Single, V As Single Dim Z As Double U = 15.8: V = -6.5 Z = U / V: X = CInt(U / V): Y = U \ V Debug.Print X, Y, Z, U, V, X \ Y, X Mod Y, U Mod V End Sub
Вот результаты печати в окне отладки:
-2 -2 -2,43076926011306 15,8 -6,5 1 0 4
Заметим, что хотя целочисленные операции возможны над вещественными данными, применять их не следует, поскольку это один из тех случаев, когда выполняются внутренние преобразования, точная интерпретация которых сложна, что и может, в конечном итоге, служить источником программистских ошибок.
Рассмотрим основные встроенные математические функции.
Математические функции
Набор математических функций VBA достаточно стандартный. Перечислим их с краткими пояснениями:
- Abs(число) - абсолютное значение числа.
- Atn(число) - арктангенс (в радианах) аргумента, задающего тангенс угла.
- Cos(число) - косинус угла. Аргумент число задает угол в радианах.
- Exp(число) - экспонента, т. е. результат возведение числа e (основание натуральных логарифмов) в указанную степень.
- Log(число) - натуральный логарифм числа.
-
Rnd[(число)] - результат представляет равномерно распределенное случайное число в интервале [0 - 1]. Если аргумент число не задан или больше нуля, то порождается очередное случайное число, если он равен 0, то результатом будет предыдущее случайное число, а если число меньше нуля, то всякий порождается одно и то же число, определяемое аргументом. Перед тем, как получить последовательность случайных чисел необходимо вызвать функцию Randomize для инициализации последовательности. Заметим, для формирования значения случайных чисел используется таймер. Чтобы получить целочисленную последовательность равномерно распределенных случайных чисел в интервале [Min - Max], следует использовать следующее преобразование
Int((Max - Min +1)*Rnd)+ Min
В примерах предыдущей лекции мы неоднократно использовали эту функцию для инициализации массивов с числовыми данными.
- Sgn(число) - знак числа (Если число больше нуля - 1, равно нулю - 0, меньше нуля - -1 ).
- Sin(число) - синус угла. Аргумент число задает угол в радианах.
- Sqr(число) - квадратный корень.
- Tan(число) - тангенс угла. Аргумент число задает угол в радианах.
Во всех этих описаниях под аргументом функции число понимается числовое выражение.
В справочной системе или в любом математическом справочнике Вы сможете найти указания, как на основе этого базиса, можно вычислить большое число других математических функций. Например, вычисление гиперболического синуса производится по формуле:
HSin(X) = (Exp(X) - Exp(-X))/2
а вычисление арккотангенса:
Arccotan(X) = Atn(X) + 2*Atn(1)