Визуал бейсик функции. Функции в vba. Требование явного объявления переменных

Арифметические выражения Visual Basic.

Теоретическая часть

Выражениями и функциями

ЛАБОРАТОРНАЯ РАБОТА №4. Работа с арифметическими

Вопросы для контроля

1. Какие компоненты позволяют создавать статические изображения в приложении?

2. Как поместить рисунок на форму? Какие методы для этой цели существуют и в чем их отличие?

3. Картинки какого формата может подключать к приложению компонент Image?

4. Какое свойство объекта Image отвечает за масштабирование? За видимость картинки?

Цель работы: ознакомиться с арифметическими выражениями и математическими функциями языка Visual Basic; научиться разрабатывать приложения с использованием выражений и математических функций

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

Арифметические выражения – это последовательность чисел, констант, переменных, функций, которые соединены между собой знаками арифметических операций. Частным случаем выражения является просто константа, переменная или вызов функции.

Арифметические операции языка Visual Basic приведены в Таблице 4.1.

Таблица 4.1 – Арифметические операции языка Visual Basic

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

Примеры:

14 /5*2 = 5.6 – операции одного приоритета выполнятся слева направо

14\5*2 = 1 – умножение имеет более высокий приоритет и при целочисленном делении дробная часть отбрасывается

27^1/3 = 9 – возведение в степень обладает наивысшим приоритетом

27^(1/3) = 3 – скобки изменяют последовательность операций

В языке Visual Basic имеется широкий набор встроенных (стандартных ) функций, облегчающий написание программ. Различают математические функции, функции обработки строк, функции для работы с датами и временем, финансовые.

Математические функции:

Abs (x) – вычисляет модуль аргумента



Atn (x) – вычисляет арктангенс числа x

Sin (x) – вычисляет синус числа x

Cos (x) – вычисляет косинус числа x

Tan (x) – вычисляет тангенс числа x

Exp (x) – вычисляет e^x

Log (x) – вычисляет натуральный логарифм

Sqr (x) – вычисляет квадратный корень

Rnd () – возвращает случайное число в диапазоне от 0 до 1

Int (x) – вычисляет наибольшее целое число, не превышающее x

Fix (x) – вычисляет округленное число (отбрасывает дробную часть аргумента)

CInt(x) – возвращает аргумент, округленный до целого по правилам округления математики

Sgn (x) – возвращает знак числа

X^(1/n) – извлекает корень n-ной степени из X

Hex (x) – переводит десятичное число в шестнадцатеричное

Oct (x) – переводит десятеричное число в восьмеричное

Примеры округления чисел:

Int(7.32) = 7 CInt(5.5) = 6 Fix(-7.32) = -7

Int(-7.32) = -8 CInt(-7.5) = -7

Значения аргументов в тригонометрических функциях задаются в радианах!

Для перевода аргумента из градусов в радианы используется формула:

Аргумент (в радианах) = аргумент (в градусах)*ПИ / 180

Число ПИ может быть определено по формуле:

ПИ = Atn(1)*4

Полные сведения о встроенных функциях и правилах их применения можно найти в справочной системе Visual Basic.

В Visual Basic, как и во многих других языках программирования, весь программный код находится внутри процедур. Что же такое процедура?

Процедура

Собственно, процедура - это подпрограмма. Она начинается оператором Sub и заканчивается оператором End , между которыми и помещается код. Такие процедуры могут вызываться или самим Visual Basic (процедуры обработки событий), или другими процедурами. При этом обработчики событий реализуются как процедуры. Имя процедуры обработки события состоит из имени объекта и имени события:

Private Sub Command1_Click() End Sub

Можно создавать и собственные процедуры, так называемые общие процедуры. Для этого нужно перейти к секции (General) (Declaration). В окне кода введите Sub, затем имя, например Spends, и нажмите клавишу . После этого появляется новая процедура:

Sub Spends() End Sub

Эта процедура относится к секции (General) (Declaration). Заголовок процедуры заканчивается пустыми скобками, однако там могут помещаться аргументы.

Аргументы

Использование аргументов в процедурах событий можно увидеть на примере события MouseMove . Для некоторых событий после имени в скобках указываются аргументы, при помощи которых процедуре передаются необходимые ей значения. Для процедур обработки событий эти аргументы обычно устанавливает Visual Basic.

