Е. А. Рябухина, О. А. Гущина, Д. А. Губанов, Д. В. Емельянов
Скачать 3.08 Mb.
|
Раздел описания локальных данных Раздел операторов Имя=Результат EndFUNCTION Здесь P1 , P2, … – входные (формальные) параметры (переменные или массивы), T1, T2 … – тип соответствующих параметров; T – тип результата. Если входным параметром является массив, то в заголовке подпрограммы он описывается в виде Pn() As Tn. Описание параметра в заголовке подпрограммы может иметь более сложную конструкцию: [Optional] [ByVal | ByRef] [ParamArray] Pi[( )] As T Здесь Optional – необязательный параметр. При использовании этого элемента все последующие аргументы, которые содержатся в списке аргументов, также должны быть необязательными и описаны с помощью ключевого слова Optional. Все аргументы, описанные как Optional, должны иметь тип Variant. He допускается использование ключевого слова Optional для любого из аргументов, если используется ключевое слово ParamArray. Необязательный параметр ByVal указывает, что этот аргумент передается по значению. Альтернативный необязательный параметр ByRef указывает, что этот аргумент передается по ссылке. Описание ByRef используется в VBA по умолчанию. Необязательный параметр ParamArray используется только в качестве последнего элемента в списке аргументов для указания, что конечным аргументом является описанный как Optional массив значений типа Variant. Ключевое слово ParamArray позволяет задавать произвольное количество аргументов. Оно не может быть использовано со словами ByVal, ByRef или Optional. Раздел описания локальных данных включает в себя константы, переменные или массивы, сохраняющие свои значения только внутри подпрограммы. Присвоение имени подпрограммы результата вычислений может быть записано не в виде отдельного оператора, а включено в раздел вычислений. Обращение к подпрограмме-функции в основной программе происходит аналогично обращению к стандартной функции, при этом формальные параметры заменяются фактическими; формальные и фактические параметры должны совпадать по количеству, типу и смыслу. Фактическими параметрами могут быть константы или переменные. Если параметром является массив, то в качестве фактического параметра указывается только его имя. Пример: даны три массива – X(100), Y(80) и Z(50). Вычислить величину 50T=S1*S2/S3. Здесь S1=∑xi≥6, S2=∑yi≥12, S3=∑zi≥-4. Вычисление S1, S2 и S3 удобно организовать в виде подпрограммы-функции. Программа имеет вид: SUBprimer() Dim X() As Integer, Y() As Integer, Z() As Integer ReDim X(1 To 100),Y(1 To 80), Z(1 To 50) For I=1 To 100 X(I)=Cells(I,1) Next I For I=1 To 80 Y(I)=Cells(I,2) Next I For I=1 To 50 Z (I)=Cells(I,3) Next I T%=SUM(X,6)*SUM(Y,12)/SUM(Z,-4) Cells(1,6)=T End SUB FUNCTION SUM(A(), K As Integer) As Integer Dim J As Byte SUM=0 For J=1 To Ubound(A) If A(I)>=K Then SUM=SUM+A(I) NextJ EndFUNCTION В VBA параметрами подпрограмм могут быть подпрограммы. В этом случае их значения передаются по значению. Sub l() Dim x As Byte, y As Byte, z As Byte x = 7 y = 3 call Assis (f(x), y, z) Cells(1, 1) = z End Sub Public FUNCTION f(ByVal a As Byte) As Byte f = 2 * a End FUNCTION Sub Assis (ByVal d As Byte, ByVal q As Byte, v As Byte) v = d + q End Sub Подпрограмма-процедура имеет следующую структуру: SUB Имя(P1 As T1, P2 As T2,…) Раздел описаний локальных параметров Раздел операторов EndSUB При этом в заголовке подпрограммы перечисляются как входные, так и выходные формальные параметры. Обращение к подпрограмме-процедуре может выполняться двумя способами: – Call Имя(Q1,Q2,QN…) – Имя Q1,Q2,QN… При использовании подпрограммы-процедуры возможны следующие варианты: подпрограмма имеет входные и выходные параметры, только входные, только выходные и отсутствие параметров вообще. Второй случай обычно используется для работы с объектами OFFICE или при построении графических изображений. В третьем случае фактически входными параметрами обычно являются текущая дата или текущее время, а в последнем случае подпрограмма выполняет какую-либо фиксированную последовательность действий. Пример: в матрице А(10,10) разделить aij>6 на сумму элементов 5-й строки, в матрице В(10,10) разделить bij>7 на сумму элементов 8-й строки, в матрице С(10,10) разделить cij>-4 на сумму элементов 4-й строки. В этой задаче входными параметрами являются: матрица, которая подвергается преобразованиям, число, с которым сравниваются элементы, номер суммируемой строки, а выходным параметром – преобразованная матрица. Если преобразованная матрица записывается на место исходной, то матрица в качестве параметра указывается однократно. Программа имеет следующий вид: SUBprimer() Dim A() As Single, B() As Single, C() As Single REDIM A(1 To 10,1 To 10), B(1 To 10,1 To 10), C(1 To 10,1 To 10) ВводматрицА, B, C Call MATR(A, 6, 5) Call MATR(B, 7, 8) Call MATR(C, -4, 4) Вывод преобразованных матриц A,B,C End SUB SUB MATR(M() As Single, K As Integer, N As Byte) Dim I1 As Byte, J1 As Byte, S As Integer S=0 For J1=1 To 10 S=S+M(N, J1) Next J1 For I1=1 To 10 For J1=1 To 10 If M(I1, J1)>K THEN M(I1,J1)=M(I1,J1)/S Next J1 Next I1 End SUB ЛАБОРАТОРНЫЙ ПРАКТИКУМ ЛАБОРАТОРНАЯ РАБОТА № 1. «Программирование ввода/вывода и способы описания переменных в VBA» Цель работы: приобретение практических навыков по разработке, отладке и тестированию программ, реализующих линейные алгоритмы, в том числе с использованием математических функций; изучение способов описания переменных, определения типов данных; приобретение умений использования простейшего ввода-вывода и работы с объектами-ячейками. Задания: В соответствии с вариантом описать переменные в первой строке таблицы явным способом и ввести их значения с помощью оператора присваивания. Описать переменные во второй строке таблицы с помощью суффиксов. Ввести их значения с помощью оператора присваивания. Описать переменные третьей строки с помощью префиксов. Ввести их значения в ячейки А1, B1 и C1 соответственно. Считать значения переменных из ячеек. Вычислить переменные в четвертой строке таблицы согласно формулам, не указывая тип. Записать результаты в ячейки F2 и G2 соответственно. С помощью функции определения типа определить тип переменных из второй и третьей строк таблицы. Результаты записать в ячейки A3-C3 соответственно и в ячейки A5-C5 соответственно. Определить тип переменных, вычисленных по формулам. Результаты записать в ячейки F3 и G3 соответственно. Установить цвета ячеек A1-C1, A3-C3, A5-C5 соответственно пятой строке таблицы. В ячейках F3 и G3 для шрифта установить 14 кегль Times New Roman любого цвета.
Пример выполнения задания Условие: 1. Описать переменные в явном виде a= 9, n= 789, v= 13,6789. 2. Описать переменные с помощью суффиксов b= 12, k= - 6, d= 67889. 3. Описать переменные с помощью префиксов W= 90, X= 365, C= 6,00067. 4. Вычислить переменные Z и P по формулам: 5. Задать в ячейках А1-С1 голубой цвет, А3-С3 – желтый, А5-С5 – пурпурный. В ячейках F1-G3 для шрифта установить 14 кегль Times New Roman любого цвета. Программный код: Subprimer1() Dim a As Byte, n As Integer, v As Single b%=12: k%=-6 :d!=67889 ‘ByteW=90: intX=65: sngC=6.00067 z=(sqr(a+n)+log10(v))/(sin(b)^2) p=log(W/X+d^(1/6)+C) Cells(3,1)=vartype(b) Cells(3,2)=vartype(k) Cells(3,3)=vartype(d) ByteW=Cells(1,1) intX=Cells(1,2) sngC=Cells(1,3) Cells(5,1)=vartype(ByteW) Cells(5,2)=vartype(intX) Cells(5,3)=vartype(sngC) Cells(1,”F”)=”z” Cells(2,”F”)=Format(z,”###. ٮ###”) Cells(3,”F”)=vartype(z) Cells(1,”G”)=”p” Cells(2,”G”)=Format(p,”###. ٮ###”) Cells(3,”G”)=vartype(p) ActiveSheet.Range("A1:C1").Cells.Interior.ColorIndex = 8 ActiveSheet.Range("A3:C3").Cells.Interior.ColorIndex = 6 ActiveSheet.Range("A5:C5").Cells.Interior.ColorIndex = 7 ActiveSheet.Range("F1:G3").Cells.Font.Size = 14 ActiveSheet.Range("F1:G3").Cells.Font.Name = "Times New Roman" ActiveSheet.Range("F1:G3").Cells.Font.Color = 700 EndSUB |