VBA_№13

advertisement
Лабораторная работа № 13
6 часов
Пользовательские процедуры и функции.
Их применение в задачах VBA.
Теоретические сведения.
В программировании сложный код программы разбивают на подпрограммы.
Подпрограмма — это группа операторов, выполняющих законченное действие. Основная
программа — программа, реализующая основной алгоритм решения задачи и содержащая
в себе обращения к подпрограммам (вызов подпрограмм). В точке вызова функции
выполнение программы переходит к подпрограмме, и выполнив все действия
подпрограммы, возвращается в основную программу. В подпрограмме могут быть
объявлены собственные переменные, а также параметры подпрограммы для обмена
значений с основной программой. В VBA существуют два типа подпрограмм:
подпрограммы-функции и подпрограммы-процедуры. Функция, в отличие от
процедуры, возвращает значение и может входить в состав выражений.
Процедуры предназначены для выполнения некоторой последовательности
операторов.
Возьмем к примеру ситуацию, когда при проектировании программы вы замечаете,
что одну и ту же многошаговую операцию необходимо будет произвести с различными
переменными. Разумным шагом в сложившейся ситуации является следующий – один раз
написать код многошаговой операции и использовать его во всех необходимых местах
данной программы, а впоследствии и при написании других программ.
Синтаксис описания процедуры:
[Private | Public] [Static] sub Имя [(СписокАргументов)]
[инструкции]
End Sub
Элементы описания:
Public
Private
Указывает, что процедура Sub доступна для всех других
процедур во всех модулях
Указывает, что процедура Sub доступна для других процедур
только того модуля, в котором она описана
Указывает, что локальные переменные процедуры sub
сохраняются в промежутках времени между вызовами этой
процедуры
Имя
Имя процедуры sub, удовлетворяющее стандартным правилам
именования переменных
СписокАргументов Список переменных, представляющий аргументы, которые
передаются в процедуру Sub при ее вызове (формальные
параметры). Имена переменных разделяются запятой
Инструкции
Любая группа инструкций, выполняемых в процедуре
Sub
Static
Инструкция Exit Sub приводит к немедленному выходу из процедуры Sub.
Результат выполнения процедуры – это одно или несколько значений. Оно (или
они) передается в вызывающую процедуру как значение ее параметра. При вызове
процедуры ее формальные параметры заменяются фактическими в порядке их следования.
Фактические параметры – это параметры, которые передаются процедуре при
обращении к ней.
Формальные параметры – это переменные, фиктивно присутствующие в
процедуре и определяющие тип и место подстановки фактических параметров, над
которыми производятся действия.
Число и тип формальных и фактических параметров должны совпадать с
точностью до их следования.
Вызов процедуры Sub из другой процедуры можно произвести несколькими
способами.
Первый способ вызова процедуры Sub:
ИмяПроцедуры СписокФактическихПараметров
ИмяПроцедуры
СписокФактическихПараметров
Имя вызываемой процедуры
Список аргументов, передаваемых
процедуре. Он должен соответствовать
списку, заданному в процедуре по
количеству и типу.
Если требуется использовать несколько процедур с одинаковыми названиями; при
их вызове после имени процедуры через точку надо указывать имя модуля, на котором
они расположены. А именно:
ИмяМодуля . ИмяПроцедуры СписокФактическихПараметров
Второй способ вызова процедуры sub производится с помощью инструкции Call.
Call ИмяПроцедуры (СписокФактическихПараметров )
Обратите внимание, что в этом случае список фактических параметров заключается
в скобки. В первом способе скобки не использовались.
Рассмотрим пример на использование процедуры. Пусть нам необходимо
вычислить следующее выражение: f = a+b+ (a+b)2. Используем для вычисления суммы
(a+b) процедуру:
Задания к выполнению
Задания выполнить 2-мя способами:
1) используя процедуру
2) используя функцию
1. Рассчитать значение x, определив и использовав процедуру:
2. Определить значение z = sign x + sign y, где
 1, при a  0

sign a  0, при a  0
1, при a  0