Если выбрать из (Procedure) событие MouseMove, то процедура будет выглядеть так:

Private Sub Command1 MouseMove(_ Button As Integer, _ Shift As Integer, _ X As Single, _ Y As Single) End Sub

Для события MouseMove Visual Basic передает четыре аргумента - состояние кнопок мыши Button , клавиши Shift и координаты X и Y курсора . Если вы сами пишете процедуру, то сами задаете аргументы. Допустим, вы хотите написать процедуру, которая выводит текст.

Sub HelloOut() Print "Здравствуй, читатель." End Sub

Вызов процедуры

Создание подобной процедуры имеет то преимущество, что при необходимости вывести строку "Здравствуй, читатель" достаточно всего лишь вызвать ее, а не вводить всю строку кода. Теперь процедура вызывается как обычный оператор Visual Basic:

Private Sub Command1_Click() HelloOut End Sub

В этом примере из процедуры Command1_Click вызывается процедура HelloOut . Если исходить из того, что до и после вызова стоят и другие операторы, то при вызове HelloOut программа переходит в эту процедуру, выполняет ее операторы и опять возвращается в точку прерывания, в процедуру Command1_Click.

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

Если добавить аргументы, данный пример можно расширить так, чтобы процедура HelloOut выводила не один и тот же текст, а любой другой, задаваемый при вызове процедуры.
Определение процедуры может расшириться следующим образом:

Sub HelloOut(Message As String) Print "Здравствуй, " & Message End Sub

Нужно изменить также и вызов процедуры:

Private Sub Command1_Click() HelloOut "Андрей" End Sub

В этом примере вызывается та же процедура HelloOut. При этом ей дополнительно передается один аргумент.

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

Процедуры обработки событий после вызова постоянно находятся в ожидании событий.

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

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

Функция - это подпрограмма, которую вызывают, чтобы выполнить какие-то расчеты или проверки. Когда она завершает работу, то возвращает управление вызывающей программе и передает ей результат расчета.

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

Синтаксис объявления процедуры и функции:

Sub <Имя процедуры>(<Параметры>) <Операторы> End Sub Function <Имя функции> <Операторы> End Function

Процедуры, объявленные с ключевым словом Public, можно вызвать в любом модуле приложения (каждая форма - это отдельный модуль).

Процедуры объявленные как Private, можно вызывать только в текущем модуле.

Слово Static означает, что все переменные, объявленные в процедуре, будут статическими, т.е. их значения сохраняются между вызовами.

Параметры обеспечивают связь процедуры с приложением. Это данные, передаваемые в процедуру при вызове.

Процедуры обработки событий. Вызываются в том, случае если произошло какое-либо событие. При этом существенным является как имя элемента, та и вид события, который с ним произошел.

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

Встроенные функции. Определенные наборы команд, имеющиеся в языке Visual Basic и в предназначенные для вычисления тех или иных значений на основании исходных данных. Встроенными являются, в частности, как математические, так и строковые функции (Abs, Cos, Sin, Mid, Len и т.д.)

Пользовательские функции. Группы операторов, аналогичные пользовательским процедурам.

Однако между ними есть ряд отличий.

Основные отличия функции от процедуры состоят в следующем.

1. Функция имеет тип (аналогично переменной) и может возвращать в программу значение, которое присваивается функции при помощи оператора:

<Имя функции> = значение

2. Вызов функции, как правило, осуществляется посредством указания в правой части какого-либо оператора ее имени и параметров. С другой стороны, процедура вызывается при помощи отдельного оператора:

Call <Имя процедуры> (Параметры)

<Имя процедуры> (Параметры)

Если при вызове процедуры используется ключевое слово Call, то список параметров должен быть указан в скобках. Если же процедура вызывается без использования Call, то ее параметры перечисляются без скобок.

Необходимо отметить, что вызываемая процедура может не иметь параметров. В этом случае (если использовалось служебное слово Call) после имени процедуры следует ставить пустые скобки.

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

Команда Add Procedure меню Tools позволяет добавить процедуру или функцию.

Пусть процедура Cir вычерчивает эллипс с координатами x, y, которые передаются в процедуру как параметры. Создавая процедуру Cir командой Add Procedure, нужно указать имя процедуры и выбрать область видимости Public или Private.

Завершив диалог, получим объявление процедуры:

