Файл: Е. А. Рябухина, О. А. Гущина, Д. А. Губанов, Д. В. Емельянов.doc

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 01.12.2023

Просмотров: 595

Скачиваний: 5

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
Рис. 11. Блок-схема, соответствующая полной форме условного оператора с группировкой операторов, выполняемых при истинности и ложности условияДля конструкции, представленной на рис. 11 условный оператор в полной форме имеет общий вид:If Условие ThenОператор1Оператор2ОператорNElseОператорN+1ОператорN+2ОператорN+KEndIfПример: вычисление двух средних арифметических при отсутствии нулевых значений функцииIf F>0 ThenS1=S1+FK1=K1+1ElseS2=S2+FK2=K2+1EndIfРис. 12. Блок-схема, соответствующая полной форме условного оператора, в которой при ложности условия рассматриваются n-1 вложенный условный операторДля конструкции, представленной на рис. 12, используются два способа:1. Вложенный условный оператор:If Условие1 Then Оператор1ElseIf Условие2 Then Оператор2ElseEndIfEndIf2.If Условие1 THEN Оператор1If Условие2 THEN Оператор2If УсловиеNTHEN ОператорNВ последнем случае количество условных операторов в краткой форме соответствует количеству возможных вариантов, а условия должны быть взаимоисключающими.Пример:If X<0 Then Y=-2*XElseIf X<2 Then Y=X^2Else Y=4EndIfEndIfБолее удобной является следующая форма:If X<0 Then Y=-2*XIf X>=0 and X<=2 Then Y=X^2IfX>2 ThenY=4Для более сложных ветвлений можно использовать оператор Case, имеющий вид:Select Case Выражение-Case 1 Выражение1(блок_операторов)Case 2 Выражение2(блок_операторов)Case Else(блок_операторов)End SelectПример:Select Case X-Case 1 MsgBox(“золотая медаль”)Case 2 MsgBox(“серебряная медаль”)Case 3 MsgBox(“бронзовая
медаль”)Case ElseMsgBox(“без медали”)End Select15. Оператор безусловного переходаОператор безусловного перехода имеет вид:GoTo Mи изменяет порядок выполнения операторов в процедуре или функции, осуществляя переход к строке с меткой M.Оператор безусловного перехода должен быть последним оператором в строке, в противном случае все последующие операторы игнорируются.Метка представляет собой набор буквенно-цифровых символов и отделяется от основной части оператора знаком :.(двоеточие). Традиционно метка имеет вид целого числа. Соответственно оператор, имеющий метку должен быть первым оператором в строке.Следует отметить, что неоправданное применение оператора GoTo может значительно усложнить понимание программы.16. Организация циклов в VBAДля организации циклов в VBA используются несколько видов операторов цикла.Рис. 13. Пример блок-схемы цикла с заранее определенным числом повторенийДля цикла с заранее определенным числом повторений, соответствующего алгоритмической конструкции на рис. 13. Удобнее всего использовать оператор For-Next, имеющий вид:For V=A To B [Step H]Тело циклаNextVздесь V– имя циклически изменяющейся переменной, A – начальное значение, B – конечное, H – шаг. Знак [ ] означает необязательный параметр, т.е. при отсутствии значения H этот параметр предполагается равным 1.Пример: вывести на печать значения функции , при x изменяющемся от 2 до 8 с шагом 0,5.K=1For x=2 To 8 Step 0.5F=x^2+x+1CELLS(K,1)=FORMAT(F,”0.00”)K=K+1NextxЗдесь переменная K означает номер строки в столбце Microsoft Excel и обеспечивает вывод значений функции в виде столбца.Для организации циклов с неопределенным числом повторений, т.е. выход из которых осуществляется по выполнению некоторого условия, а не по достижению параметром цикла конечного значения, удобнее использовать следующие виды операторов цикла:

  1. Do While-Loop (вариант Do Loop While);

  2. Do Until Loop (вариант Do Loop Until);

  3. While-Wend.

