Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Безусловный переход. Оператор GOTO




Для безусловного перехода на желаемый оператор в программе на VBA используется оператор Goto, за которым указывается метка оператора, к которому требуется перейти. Метка указывается перед оператором. Между меткой и оператором указывается двоеточие.

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

Sub primer1_12()

nachalo: x = InputBox("Введите число")

If x < 0 Then Goto konec

koren = Sqr(x)

MsgBox ("Корень равен " & koren)

Goto nachalo

konec: End Sub

Здесь nachalo и konec – метки.

Подпрограммы.

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

Пример 1.13. Требуется определять в заданной строке двумерного массива максимальный элемент этой строки, а также его номер. Поиск максимального элемента в строке требуется реализовать как подпрограмму.

Sub primer1_13()

Dim a() As Single

m = InputBox("Введите количество строк массива")

n = InputBox("Введите количество столбцов массива")

ReDim a (1 To m, 1 To n), asum(1 To n)

For i = 1 To m

For j = 1 To n

a(i, j) = InputBox("a(" & i & "," & j & ")")

Next j

Next i

nomer_stroki = InputBox(“Укажите, в какой строке требуется найти максимум”)

Call poisk_max(a, n, nomer_stroki, max_elem, nomer_max_elem)

MsgBox(“Максимальный элемент “ & i & “-й строки равен “ & max_elem)

MsgBox(“Он находится в “ & nomer_max_elem & “-м столбце“)

End Sub

Sub poisk_max(massiv, kol_stolb, i, max, nom_max)

max=massiv(i,1): nom_max=1

For j=1 To kol_stolb

If massiv(i,j)>max Then

max = massiv(i,j)

nom_max = j

Next j

End Sub

Здесь подпрограмма primer1_13 является вызывающей (или основной) подпрограммой, а poisk_max – вызываемой подпрограммой. Таким образом, данная программа (в целом) состоит из двух подпрограмм. При ее запуске курсор должен находиться в пределах текста основной подпрограммы.

В начале основной подпрограммы выполняется ввод массива (с именем a). Вводится также переменная nomer_stroki – номер строки, в которой требуется найти максимальный элемент. Все действия, выполняемые при этом, рассмотрены ранее.

Оператор Call – вызов подпрограммы. В данном примере он имеет следующий вид:

Call poisk_max(a, n, nomer_stroki, max_elem, nomer_max_elem)

Здесь poisk_max – имя вызываемой подпрограммы. Переменные a, n и nomer_stroki – входные параметры, так как при вызове подпрограммы их значения уже заданы. Переменные max_elem и nomer_max_elem – выходные параметры, так как они должны быть определены в результате выполнения подпрограммы.

Следующая строка представляет собой заголовок подпрограммы:

Sub poisk_max(massiv, kol_stolb, i, max, nom_max)

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

В данном примере при вызове подпрограммы poisk_max переменная massiv получает значение переменной a (т.е. значение массива, введенного в основной программе), переменная kol_stolb – значение n, переменная i – значение nomer_stroki. Переменные max и nom_max получают значения переменных max_elem и nomer_max_elem; так как этим переменным в основной программе не было присвоено никакого значения, они равны нулю.

Затем выполняется подпрограмма poisk_max. В результате ее выполнения определяются значения переменных max и nom_max. Эти же значения получают соответствующие переменные основной программы, в данном случае – переменные max_elem и nomer_max_elem.

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

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

Call poisk_max(a, n, 3, max_elem, nomer_max_elem)

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

Функции.

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

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

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

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

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

Sub primer1_13()

Dim a() As Single, b() As Single

n = InputBox("Введите размерность пространства")

ReDim a(1 To n), b(1 To n)

MsgBox ("Вводите координаты первой точки")

For i = 1 To n

a(i) = InputBox("Координата " & i & ": ")

Next i

MsgBox ("Вводите координаты второй точки")

For i = 1 To n

b(i) = InputBox("Координата " & i & ": ")

Next i

d = rasst(a, b, n)

MsgBox ("Расстояние равно " & d)

End Sub

Function rasst(x, y, razmernost)

rasst = 0

For i = 1 To razmernost

rasst = rasst + (x(i) - y(i)) ^ 2

Next i

rasst = Sqr(rasst)

End Function

Здесь rasst – функция. Она вызывается в операторе d = rasst(a, b, n). Таким образом, переменные a и b (массивы с координатами точек), а также переменная n (размерность пространства, т.е. количество координат у каждой точки) являются входными параметрами функции rasst. В самой функции rasst значения этих переменных присваиваются переменным x, y и razmernost соответственно. Функция вычисляет расстояние между точками. Результат присваивается переменной rasst. Следует обратить внимание, что имя этой переменной обязательно должно совпадать с именем самой функции (в данном случае – rasst). По окончании выполнения функции rasst выполняется возврат в основную программу: выполняется оператор, где была вызвана функция, т.е. оператор d = rasst(a, b, n). Таким образом, значение функции rasst присваивается переменной d. Затем эта переменная выводится на экран оператором MsgBox.





Поделиться с друзьями:


Дата добавления: 2016-11-02; Мы поможем в написании ваших работ!; просмотров: 402 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Настоящая ответственность бывает только личной. © Фазиль Искандер
==> читать все изречения...

2364 - | 2087 -


© 2015-2025 lektsii.org - Контакты - Последнее добавление

Ген: 0.012 с.