Private Sub Cir() : End Sub

Теперь нужно вписать параметры в скобки и написать текст процедуры. В списке параметров рекомендуется указывать тип переменных.

Private Sub Cir(x As Integer, y As Integer) Circle (x,y),500,2 End Sub

Занятие 4. Вычисления на VB

Private Sub Command1_Click()

PRINT I;

Private Sub Command1_Click()

PRINT I,

Private Sub Command1_Click()

Private Sub Command1_Click()

Private Sub Command1_Click()

Private Sub Command1_Click()

R$ = “Вася”

На экране появляется слово: Вася

4. Оператор PRINT выводит на экран числа, слова, результаты математических действий. (Не выводит знак “). Если в операторе PRINT есть математическое выражение, то компьютер вычисляет его и результат печатает на экране.

PRINT 10 – 3 + 4

Ответ: 11

5. Выясним, как ведет себя оператор без знаков препинания, и с ними. Знаками препинания в операторе считаются только два - запятая и точка с запятой.

Чтобы выяснить действие знаков препинания в операторе PRINT рассмотрим работу программы:

а) Никаких знаков препинания нет

For I = 1 to 50

На экране мы видим столбик чисел:

Если в операторе PRINT нет знаков препинания, то информация выводится каждый раз с новой строки, в столбик.

б) Поставим после переменной I запятую, и вновь выполним программу.

For I = 1 to 50

На экране: 1 2 3 4 5 ….

Информация выводится в строке через 10 пробелов.

в) Поставим после переменной I точку с запятой, и вновь выполним программу.

For I = 1 to 50

На экране: 1 2 3 4 5 ….

Информация выводится через 1 пробел.

Ø Теперь мы можем прибавить два к двум и получить ответ:

? “2 + 2 = ”; 2 + 2

На экране: 2 + 2 = 4

6. PRINT ставится в том месте программы, где требуется что-нибудь вывести на экран.

7. Вместо оператора PRINT можно печатать? (знак вопроса).

Для вычисления математических функций используются стандартные функции:

Функция Математика Visual Basic
Абсолютная величина числа x | x | abs(x)
Квадратный корень из числа x sqr(x)
Возведение в степень 4^3
Корень третьей степени из числа x x^(1/3)
Корень нечетной степени из отрицательного числа -x^(1/5)
Экспонента числа x exp(x)
Натуральный логарифм числа x ln x log(x)
Десятичный логарифм числа x lg x log(x) / log(10)
Остаток от деления х на у x mod y
Округление числа x с точностью а round (x, a)
Целая часть числа x int(x)
Команда, включающая генератор случайного числа Randomize
Функция вырабатывающая случайное число в диапазоне от 0 до 1 rnd
Функция, переводящая текст, состоящий из цифр в число val()
Функция преобразующая число в текст str$()
Синус числа x (в радианах) sin x sin (x)
Косинус числа x (в радианах) cos x cos (x)
Тангенс числа x (в радианах) tg x tan (x)
Котангенс числа x (в радианах) ctg x 1/tan(x)
Арктангенс числа x (в радианах) arctg x atn (x)
Арксинус числа x (в радианах) arcsin x atn(x/sqr (-x*x+1))
Арккосинус числа x (в радианах) arccos x -atn(x/sqr(-x*x+1))+1.5708
Арккотангенс числа x (в радианах) arcctg x -atn(x)+1.5708

Перевод из градусов в радианы

Процедуры и функции

Выражения и операторы - это сырьё для блоков, из которых строится программы, где в роли блоков выступают процедуры и функции.

Процедуры и функции

В Visual Basic, как и во многих других языках программирования, большинство программ создается из блоков - процедур и функций. Весь программный код находится как бы внутри этих процедур. Если возникает необходимость в решении какой-либо задачи в любом месте программы, то вызывается процедура. В Visual Basic нельзя ввести код между процедурами. Код всегда должен находиться внутри процедуры.

Давайте разберёмся с понятиями, и определим, что будет называться процедурой, а что функцией.

Процедуры:

Процедура - это некий блок кода, который будет выполняться всякий раз при вызове этой процедуры. Каждая процедура начинается зарезервированным словом Sub и заканчивается End. Вот общий синтаксис процедуры:

[Private | Public | Friend ] Sub name [(arglist)]

    