Значения x и у вводятся с клавиатуры. При решении задачи определить и использовать
процедуру sign.
3. Даны два натуральных числа. Выяснить, является ли хоть одно из них палиндромом
("перевертышем"), т.е. таким числом, десятичная запись которого читается одинаково
слева направо и справа налево. (Определить процедуру, позволяющую распознавать
числа-палиндромы.)
4. Найти периметр фигуры ABCD по заданным сторонам AB, АС и DC. (Определить
процедуру для расчета гипотенузы прямоугольного треугольника по его катетам.)
5. Даны три квадратных уравнения ах2 + bx + с = 0, bх2 + ах + с = 0, cx2 + ах + b = 0.
Сколько из них имеют вещественные корни? (Определить процедуру, позволяющую
распознавать наличие вещественных корней в квадратном уравнении.)
6. Найти значение выражения
где n! означает факториал числа n. (Определить процедуру для расчета факториала
натурального числа.)
7. Даны 6 различных чисел. Определить минимальное из них. (Определить процедуру,
находящую минимум из двух различных чисел.)
8. Даны вещественные числа x1,y1,x2,y2,…. Найти площадь пятиугольника, вершины
которого имеют координаты (x1,y1), (x2,y2), ..., (xn, yn). (Определить процедуру для
расчета площади треугольника по координатам его вершин.)
9. Даны 6 различных чисел. Определить максимальное из них. (Определить процедуру,
находящую максимум из двух различных чисел.)
10. Дано n окружностей с радиусами r1, r2, …,rn соответственно. Найти сторону
прямоугольника, площадь которого равна сумме n площадей окружностей, если одна
сторона прямоугольника равна а. Вычисление площади круга оформить в виде
процедуры.
11.Даны натуральное число n и целые числа а1, а2, ..., ап. Найти количество чисел аi (i = 1,
2, ..., n), являющихся степенями пятерки. (Определить процедуру, позволяющую
распознавать степени пятерки.)
12 Найти наибольший общий делитель трех натуральных чисел, имея в виду, что НОД(а,
b, с) = НОД (НОД(а, b), с). (Определить процедуру для расчета наибольшего общего
делителя двух натуральных чисел, используя алгоритм Евклида.)
13. Найти значение функции f(x), использовав процедуру. Ввод данных произвести при
помощи InputBox.
5 x, при x  0
 x 2 , при x  0
tgx, при x  0
б) f ( x)  
 x 2  3x  5, при x  0
sin x, при x  0
в) f ( x)  
5 x 3  8, при x  0
a) f ( x)  
 5  x 4 , при x  0

 2
г) f ( x )   x  3 , при x  0

15, при x  0
13. Создать программу, которая обеспечит ввод данных y при помощи InputBox,
произведет вызов функции g с двумя условиями:
и выведет результат в MsgBox. Вычисление функции g произвести через
процедуру.
14. Создать программу, которая обеспечит ввод данных t при помощи InputBox,
произведет вызов функции z с тремя условиями:
и выведет результат в MsgBox. Вычисление функции g произвести через
процедуру.
Задачи: Найти значение функции, использовав процедуру. Ввод данных произвести при
помощи InputBox.
Номер
варианта
Выражение
Исходные
данные
1
2
3
15
x  y 2  x  y , если x  y  0

2
a  x  y   x  y , если x  y  0

2
если x  y  0
x  y   1,
16
ln x / y   x 2  y 3 , если x  y  0

3
2

b  ln x / y  x  y , если x  y  0
x  y ,
если x  0

если y  0
0 ,




x, y
x, y
17
x 2  y 2  sin x , если x  y  0

2
c  x  y   cos x , если x  y  0

2
y  x   tg x, если x  y  0
x, y
18
x  y 3  arctg x , если x  y

3
d  y  x  arctg x , если x  y

3
если x  y
x  y   0.5 ,
x, y
19
i  a ,
если i  нечетное, a  0

e  0.5  i  a , если i  четное, a  0

иначе
 i  a ,
a, i
Download