Оператор цикла DoWhile-Loop имеет следующую конструкцию:DoWhile УсловиеТело цикла{ExitDo}LoopЗдесь знак { } означает необязательный параметр. При наличии оператора ExitDo происходит досрочный выход из цикла. Оператор действует следующим образом: сначала проверяется указанное условие, и в случае его выполнения выполняется тело цикла. Очевидно, что тело цикла должно включать оператор, задающий изменение параметра цикла. Как только условие перестает выполняться, происходит выход из цикла и переход к оператору, последующему за служебным словом Loop. Таким образом, возможна ситуация, что цикл не будет выполнен ни разу. Пример (см. задачу о концентрации раствора):T=0: M=1Do While C>=CKC=C0*EXP(-K*T)CELLS(M,1)=CM=M+1T=T+1LoopДанный вариант программы является неправильным, потому что переменная С, не определенная перед циклом, по умолчанию примет значение 0. Таким образом, условие сразу же будет нарушено, и цикл не будет выполнен ни разу. Для исправления ситуации присвоим переменной С до оператора цикла произвольное значение, заведомо большее чем СK, которое все равно будет изменено сразу же в цикле, но даст возможность выполнить цикл должным образом.Оператор цикла DoUntilLoop имеет следующую конструкцию:DoUntil УсловиеТело цикла{ExitDo}LoopОтличие его от предыдущего заключается в том, что цикл выполняется, наоборот, пока указанное условие ложно. Как только условие становится истинным, цикл завершается.Если же использовать варианты операторов цикла DoLoopWhile и DoLoopUntil, то цикл будет выполнен по крайней мере один раз, так как сначала выполняется тело цикла, а лишь затем проверяется условие. Таким образом, для нашей задачи более целесообразным будет использование конструкцийT=0: M=1Do C=C0*Exp(-K*T)CELLS(M,1)=CM=M+1T=T+1Loop While C>=CKИлиDo C=C0*EXP(-K*T)CELLS(M,1)=CM=M+1T=T+1LoopUntilC<CKДля работы с массивами можно использовать оператор цикла
For Each...NextЦикл For Each…Next не использует счетчик цикла. Цикл For Each…Next выполняется столько раз, сколько имеется элементов в определенной группе, например, в массиве.Оператор имеет вид:For Each Element As Type In GroupТело циклаNextElementЗдесь Element – переменная, используемая для итерации по всем элементам в определенной группе, Group – это объект коллекции или массив. Цикл For Each...Next всегда выполняется столько раз, сколько имеется элементов в определенной группе.Пример:Dim numbers() As Integer = {1, 4, 7}Dim letters() As String = {"a", "b", "c"}For Each number As Integer In numbersFor Each letter As String In lettersMsgBox(STR(number)& letter )NextNextВ результате получим набор текстовых констант “1a”,”1b”,…”7c”.17. Массивы в VBAМассивом называется набор данных одного типа, имеющий общее для всех его элементов имя. Каждый элемент в массиве имеет уникальный порядковый номер, или индекс. По умолчанию индекс имеет начальное значение 0, однако это значение можно изменить на 1.Чаще всего используются одномерные и двумерные массивы(матрицы), однако. VBA позволяет создавать массивы, имеющие до 60 измерений.Элемент одномерного массива обозначается V(k), двумерного – V(n,m). Здесь k– индекс элемента одномерного массива, n– номер строки, m– номер столбца, на пересечении которых находится элемент матрицы.Внимание! В двумерных массивах всегда первое число обозначает строку, а второе – столбец!Различают два вида массивов: статические и динамические. Разница заключается в том, что для статических массивов размерность определяется при первом же описании массива и в дальнейшем в программе не изменяется. Однако бывают ситуации, когда изначально неизвестно количество элементов в массиве, или же, в процессе работы это количество может изменяться. Такие массивы называются динамическими массивами.Динамический массив может увеличиваться или сжиматься, чтобы вмещать точно необходимое число элементов без напрасного расходования памяти.Описание одномерного статического массива можно выполнить различными способами:1. Dim V(n) As TypeЗдесь V – имя массива, Type – тип элементов, n– максимальное значение индекса, причем индексация начинается с 0, таким образом, массив содержит
n+1 элемент.2. Dim V(1 To n) As TypeВ данном случае индексация массива начинается с 1, т.е. массив содержит nэлементов.3. С помощью функции Array, определяющей сразу же значения элементов массива.V=Array(v0, v1,…vk)Здесь в скобках перечисляются значения элементов массива V. Следует отметить, что в этом случае индексация массива начинается с нуля, а сам массив имеет тип Variant.Пример:Dim A(7) As Byte, N(4,6) As singleВ данном примере описан одномерный массив А, размерность которого начинается с нуля, содержащий 8 чисел типа Byte, и вещественная матрица N, состоящая из пяти строк и семи столбцов, индексация элементов которой начинается с нуля.Если же пользователю удобно начинать индексацию с единицы, то описание примет вид:Dim V1(1 to N) As Type1, V2(1 to K, 1 to M) As type2,…Здесь V1 – имя одномерного массива,V2 – имя матрицы, Type1 – тип элементов массива, Type2 – тип элементов матрицы, N – количество элементов в массиве, K – количество строк матрицы, M – количество столбцов матрицы.Пример:Dim X(1 to 50) As Integer, D(1 to 10, 1 to 15) As singleВ приведенных выше примерах описаны статические массивы.Пример:A=Array(“A”,”B”,”C”)P=A(1)В результате получим P=”B.В VBA существует полезная функция Array, позволяющая формировать массив с заданными элементами; при этом индексация начинается с нуля.Пример:А=Array(1, 2, 3)В результате получим массив А, состоящий из трех элементов.Следует отметить, что при применении к переменной А в данном примере функцию Vartype, то получим значение 8204, являющееся суммой двух чисел – 8192, означающего тип данных массив, и 12, представляющее собой тип Variant.Для одномерных массивов используются функции Unound(V) и Lbound(V). Первая определяет максимальное значение индекса одномерного массива V, вторая – минимальное значение. Эти функции удобно использовать в подпрограммах, где в качестве параметров используются массивы различной длины.Двумерные статические массивы описываются аналогично первому и второму способам:

  1. DimV(3,5) As Integer – описывается матрица, состоящая из 4 строк и 6 столбцов, все элементы которой являются целочисленными, индексация начинается с 0.

  2. DimV(1 to 4, 1 to 6) As Integer – описывается матрица той же размерности, но индексация начинается с 1.