End Sub

Всё, что заключено в квадратные скобки - является необязательным. Оператор Exit Sub позволяет досрочно выйти из процедуры. Иногда это очень удобно. Слова Public, Private имеют то же значение, что и при объявлении переменных.

arglist имеет следующий вид:

[Optional ] varname[()]
[= defaultvalue]

Рассмотрим пример процедуры, которая будет выводить на экран сообщение "Hello World!":

Private Sub ShowMessage()
    MsgBox "Hello World!"
End Sub

Что можно сказать об этой процедуре? Процедура имеет тип Private, т.е. доступна будет только из кода именно той формы (модуля), где она объявлена (вспомните типы объявления переменных). Данная процедура не содержит параметров, о чём нам говорят пустые круглые скобки.. Назначение - вывести сообщение Hello World на экран.

MsgBox - это встроенная функция Visual Basic, которая выводит на экран окно с сообщением, заданным в качестве параметра. Остальные параметры необязательны (их всего 5). Подробнее о функции MsgBox можно прочитать .

Как вызвать процедуру? Для этого достаточно написать имя процедуры:

ShowMessage

А можно и так:

Call ShowMessage" более наглядные вариант

Оба этих варианта абсолютно эквивалентны. Но для вызова процедур всё-таки лучше использовать второй вариант.

Теперь давайте изменим эту процедуру и добавим к ней параметр, значение которого будет выводиться функцией MsgBox (вместо Hello World):

Private Sub ShowMessage(message As String )
    MsgBox message
End Sub

Теперь при вызове процедуры необходимо указать параметр:

Call ShowMessage ("Наша первая процедура")

Результатом выполнения такой процедуры будет вывод на экран сообщения: "Наша первая процедура". Скобки, окружаемые параметр обязательны, если перед именем процедуры стоит оператор Call. Если Call отсутствует, то скобки ставить не нужно.

Давайте рассмотрим подробнее что же происходит при вызове нашей процедуры. Встретив строку с вызовом нашей процедуры Visual Basic проверяет, нужны ли данной процедуре параметры. Убедившись в том, что нужны (параметр message) он передает в процедуру строку "Наша первая процедура". Т.е. фактически в процедуре происходит присвоение переменной message значения "Наша первая процедура". Ну а далее происходит вызов функции MsgBox и вывод сообщения на экран. Если количество параметров, передаваемых при вызове процедуры не совпадёт с количеством параметров в объявлении процедуры - Visual Basic сгенерирует ошибку.

Итак, с процедурами разобрались. Настало время разобраться с функциями.

Функции:

Функция - это некий блок кода, который будет возвращать значение. Этим, и только этим функции отличаются от процедур. Общий синтаксис функции:

[Public | Private | Friend ] Function имяфункции _
[(arglist)]
    [здесь некий код]

    
    [здесь тоже может быть некий код]
    [имяфункции = выражение]
End Function

Что значит "будет возвращать значение"? Рассмотрим функцию из урока 8:

Public Function MyFunc() As Byte
    MyFunc = 234
End Function

c = MyFunc()

Когда мы говорили о выражениях, мы говорили, что MyFunc - это выражение, со значением 234. Т.е. здесь, функция MyFunc возвращает значение 234 (байт). Чтобы задать это значение, необходимо присвоить имени функции выражение. В нашем случае в качестве выражения выступает число 234.

Давайте рассмотрим более практичный пример. Напишем функцию для вычисления квадрата числа. У функции будет 1 параметр типа Integer - число для возведения в квадрат. Функция будет возвращать значение квадрата параметра. Тип возвращаемого значения - Long:

Public Function Square(number As Long ) As Long
    Square = number * number
End Function

Вызвать функцию можно так:

b = Square (5)

А можно так, используя нашу процедуру для вывода сообщения на экран:

ShowMessage Square (5)

А можно и так:

Square 5

В последнем случае возвращённое функций значение уходит в никуда, но сама функция благополучно выполнится. Обратите внимание на отсутствие скобок в последнем вызове. Скобки здесь не обязательны, в отличие от двух предыдущих вызовов. Там скобки обязательны. (ну это и понятно, как бы Visual Basic без скобок догадался, где параметры для ShowMessage, а где для Square).

На следующем уроке мы познакомимся с элементами управления и напишем небольшую программу.