Лабораторная работа №1
Математические функции
В VBA имеется большой набор встроенных математических функций, использование которых существенно упрощает программирование.
Функция | Возвращаемое значение |
Abs (<число>) | Модуль (абсолютная величина) числа |
Atn (<число>) | Арктангенс |
Cos (<число>) | Косинус |
Exp (<число>) | Экспонента, т. е. результат возведения основания натурального логарифма в указанную степень |
Log(<число>) | Натуральный логарифм |
Rnd (<число>) | Случайное число из интервала [0,1). Если число меньше нуля, то Rnd возвращает каждый раз одно и то же число, используя аргумент в качестве опорного числа. Если число больше нуля или аргумент опущен, то — следующее случайное число в последовательности; если число равняется нулю то — случайное число, возвращенное при предыдущем вызове этой функции. Перед вызовом функции Rnd используйте инструкцию Randomize без аргумента |
Sgn (<число>) | Знак числа |
Sin (<число>) | Синус |
Sqr (<число>) | Квадратный корень из числа |
Tan (<число>) | Тангенс |
Fix (<число>) Int (<число>) | Обе функции, Int и Fix, отбрасывают дробную часть числа и возвращают целое значение. Различие между функциями int и Fix состоит в том, что для отрицательного значения аргумента функция Int возвращает ближайшее отрицательное целое число, меньшее либо рaвное указанному, a Fix — ближайшее отрицательное целое число, большее либо равное указанному |
Перенос строки
Расположение символов <Пробел> + <Знак подчеркивания> в конце обеспечивает то, что последующая строка является продолжением предыдущей. При этом надо помнить, что:
- нельзя разбивать переносом строковые константы;
- допустимо не более семи продолжений одной и той же строки;
- сама строка не может состоять более, чем из 1024 символов.
В следующем примере первая из конструкций является разбиением второй на две строки:
|
у = Sin(Pi()*x) + (1 + x)^(l/2)/ _
(1 + х^2)
у = Sin(Pi()*x) + (1 + x)^(l/2)/(1 + х^2)
Комментарии
Работая с программой, удобно использовать комментарии, т. е. фрагменты текста программы, не являющиеся программными кодами и игнорируемые компилятором. Комментарии выполняют две важные функции:
- делают программу легко читаемой, поясняя смысл программных кодов и алгоритма;
- временно отключают фрагменты программы при ее отладке.
В языке VBA существуют два способа ввода комментариев:
- Применение апострофа (‘). Его можно ставить в любом месте строки. При этом все символы, начиная от апострофа до конца строки, будут восприниматься компилятором как комментарий.
- Применение зарезервированного слова Rem вместо апострофа.
Ниже приведен пример использования комментариев в тексте программы:
Dim a As Integer
‘
‘а — целая переменная
‘
Dim b As String
‘b – строковая переменная
Расположение нескольких операторов на одной строке
Использование знака двоеточия позволяет разместить несколько операторов на одной строке. Таким образом, следующие две конструкции эквивалентны:
x = x+1 y = x+2 | x = x+1: y = x+2 |
Функции преобразования форматов
При обработке выражений, введенных с помощью функции InputBox, и последующем выводе результата на экран, иногда приходится прибегать к функциям преобразования форматов (типов).
Преобразование строки в число и обратно осуществляются следующими функциями.
|
Val(<строка>) | Возвращает число, содержащееся в строке, как значение числового типа |
Str(<число>) | Возвращает значение типа Variant (String), являющееся строковым представлением числа |
Замечание. В качестве допустимого десятичного разделителя функция Str воспринимает точку.
Часто возникает потребность в выводе нескольких результатов в одном окне сообщений. Помимо операции конкатенации (сложения строк &) используют функцию Chr.
Chr(<число>) | Возвращает строку, ASCII-код которой равен аргументу. Например, Chr (13) – возвращает символ “возврат каретки”, т.е. осуществляет переход на новую строку. |
1. Рассмотрим очень полезный алгоритм, с которым при программировании часто приходится встречаться. Даны две переменные X и Y. Требуется произвести между ними обмен значениями. Например, если первоначально было X=1, Y=2, то после обмена должно стать: X=2, Y=1.
Попытка обойтись без дополнительной переменной, написав
X = Y
Y = X
не приводит к цели (безвозвратно утрачивается начальное значение переменной X).
Хорошим аналогом для решения такой задачи является следующая: даны два стакана, в первом – молоко, во втором – вода; требуется произвести обмен их содержимым. Ясно, что в этом случае нужен дополнительный третий пустой стакан. Последовательность действий будет следующей:
- перелить из первого в третий;
- перелить из второго в первый;
- перелить из третьего во второй.
По аналогии для обмена значениями двух переменных нужна дополнительная третья переменная. Назовем ее Z. Тогда задача решается последовательным выполнением трех операторов присваивания.
|
Z = X
X = Y
Y = Z
Построим трассировочную таблицу при следующих начальных значениях переменных: X=1, Y=2.
Команда | X | Y | Z |
Z = X | |||
X = Y | |||
Y = Z |
Действительно, в итоге значения переменных X и Y поменялись местами.
Аналогия со стаканами не совсем верна в том смысле, что при переливании из одного стакана в другой первый становится пустым. В результате же присваивания (X =Y) переменная, стоящая справа (Y) сохраняет свое значение.
Подпрограмма на VBA для решения этой задачи приведена на листинге.
2. Составим подпрограмму, в результате выполнения которой будет выведено значение TRUE, если точка с заданными координатами (x,y) лежит внутри заштрихованной области и FALSE в противном случае.
Рассматриваемая область состоит из двух частей, каждая из которых описывается системой неравенств.
1-я часть: х £ 0; х2 + у2 £ 9; у ³ -х - 3.
2-я часть: х ³ 0; х2 + у2 £ 25.
Точка с координатами (х, у) лежит в заштрихованной области, если она принадлежит 1-й или 2-й части. Подпрограмма 2 на листинге осуществляет ввод координат точки, вычисление значения логического выражения, которое определяет принадлежность точки области и выводит полученную логическую величину на экран.