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

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

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

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

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

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

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

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

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

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

Таблица 1.1 . Стандартные алгебраические функции.

Функция Описание Пример Результат
ABS Возвращает абсолютную величину (модуль) аргумента ? ABS(-2.56) 2.56
SQR Возвращает квадратный корень из аргумента ? SQR (9) 3
SIN Возвращает значение синуса аргумента (аргумент указывается в радианах) ? SIN(3) 0.14112
COS Возвращает значение косинуса аргумента (аргумент указывается в радианах) ? COS(3) 0.98992599
TAN Возвращает значение тангенса аргумента (аргумент указывается в радианах) ? TAN(3) -0.1425465
EXP Находит значение показательной функции е х; , где х - аргумент, а е - основание "." натурального логарифма, равное 2.718… ? EXP(l) 2.718282
LOG Возвращает логарифм по основанию е ? LOGO) 1.09861229
INT Возвращает целую часть аргумента (от англ. INTeger - целый) ? INT(30,l) 30
SGN Возвращает 1, если аргумент больше нуля;
0, если аргумент равен нулю;
-1,если аргумент меньше нуля (от англ. SiGN - знак)
? SGN (3)
? SGN(O)
? SGN(-3)
1
0
-1

Предупреждение
Функция sqr применима только к положительным аргументам
.

Любознательный читатель сразу заметит, а где же милый его сердцу котангенс. Нет! Но ведь его просто получить из тангенса, не правда ли? Самые распространенные ошибки начинающих при написании стандартных функций (хотя вы все равно их допустите!):

  • пишут аbc вместо abs для модуля;
  • пишут tg вместо tan для тангенса.

Главное правило при использовании стандартных функций - брать аргумент в скобки:

  • нельзя SIN3, а надо sin(3);
  • нельзя SQR9, а надо sqr(9).

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

Примеры правильной записи стандартных функций представлены в табл. 1.2.

Перед упражнениями расскажем про радианную меру углов, потому что не все, к сожалению, любят тригонометрию. Итак:

1 радиан= 180°/ π, отсюда 1 градус=π/180°, следовательно sin 30° в Бейсике будет представлено как sin (30*3.14/180), π==3.14. А вот теперь можно поупражняться. Запишите на Бейсике следующие выражения.

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

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

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

В 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).

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

Переменные объявляются в начале программы следующим образом:
Dim имя переменной as Тип переменной
Или для нескольких переменных одного типа
Dim имя переменной 1, имя переменной 2, ... имя переменной N as Тип переменной
Имя переменной задаётся английскими буквами, например: InX, InY
Имя кроме букв может содержать цифры, но первой должна быть обязательно буква, например: z500, x_1, y2.
Тип переменной зависит от выполняемой задачи. Ниже приведены основные числовые типы языка Visual Basic:

Целые типы
Integer - числа от -32768 до +32767
Long - числа от - 9223372036854775808 до +9223372036854775807

Типы с плавающей запятой
float - числа от + 1,5*10 -45 до + 3,4*10 33
double - числа от + 5*10 -324 до + 1,7*10 306

Очевидно, что целые числа для калькулятора не подходят, поэтому примем для вычислений тип float.
Вначале создадим обработчик события (далее просто событие) для кнопки. Событие нажатия на эту кнопку можно создать просто двойным щелчком мыши на кнопке. В результате откроется редактор кода с таким текстом:

Public Class Form1
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

End Sub
End Class

Допишем строки кода для объявления переменных и начальных установок.

Public Class Form1
Dim x1, x2, z As Double REM Объявление переменных
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
" Очищаем текстовые поля
TextBox1.Text = ""
TextBox2.Text = ""
TextBox3.Text = ""
TextBox4.Text = ""
" Обнуляем переменные
x1 = 0
x2 = 0
z = 0
End Sub
End Class

Комментарии к программе можно записывать, используя стандартное слово REM (Remark) или поставив в начале строки комментария одиночную кавычку (апостроф). Если комментарий занимает несколько строк, то в начале каждой строки следует ввести REM или апостроф. Комментарии никак не влияют на работу программы.

Попробуем запустить программу на исполнение (F5) и, введя какие нибудь символы в поля ввода нажмём кнопку. Все поля должны очиститься.

Теперь, создадим событие для кнопки "Вычислить". Двойным щелчком на кнопке получим код события:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Добавим необходимые для вычислений строки кода:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
x1 = Convert.ToDouble(TextBox1.Text)
x2 = Convert.ToDouble(TextBox3.Text)
If TextBox2.Text = "+" Then z = x1 + x2
If TextBox2.Text = "-" Then z = x1 - x2
If TextBox2.Text = "*" Then z = x1 * x2
If TextBox2.Text = "/" Then z = x1 / x2
TextBox4.Text = Convert.ToString(z)
End Sub

Рассмотрим, что означают добавленные строки.
x1 = Convert.ToDouble(TextBox1.Text) - означает, переменной х1 присвоить значение из текстового поля TextBox1. Так как TextBox1 содержит данные текстового типа, то их нужно преобразовать к числовому типу. Для этого используем функцию Convert.ToDouble. Вторая строка аналогична первой, но для значения x2.
Далее идут строки с так называемыми условными операторами. Например строка означает: Если (if) текст из текстового поля TextBox2 равен символу + то (Then) переменной z присвоить сумму значений x1 и x2.
Таким образом, последовательно проверяя, какой символ введён в качестве знака операции, производим соответствующее вычисление. И, наконец выводим полученный результат в строку TextBox4. Так как TextBox4 принимает данные только текстового типа, то нам следует значение переменной z преобразовать к строковому типу. Для этого воспользуемся функцией преобразования Convert.ToString(z).
Попробуем произвести вычисления в нашем калькуляторе. Запустим программу на выполнение (F5). При вводе чисел с плавающей запятой в качестве разделителя следует использовать знак.

Добавим, для разнообразия, в наш калькулятор операцию возведения значения 1 в степень значения 2. Степень принято обозначать значком ^. Для расширения возможностей калькулятора добавим строку в код обработчика события:

If TextBox2.Text = "+" Then z = x1 + x2
If TextBox2.Text = "-" Then z = x1 - x2
If TextBox2.Text = "*" Then z = x1 * x2
If TextBox2.Text = "/" Then z = x1 / x2
If TextBox2.Text = "^" Then z = Math.Pow(x1, x2)

Для вычисления степени используем функцию Pow(x1, x2) которая встроена в объект Math.

В VBAиспользуются следующие виды функций:

Математические встроенные функции;

Математические функции, не представленные в VBA;

Функции форматирования данных;

Функции преобразования типов

Математические встроенные функции

Возвращаемое значение

Абсолютная величина числа

arctg(x) – арктангенс от значения параметра, заданного в радианах

sin(x) – возвращает синус угла от значения параметра, заданного в радианах

cos(x) – косинус указанного в радианах угла

tg(x) – возвращает тангенс угла от значения параметра, заданного в радианах

e x – возвращает числоe, возведенное в указанную степень, где е – основание натурального логарифма

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

- возвращает квадратный корень числового выражения

Случайное число из интервала )

Именованные числовые форматы

Имя формата

Описание

Число без разделителя тысяч

Отображает две цифры справа от десятичной точки

Отображает одну цифру слева и две справа от десятичной точки

Отображает одну цифру слева и две справа от десятичной точки и выводит разделитель тысяч

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

Использует формат с плавающей десятичной точкой

Отображает No, если число равно 0, иYes– в противном случае

Отображает False, если число равно 0, иTrue– в противном случае

Отображает Off, если число равно 0, иOn– в противном случае