Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование на BASIC / Visual Basic / Visual Basic for Applications. Учебный практикум.doc
Скачиваний:
147
Добавлен:
02.05.2014
Размер:
827.9 Кб
Скачать

1.10. Математические вычисления. Другие операторы и функции

Абсолютное значение заданного арифметического выражения: Abs().

Тригонометрическиефункции:

Sin(УГОЛ),Cos(УГОЛ),Tan(УГОЛ),Atn(АРИФМ.ВЫРАЖ);

где аргумент УГОЛ задается в радианах; функция арктангенса возвращает значение угла в радианах; для преобразования из градусной меры в радианную и обратно используются формулы: град=рад*(180/pi) и рад=град*(pi/180) при pi=3.14159.

Вычисление экспоненты: Exp() – вычисление значения е в степени х (антилогарифм), где е=2.71; результат имеет тип Single.

Вычисление натурального логарифма: Log(), т.е.lnx при основании е; результат имеет тип Single.

Преобразование к целому типу: Int() – наибольшее целое, не превосходящее значения аргумента.

Выделение целой части арифметического значения аргумента: Fix().

Извлечение квадратного корня Sqr(); результат имеет тип Single.

Определение знака числа Sgn(); возвращает -1, 0, +1, если аргумент соответственно меньше, равен или больше нуля.

Преобразование числа в строку Str().

Преобразование строки в число: Val().

Определение или изменение текущей системной даты Date: dat$=Date – определение; Date="09-09-1945" – изменение.

Определение или изменение системного времени Time.

Rnd(n) возвращает случайное число в диапазоне от 0 до 1; при n < 0 – определенное число, зависящее от n, при n > 0 – новое число, при n = 0 – последнее выданное число.

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

В языке Basic процедуры и функции объединяются под общим названием подпрограммы.

Для создания процедуры в программе надо ввести в окне редактирования кода заголовок Sub ИМЯ_ПРОЦЕДУРЫ, появится пустой шаблон процедуры:

Sub ИМЯ_ПРОЦЕДУРЫ

End Sub

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

Для выбора существующих процедур в окне редактирования кода надо выбрать "(General)" из списка Object и выбрать процедуру в окне Procedure.

Для просмотра процедуры в другом модуле надо: 1) выбрать View / Object Browser, 2) в окне Project / Library выбрать проект, 3) выбрать модуль из списка Classes и процедуру из списка Members, 4) выбрать View Definition.

Способы вызова процедуры: Call Proc1(arg1, arg2), или Proc1 arg1, arg2.

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

1. Все вызовы снаружи модуля формы должны указывать на модуль формы, содержащий процедуру: имя_модуля.имя_процедуры();

2. При вызове процедуры из модуля класса также должен указываться экземпляр класса, но в отличие от формы экземпляр класса предварительно должен быть объявлен как объектная переменная, например Dim DemClass As New Class1, тогда обращение будет иметь вид DemClass.Sub1.

Параметры пользовательских процедур по умолчанию имеют тип Variant.

При передаче параметров по значению используется ключевое слово By Val; фактически, передается только копия переменной и процедура не изменяет оригинальную переменную. Пример:

Sub CC(By Val x As Integer)

....

End Sub

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

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

Примеры процедур:

1. Передача параметра из процедуры

Rem Программа_2.4 – Передача параметра из процедуры с помощью переменной s

Sub Main()

Dim s As Single, x As Single, y As Single

x = 5: y = 15

Call sumir (x, y, s) ‘ вызов процедуры суммирования

MsgBox "s = " & Str(s)

End Sub

Sub sumir (x!, y!, s!) ‘ определение процедуры суммирования двух чисел

s! = x! + y! ‘ в переменную s помещается сумма двух чисел

End Sub

2. Массив, как параметр процедуры

Rem Программа_2.5 – Массив, как параметр процедуры

Sub Main()

Dim n As Integer

Dim s As Single

Dim x(2) As Single

n = 2

x(1) = 5: x(2) = 15: s = 0

Call sumir(x(), n, s) ‘ вызов процедуры суммирования элементов массива

MsgBox "s = " & Str(s)

End Sub

Sub sumir (x() As Single, n As Integer, s As Single)

Dim i As Integer

For i = 1 To n

s = s + x(i)

Next i

End Sub

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

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

Function ИМЯ_ФУНКЦИИ

End Function

В пространство между именем функции и ключевыми словами End Function вносятся необходимые операторы.

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

Общий синтаксис определения функции:

Function ИМЯ_ФУНКЦИИ(ПАРАМЕТР_1[, ПАРАМЕТР_2]...) [Static]

ОПЕРАТОР_1

[ОПЕРАТОР_2]

...

ИМЯ_ФУНКЦИИ = ВЫРАЖЕНИЕ

End Function

где ПАРАМЕТР – элемент данных, передаваемый функции при ее вызове; Static – при наличии в объявлении функции данного ключевого слова локальные переменные, объявленные в теле функции, сохраняют свои значения в промежутках между вызовами этой функции.

Способы вызова функций: X = fun1(Y), или Call fun1 Y.

Если функция должна возвращать символьное (строковое) значение, то последним символом в ее имени должен быть знак $.

Каждая функция всегда возвращает только одно значение.

Примеры функций:

1. Передача параметра из функции

Rem Программа_2.6 – Передача параметра из функции

Sub Main()

Dim x As Single, y As Single, s As Single

x = 5: y = 15

s = sumir(x, y) ‘ вызов функции суммирования двух чисел

MsgBox "s = " & Str(s)

End Sub

Function sumir! (x!, y!) ‘ определение функции суммирования двух чисел

sumir! = x! + y!

End Function

2. Пример функции, возвращающей строковое (символьное) значение

Rem Пример_2.7 – Использование Функции, возвращающей строковое значение

Sub Main()

Dim sl As String

sl = "БЫЛО"

MsgBox sl

sl = fun$(sl) ’ функция меняет для переменной sl значение ‘’БЫЛО “ на значение “СТАЛО”

MsgBox sl

End Sub

Function fun$ (sl As String)

sl = "СТАЛО"

fun$ = sl ‘Этим оператором функция возвращает значение – отличие от Sub

End Function

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

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

Переменные типа Private доступны всем процедурам модуля, переменные Public доступны другим модулям; как и все переменные уровня модуля, они объявляются в начале модуля.

Переменные уровня процедуры объявляются в операторах Dim и Static; первые существуют только во время выполнения процедуры, а вторые – в течение всего времени выполнения приложения. Если поместить перед именем процедуры Static, то все ее локальные переменные будут статическими.

Переменная в модуле не может иметь то же имя, что и процедура или тип, которые определены в этом же модуле.

Если переменные Public в различных модулях имеют одно имя. то для их различения надо квалифицировать имена именем модуля. Например, если в модулях М1 и М2 имеются переменные intX, то обращение к этим переменным должно иметь следующий вид: М1.intX и М2.intX.