Тверской государственный университет
Опубликован: 13.09.2006 | Доступ: свободный | Студентов: 3490 / 369 | Оценка: 4.65 / 4.29 | Длительность: 30:37:00
Специальности: Программист, Менеджер
Лекция 9:

Операции и встроенные функции

Аннотация: Операции. Работа с числовыми данными. Математические функции. Работа со строками. Сравнение строк. Сравнение с образцом. Основные операции над строками. Новые функции для работы со строками. Функция InStrRev - поиск последнего вхождения подстроки. Функция Replace - замена всех вхождений подстроки. Удаление подстроки. Разбор строки. Функции Split, Join и Filter. Преобразование строки в массив. Функция Split. Сборка элементов массива в строку. Функция Join Фильтрация элементов массива. Функция Filter Несколько модификаций встроенных функций. Замена, основанная на шаблоне. Функция WildReplace. Замена разных символов строки. Функция CharSetReplace Фильтрация, основанная на шаблоне. Функция WildFilter Разбор строки, допускающей разные разделители ее элементов. Функция WildSplit. Работа с датами и временем. Присваивание значений. Встроенные функции для работы с датами. Определение текущей даты или времени. Вычисления над датами Функция Timer и хронометраж вычислений. Некоторые встроенные функции. Функции проверки типов данных Преобразование типов данных. Форматирование данных. Функции группы Format. Другие функции форматирования.

Программный код большинства примеров данной лекции можно найти в проектах, доступных для просмотра: DocOne8, DocTwo8.

Операции

В любом языке программирования допустимы выражения. Нужно уметь выражаться корректно. Выражения строятся из переменных, констант, встроенных функций с использованием знаков операций и скобок. Запись выражения задает правило (алгоритм) вычисления его значения и его типа. Естественно, что тип и значения всех его переменных должны быть определены до момента вычисления выражения. Языки программирования различаются между собой тем, до какой степени они допускают автоматическое преобразование типов данных в процессе вычисления выражения. Считается, что язык является более надежным, предохраняющим от многих ошибок программиста, если он (язык) не допускает автоматического преобразования типов. Конечно, здесь необходим разумный компромисс. Так все языки допускают при вычислении выражения X+Y вещественный тип для переменной X и целочисленный тип для переменной Y, проводя автоматическое преобразование к вещественному типу и выполняя, затем уже, сложение вещественных чисел. Язык VBA в этом отношении занимает золотую середину. Он не столь строг, как классические языки, предложенные Никласом Виртом - Паскаль, Модула, Оберон, но и не допускает особых вольностей. Среди его встроенных функций есть большое число функций, предназначенных для явного преобразования типов, что позволяет программировать в лучших традициях надежных языков программирования, не доверяя неявным преобразованиям.

Тема построения выражений обширна, достаточно сказать, что число встроенных функций измеряется не десятками, а сотнями. Подробное их описание не входит в нашу задачу, для этого есть справочная система, но общий обзор и некоторые детали мы постараемся привести.

Приведем основные операции, которые можно выполнять над данными в языке VBA, классифицируя их по типу и приоритету:

Таблица 8.1. Операции и их приоритет
Приоритет Арифметические Сравнения Логические Описание некоторых операций
1 Возведение в степень - (^) Равенство - (=) Отрицание - (Not) При возведении в степень основание и показатель могут быть арифметическими выражениями любого типа. Результат имеет тип Double.
2 Унарный минус - (-) Неравенство - (<>) Конъюнкция - (And)
3 Умножение, Деление - (*, /) Меньше - (<) Дизъюнкция - (Or)
4 Деление нацело - (\) Больше - (>) Исключительное Или - (Xor) Деление нацело определено над целочисленными данными (применимо и к вещественным данным) и дает результат целого типа. Исключительное Или требует, чтобы один из операндов имел значение, отличное от True
5 Остаток от деления нацело - (mod) Меньше или равно - (<=) Эквивалентность - (Eqv) Операция mod определена над данными целого типа и возвращает результат целого типа - остаток от деления нацело.
6 Сложение, вычитание - (+,-) Больше или равно - (>=) Импликация - (Imp) Среди логических операций определена операция следования (импликация), ложная в единственном случае, когда посылка истинна, а заключение ложно.
7 Конкатенация строк - (&) Подобия - ( Like ), Равенство ссылок - ( Is ) Операция Like проверяет соответствие строки образцу. Операция Is, определенная над объектами, не проверяет равенство самих объектов, она проверяет совпадение ссылок. Ссылки должны задавать один и тот же объект.

Если выражение содержит операции разных категорий, то первыми выполняются арифметические операции, затем, операции сравнения и последними - логические.

Все операции сравнения имеют один и тот же приоритет. Арифметические и логические операции выполняются в соответствии с указанным приоритетом.

Одна и та же операция, записанная несколько раз подряд, или операции одного приоритета (умножение и деление, сложение и вычитание) выполняются слева направо, - из двух операций первой выполняется та, которая стоит левее в записи выражения.

Скобки позволяют изменить указанный порядок вычислений выражения, поскольку выражения в скобках имеют наивысший приоритет и вычисляются первыми. Внутри скобок действует обычный порядок вычисления.

Операция конкатенации не является арифметической, но при ее появлении в выражении она выполняется после всех арифметических операций, но до вычисления операций сравнения.

Работа с числовыми данными

Арифметика в 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)
полина есенкова
полина есенкова
Дмитрий Вологжин
Дмитрий Вологжин
Добрый день, прошел тесты с 1 по 9, 10 не сдал, стал читать лекцию и всё пройденные тесты с 1 по 9 сбросились, когда захотел пересдать 10 тест.