Читайте также:
|
|
Процедуры и функции с параметрами - важное средство сделать вашу программу надежнее и понятнее.
Функции. Параметры функций
Мы с вами уже сталкивались со стандартными функциями. Например, выражение 10+Abs(-20) имеет значение 30, так как функция Abs(-20) обозначает абсолютную величину числа -20. Стандартная функция - это некая скрытая программа, которая принимает свои параметры, указанные в скобках, в качестве исходных данных, что-то делает с ними и в результате получает одну величину, которая и является значением функции. Множество других примеров функций вы найдете в 11.1, 16.1 и по всей книге.
Если вам недостаточно стандартных функций, вы можете создавать собственные функции пользователя:
Задача: Предположим, вам часто приходится вычислять периметры прямоугольников. Тогда вам было бы удобно иметь функцию вида perimetr(10,4), которая имела бы значение периметра прямоугольника со сторонами 10 и 4. Рассмотрим, как это делается, на примере программы вычисления суммарного периметра трех прямоугольников:
Private Function perimetr(dlina As Integer, shirina As Integer) As Long
perimetr = 2 * (dlina + shirina)
End Function
Private Sub Command1_Click()
Debug.Print perimetr(10, 4) + perimetr(20, 30) + perimetr(3, 8)
End Sub
Здесь щелчком по кнопке Command1 мы запускаем вычисление суммы периметров трех прямоугольников: 10*4, 20*30 и 3*8. А для того, чтобы узнать, как вычислять perimetr, компьютер заглядывает в определение функции, выделенное мной полужирным шрифтом.
Вы видите, что определение функции очень похоже на определение процедуры. Но функция в отличие от процедуры обладает некоторыми свойствами переменной величины и поэтому определение функции отличается от определения процедуры следующими двумя вещами:
· В заголовке функции после скобок с параметрами должен быть указан тип функции (у нас это Long).
· Внутри определения функции ей хотя бы раз должно быть присвоено какое-нибудь значение, как если бы это была не функция, а обычная переменная (у нас этим занимается оператор perimetr=2*(dlina+shirina)).
Обращение к функции также отличается от обращения к процедуре. Если обращение к процедуре - самостоятельный оператор (Portos, Aramis из 10.2, Рисуем_мой_значок 100, 200, vbBlue из 10.5), то обращение к функции - это обычно составная часть выражения (10+Abs(-20), Debug.Print perimetr(10,4) + perimetr(20, 30)).
Рассмотрим другой пример функции:
Задача: Напишите функцию Ответ, которая бы в ответ на вопрос человека "Какое сегодня число?" принимала значение правильной даты, а ответом на любой другой вопрос должно служить "Не знаю".
Вот программа:
Dim q As String
Private Function Ответ(Вопрос As String) As String
If Вопрос = "Какое сегодня число?" Then Ответ = Date Else Ответ = "Не знаю"
End Function
Private Sub Command1_Click()
q = InputBox("Задайте вопрос")
Debug.Print Ответ(q)
End Sub
Здесь щелчком по кнопке Command1 мы вызываем появление на экране окна InputBox с предложением задать вопрос. Введенный нами вопрос запоминается в переменной q. Следующая строка (Debug.Print Ответ(q)) вызывает к жизни нашу функцию. При этом компьютер, выполняя тело функции, вместо параметра Вопрос работает с переменной q, так как именно она была указана в обращении к функции. Получается очень удобно: когда мы пишем функцию, нам не нужно заботиться о том, какие имена переменных будут использованы при обращении к функции, мы просто даем параметру любое пришедшее в голову имя. И наоборот, когда мы пишем обращение к функции, нам не нужно заботиться о том, какие имена имеют параметры в заголовке функции.
Задание 128: Напишите функцию, вычисляющую любое число Фибоначчи. Например, fib(8) - это 8-е число Фибоначчи.
Указание: Если будете использовать массив, то дайте ему имя, отличающееся от имени функции, например, f.
Дата добавления: 2015-11-16; просмотров: 69 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Функция Shell | | | Локальные переменные |