Язык программирования Visual Basic. Понятие процедуры. Подпрограммы и функции. Модульный принцип построения программного кода. Функции в vba Математические встроенные функции
ЯЗЫК ПРОГРАММИРОВАНИЯ VISUAL BASIC. ПОНЯТИЕ ПРОЦЕДУРЫ. ПОДПРОГРАММЫ И ФУНКЦИИ. МОДУЛЬНЫЙ ПРИНЦИП ПОСТРОЕНИЯ ПРОГРАММНОГО КОДА
В Visual Basic весь программный код находится внутри процедур (подпрограмм). Общая структура описания подпрограммы Visual Basic:
Sub <имя_подпрограммы>
[(<параметры>)]
<операторы>
End Sub
Такие процедуры могут вызываться или самим Visual Basic, или другими процедурами. Вызов подпрограммы выполняется с помощью следующих операторов:
- Call <имя_подпрограммы> [(<параметры>)];
- <имя_подпрограммы> [<параметры>]. Функция построена точно так же, как и процедура, однако результатом работы функции является возвращаемое значение (только одно).
Function <имя_функции> [(<аргументы>)]
<операторы>
<имя_функции> = <выражение> End Function
Вызов функции выполняется с помощью оператора; присваивания:
<переменная> = <имя_функции> {(<аргументы>)].
Использование принципов модульного программирования Windows-приложения в среде проектирования VB выражено в двух аспектах.
1. Разбиение программного кода на отдельные компактные модули.
В файле модуля формы (frm) содержится программный код, относящийся к форме и объектам этой формы. В стандартном (универсальном) модуле (bas) содержатся программные коды, которые могут использоваться не в одной, а в нескольких формах (и даже в нескольких проектах).
2. Разбиение программного кода уже внутри модуля на отдельные части - процедуры.
В Visual Basic процедуры делятся на подпрограммы и функции. В свою очередь подпрограммы делятся на общие и процедуры обработки событий. Процедуры обработки событий начинают работать в ответ на какое-либо событие, например, нажатие, кнопки в экранной форме. Общие процедуры начинают работать после явного их вызова из какого-нибудь места программы. После выполнения такой процедуры происходит автоматический возврат в то место программы, откуда процедура была вызвана.
Общая процедура может входить в состав модуля экранной формы (в файл frm) или в состав стандартного модуля (в файл bas).
В Visual Basic есть три вида областей определения, характеризующих доступность переменной:
- локальная: переменная доступна только в текущей процедуре;
- контейнера: переменная доступна только в текущей форме, модуле или классе;
- глобальная: переменная доступна во всем проекте. Локальными называются переменные, определяемые внутри процедуры или функции. Они доступны только внутри этой процедуры. Поэтому не возникает конфликтов при использовании разными процедурами переменных с одним и тем же именем. При выходе из процедуры все ее локальные переменные сразу же удаляются из памяти, а при новом вызове этой процедуры переменные создаются вновь.
Переменные контейнера определяются в секции (General) (Declarations) с помощью оператора Dim и доступны только внутри соответствующего контейнера, т, е. формы, модуля или класса.
Глобальные переменные определяются в секции (General) (Declarations) модуля. При этом вместо оператора Dim используется Public. Глобальные переменные доступны во всех модулях и процедурах проекта.
Локально объявленные переменные при выходе из процедуры удаляются из памяти, а при новом вызове процедуры инициализируются заново. Их содержимое при этом не сохраняется, что не всегда желательно. Этого можно избежать путем расширения области определения, т. е. объявив переменную глобальной или как минимум переменной контейнера. Но это разрешает доступ к переменной из других процедур.
Visual Basic дает возможность объявлять переменные как статические. При выходе из процедуры содержимое статической переменной сохраняется. При новом вызове этой процедуры переменной присваивается значение, которое она имела при последнем выходе из этой процедуры. Содержимое переменной сохраняется в течение всего времени, пока существует в памяти форма или модуль.
Объявление переменной как статической производится оператором:
Static <Имя_переменной>
Чтобы объявить статическими все локальные переменные процедуры, следует записать ключевое слово Static в заголовке процедуры.
Полное описание общей процедуры выглядит следующим образом:
<ОбластьВидимости>]
Sub <имяПроцедуры>
(<Списокпараметров>)
<Операторы>
End Sub
Область видимости - это одно из двух ключевых слов Public или Private. Они устанавливают, к какому классу принадлежит процедура: к классу локальных или классу глобальных процедур. Процедура локальная (Private), если она доступна (видна) только внутри данного модуля и не может быть вызвана из других модулей. Процедура глобальная (Public), если она доступна (видна) из других модулей.
Наличие или отсутствие ключевого слова Static говорит о статусе локальных переменных, т. ё. переменных, объявленных внутри этой процедуры. При наличии этого слова локальные переменные будут сохранять свои значения между Последовательными вызовами этой процедуры. При отсутствии слова Static - не будут.
В процедурах обработки событий набор параметров зависит от события и не может быть изменен разработчиком.
В общих процедурах количество и порядок используемых параметров определяется разработчиком. В заголовке процедуры можно указывать тип данных для параметров.
В Visual Basic параметры могут передаваться двумя способами:
- как ссылки (ByRef);
- как значение (ByVal).
Если параметр передается как Ссылка, то вызванная процедура получает физический адрес памяти переданной переменной. При таком способе передачи можно изменять значение этого параметра. Так как вызываемая и вызывающая процедуры обращаются к одной и той же области памяти, значение переменной для них идентично.
По умолчанию параметры в Visual Basic передаются по ссылке, но можно указывать явно ключевое слово ByRef перед параметром в заголовке процедуры. Например,
Sub pr1(ByRef n As String)
При передаче параметра по значению Visual Basic передает копию содержимого переменной вместо ее адреса в памяти, и функция или процедура не сможет напрямую модифицировать исходное значение. Ключевое слово ByVal перед параметром должно указываться обязательно. Например, Function fkl (ByVal k As String) As Boolean.
В 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. При этом ей дополнительно передается один аргумент.
УПРАВЛЕНИЕ ОБРАЗОВАНИЯ И НАУКИ БЕЛГОРОДСКОЙ ОБЛАСТИ
Валуйский педагогический колледж
Реферат на тему
«Функции языка Visual Basic . Выражения»
Плутахина Юлия Сергеевна,
студентка 11 группы
Руководитель:
Маслова Елена Петровна,
преподаватель информатики
Введение в Бейсик………………………………………….…3-4
1. Функции в языке Visual Basic:
2.1. Функции преобразования типов данных….………….....4-5
2.2. Математические функции…………………………….……5
2.3. Строковые функции………………………..………….……5
2.4. Функции ввода и вывода…………………………………5-6
2.5. Функции даты и времени……………………………….…..6
3. Выражения в языке Бейсик……………………………………..6
Заключение
Список использованной литературы……………………………7
Введение в Бейсик:
Выполнять в среде Бейсика элементарные операции и вычисления, особенно в ранних версиях типа GW-Basic или MSX-Basic, действительно нетрудно. Если компьютер включен и Бейсик загружен, можно смело приступить к работе. Начнем с того, что вы хотите что-то вычислить. Бейсик для этого лучше, чем любой калькулятор. Наберите команду
PRINT «Это команда вывода», 5*5
и нажмите клавишу
При вычислениях необязательно, чтобы операндом было выражение, содержащее только числа. Попробуйте ввести следующие команды (заканчивая каждую строчку нажатием на клавишу
Компьютер немедленно выдаст результат:20.
Режим работы, описанный выше, часто так и называют – режим калькулятора (или непосредственный режим).
А теперь каждую из представленных выше трех команд пронумеруем, см. программу 54.
Программа 54
Обратим внимание, что после ввода этой программы команды не выполнялись, а записывались в память компьютера. Убедиться в этом можно, введя команду LIST – текст этой маленькой программы тут же появится на экране.
Если теперь ввести команду RUN, то она запустит программу на исполнение. Таким образом, последовательный набор команд с номерами строк является программой на языке Бейсик. Программировать на языке Бейсик означает научиться составлять определенный набор команд для решения поставленной вами задачи. Какие имеются команды у Бейсика и как ими пользоваться – рассмотрим ниже. Режим, при котором команды не выполняются непосредственно, а «копятся», называют косвенным. В этом режиме, основном для Бейсика, он и является языком программирования.
Следует помнить, что существует множество версий языка Бейсик, и все они имеют особенности. В каждой из современных версий Бейсика можно выделить общее подмножество, в котором отражены характерные (стандартные) грамматика, синтаксис и семантика языка. Последние версии приобрели популярность благодаря удобному интерфейсу и предоставлению пользователю ряда сервисных возможностей, присущих современным системам программирования.
1.Функции в языке Visual Basic :
Понятие функции в языке программирования близко к понятию функции в математике. Функция может иметь один или более аргументов. При записи функции нескольких аргументов. При записи функции нескольких аргументов аргументы в списке отделяются друг от друга запятыми.
Для каждого набора аргументов можно определить значение функции. В программировании говорят, что функция возвращает своё значение. Если заданы значения ее аргументов. Функции обычно входят в состав выражений, значения которых присваиваются переменным.
Функции могут быть различных типов: преобразования типов данных, математические, строковые, финансовые, даты и др. Тип функции определяется возможными значениями аргументов и функции.
2.1. .Функции преобразования типов данных.
Функции преобразования реализуют преобразование данных из одного типа в другой.
Функция Val . Часто необходимо преобразовать строковое значение в числовое. Это можно сделать с помощью функции Val , аргументом которой является строка, а значением – число:
Val (Строка$)
Например, значением функции Val («2000») является число 2000. Эта функция часто применяется для преобразования строкового значения свойства Text текстовых полей в число, которое затем используется в арифметических выражениях.
Строковое выражение, являющееся аргументом функции Val , может быть задано не только в десятичной, но также в восьмеричной (приставка “&H”) системах счисления. Например, значением функции Val (“&03720”) и Val (“&H7D0”) является десятичное число 2000.
Таким образом, появляется возможность перевода чисел, выраженных в строковой форме, из восьмеричной и шестнадцатеричной систем счисления в число десятичной системы счисления
Функции Str, Hex, Oct. Функции Str, Hex и Oct позволяют производить преобразование десятичных чисел в десятичные, восьмеричные и шестнадцатеричные числа в строковой форме. Аргументом функции является число, а значением – строка:
Str (Число)
Oct (Число)
Hex (Число)
Например, значением функций Str(2000), Oct(2000), Hex(2000) является десятичное число 2000, восьмеричное число 3720 и шестнадцатеричное число H7D0 в строковой форме.
Функция Asc. Функция Asc осуществляет преобразование строки в числовой код (в таблице кодировки) первого символа. Аргументом функции является строка, а значением – число:
Asc (Строка&)
Функция Chr. Функция Chr осуществляет преобразование числового кода в соответствующий ему символ. Аргументом функции является число, а значением – символ:
Chr (Число)
1.2. Математические функции.
В математических функциях значениями как аргументов, так и функций являются числа. В языке Visual Basic имеется 12 математических функций: тригонометрические (Sin (), Cos (), Tan(), Atn ()), квадратный корень Sqr (), логарифм Log (), показательная функция Exp (), получение случайного числа Rnd () и др.
2.3. Строковые функции.
В строковых функциях строками являются либо аргументы, либо возвращаемые функциями значения.
Функция определения длины строки. В функции определения длины строки Len (Строка$) аргументом является Строка$, а возвращает функция числовое значение длины строки (количество символов в строке). Синтаксис функции:
Len (Строка$)
Функции вырезания подстроки. В функциях вырезания подстроки (части строки) Left (Строка$, Длина%), Right (Строка$, Длина%) и Mid (Строка$, Позиция%, Длина%) аргументами являются строка Строка$ и числа или целочисленные переменные Длина% и Позиция%. Функции возвращают строковое значение, длина которого равна Длина%. Синтаксис функций:
Left (Строка$, Длина%)
Right (Строка$, Длина%)
Mid (Строка$, Позиция%, Длина%)
Значением функции Left является левая подстрока, которая начинается от крайнего левого символа строки и имеет количество символов, равное значению числового аргумента Длина%.
2.4. Функции ввода и вывода.
Функция InputBox (Окно ввода). Функция InputBox позволяет вводить данные с помощью диалоговой панели ввода. В качестве аргументов этой функции выступают три строки, значением функции является также строка. Синтаксис функции следующий:
InputBox(Приглашение$, Заголовок$, [ПоУмолчанию$])
В процессе выполнения этой функции появляется диалоговая панель с текстовым полем. В строке заголовка панели будет печататься значение второго аргумента (Заголовок$), на самой панели печатается значение аргумента Приглашение$, в текстовом поле печатается значение аргумента ПоУмолчанию$ (если это значение отсутствует, содержимое текстового окна также отсутствует). Введенная пользователем в текстовом поле строка становится значением функции.
Функция MsgBox (Панель сообщений). Функция MsgBox позволяет выводить сообщения не на форме, а на специальной панели сообщений. Кроме того, функция MsgBox возвращает определенное значение, которое может быть присвоено какой-либо переменной. Синтаксис функции следующий:
MsgBox (Сообщение$[, ЧисКод1+ЧисКод2] [,Заголовок$])
2.5. Функции даты и времени.
Функция Date. Функция Date возвращает значение текущей даты, которое можно присвоить переменным типа Date. Значение даты представляется в виде тройки чисел #Месяц/Число/Год#, разделенных знаком «/». Разностью значений переменных типа Date является число дней между датами.
Функция Time$. Функция Time$ возвращает значение текущего времени, имеющее тип String, которое можно вывести в текстовое поле. Значение времени представляется в виде тройки чисел #Часы:Минуты:Секунды#, разделенных знаком «:».
Для периодического обновления значения времени используем объект Timer. Объект Timer не отображается на форме в процессе выполнения программы и реализует всего одну функцию – проверяет показания системных часов по событию Timer.
Периодичность события Timer может быть задана с помощью значения свойства Interval, задаваемого в миллисекундах (может изменяться от 0 до 65535). Для того чтобы событие Timer происходило каждую секунду, необходимо каждому свойству Interval присвоить значение 1000.
2. Выражения на языке Бейсик.
Форма записи арифметических выражений на языке Бейсик весьма близка к математической записи выражений в строчку. Этой форме в последнее время отдают всё большее предпочтение: она облегчает набор простых и умеренно сложных формул. В связи с этим особых трудностей в составлении арифметических выражений на Бейсике не возникает
Пока мы не забыли элементарную арифметику в Бейсике и вывод результатов (надеюсь, у вас это получается, причем в законченной, красивой форме с подсказками), необходимо ознакомиться со стандартными функциями языка Бейсик, чтобы в полной мере ощутить его вычислительные способности.
Бейсик позволяет работать со стандартными алгебраическими функциями, перечисленными в табл. 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. А вот теперь можно поупражняться. Запишите на Бейсике следующие выражения.
Занятие 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 |
Перевод из градусов в радианы


