Лабораторная работа. Основы работы в VBA. Алгоритмическая структура - ветвление
Рассмотрены принципы построения разветвляющихся программ в редакторе Visual Basic for Application (VBA) для Excel. На примерах показываются основные приемы программирования.
Сайт: | Электронный университет КГЭУ - виртуальная образовательная среда |
Курс: | Информационные и компьютерные технологии (Бикеева Н.Г.) |
Книга: | Лабораторная работа. Основы работы в VBA. Алгоритмическая структура - ветвление |
Напечатано:: | Гость |
Дата: | Wednesday, 15 January 2025, 10:47 |
1. Оператор разветвляющейся структуры If … Then. Линейный синтаксис оператора If … Then
Цель работы
Данная лабораторная работа предназначена для изучения среды Visual BASIC for application (VBA), приобретения практических навыков разработки простейших разветвляющихся программ, овладения практическими навыками разработки и программирования разветвляющихся алгоритмов, приобретения навыков по отладке программ.
Базовая структура разветвление (называемая также ЕСЛИ-ТО-ИНАЧЕ) обеспечивает в зависимости от результата проверки условия (истина или ложь) выбор одного из альтернативных путей работы алгоритма. Каждый из путей ведет к общему выходу (продолжению алгоритма). Работа алгоритма продолжается независимо от того, какой путь будет выбран. Возможные пути выполнения алгоритма помечаются на схемах алгоритмов соответствующими метками: "да"/"нет" (или "1"/"0"). Алгоритм, в состав которого входит базовая структура разветвление, называется разветвляющимся алгоритмом, а реализуемый им вычислительный процесс – разветвляющимся вычислительным процессом.
If … Then … Else – управляющий оператор, осуществляющий условное ветвление операций, основанное на оценке логического выражения.
Выражение может быть истинным или ложным. Оператор имеет две формы
записи –линейную и блочную.
При линейном синтаксисе весь оператор записывается в одну строчку (перенос на новую строку не допускается).
If логическое _ выражение Then операторы 1 [Else операторы 2]
– логическое _ выражение – выражение, возвращающее не нулевое значение (истина) или ноль (ложь) (если логическое выражение состоит из нескольких составных частей, то они соединяются друг с другом посредством логических функций);
– операторы 1 – операторы, выполняющиеся при значении логического выражения "истина" (если операторов несколько штук, то один от другого отделяется двоеточием);
– операторы 2 – операторы, выполняющиеся при значении логического выражения "ложь" (если операторов несколько штук, то один от другого отделяется двоеточием). Выражение, стоящее в квадратных скобках является не обязательным параметром. Таким образом, можно выделить два вида записи линейной формы – краткую и полную.
Краткая форма записи (Если … То …. ) не содержит часть Else операторы 2.
If логическое_выражение Then оператор1
– логическое _ выражение – любое логическое выражение, допустимое в Бейсике;
– оператор1 – любой оператор (или группа операторов в одну строку через разделитель – двоеточие) Бейсика, который исполняется при выполнении условия, заданного логическим_выражением. Действие оператора If поясняется блок-схемой, приведенной на рис. 1.
Рис. 1. Краткая форма оператора If … Then
Полная форма записи (Если … То …. Иначе) содержит часть Else операторы 2.
If логическое_выражение Then операторы 1 Else операторы 2
– операторы 2 выполняется только тогда, когда логическое_выражение ложно. Действие оператора If поясняется блок-схемой, приведенной на рис. 2.
Рис. 2. Полная линейная форма оператора If…Then
Пример 1. Определение количества знаков в числе от 0 до 1000
Sub lineynaya_forma_If()
Dim x As Single
Dim y As Integer
m1: x = InputBox("Введите целое положительное число в интервале от 0 до 1000", "Запрос задачи")
'повтор ввода, если ввели не отвечающее требованиям число
If x < 0 Or x > 1000 Or x <> Int(x) Then GoTo m1
If x < 10 Then y = 1
If x < 100 Then y = 2
If x < 1000 Then y = 3
If x = 1000 Then y = 4
MsgBox "Число " & x & " имеет " & y & " знака", , "Решение задачи"
End Sub
2. Блочный синтаксис оператора If … Then
Эта форма применяется, когда необходимо выполнить несколько операторов или выполнить более сложный выбор в процедурах, выбирая между двумя, тремя или более ветвями. При этом исполняемые операторы записываются в несколько строк – блок. Блок должен заканчиваться оператором End If (конец блока If).
If логическое_выражение 1 Then
[блок_операторов_1]
[ElseIf логическое_выражение 2 Then
[блок_операторов_2]
…
[ElseIf логическое_выражение_N-1 Then
[блок_операторов_N-1
[Else
[блок_операторов_N] ]
End If
– логическое_выражение – выражение, возвращающее не нулевое значение (истина) или ноль (ложь);
– блок _ операторов – любое количество операторов.
При блочной форме проверяется сначала первое логическое выражение. Если оно ненулевое ("истина"), выполняются операторы блока, следующего за словом Then (блок_операторов_1). Если логическое выражение равно нулю ("ложь"), происходит переход к оценке условия, заданного в последующей строке ElseIf. При выполнении этого условия выполняются операторы данного блока (блок_операторов_2) и т.д. Если ни одно из условий ElseIf не выполняется (все "ложь"), то выполняются операторы блока Else (блок_операторов_N). Блоки Else и ElseIf могут быть опущены (тогда оператор If примет вид минимальной блочной формы). В блочную структуру If можно вставить любое количество условий ElseIf. Каждый из блоков может также содержать другую структуру с оператором If (так образуются вложенные блочные структуры If). Обратите внимание, слово ElseIf пишется слитно, а в слове End If, наоборот, ставится пробел. Слова If, ElseIf, Else и End If должны быть единственными в строке (другими словами, первый выполняемый оператор в каждом блоке должен начинаться со следующей новой строки). Последний блок операторов должен заканчиваться строкой End If.
Любую программу можно составить с использованием только самой простой формы оператора If – краткой линейной формы. Все остальные формы используются только для удобства записи программы. Как было уже сказано, если проверяются одно или два условия, то имеет смысл использовать более простую линейную форму If…Then или If...Then…Else.
Блочная форма оператора If … Then имеет несколько форм записи – они отличаются друг от друга наличием необязательных параметров (на приведенной выше общей форме записи они стоят в квадратных скобках). Минимальная блочная форма имеет вид:
If логическое_выражение Then
Оператор_1
Оператор_2
……………………………
Оператор_N
End If
Здесь Оператор_1, Оператор_2 и т.д. до N – последовательность операторов (блок), выполняющихся при выполнении логического_выражения. Количество операторов в блоке не ограничивается (главное, чтобы блок заканчивался ключевым словом End If). Действие оператора If поясняется блок-схемой, приведенной на рис. 3.
Максимальная блочная форма применяется, когда необходимо анализировать не одно или два условия, а целый ряд взаимосвязанных условий:
If логическое_выражение_1 Then
[блок_операторов_1]
ElseIf логическое_выражение_2 Then
[блок_операторов_2]
……………………………………………………………………………………………………
ElseIf логическое_выражение_N–1 Then
[блок_операторов_N–1]
Else
[блок_операторов_N]
End If
Рис. 3. Минимальная блочная форма оператора If…Then
Действие оператора If поясняется блок-схемой, приведенной на рис. 4.
Рис. 4. Максимальная блочная форма оператора If…Then
Пример 2. Определение количества знаков в числе от 0 до 1000.
Sub blochnaya_forma_If()
Dim x As Single
Dim y As Integer
m1: x = InputBox("Введите целое положительное число в интервале от 0 до 1000", "Запрос задачи")
If x < 0 Or x > 100 Or x <> Int(x) Then
'повтор ввода, если ввели не отвечающее требованиям число
MsgBox "Вы ввели не верное число", , "Повторите ввод"
GoTo m1:
ElseIf x < 10 Then
y = 1
ElseIf x < 100 Then
y = 2
ElseIf x < 1000 Then
y = 3
Else
y = 4
End If
MsgBox "Число " & x & " имеет " & y & " знак(а)", , "Решение задачи"
End Sub
3. Логические выражения, логические операции и операции отношения
Логическое выражение, стоящее после оператора If или ElseIf может быть истинным или ложным. В отличии от арифметических выражений логические выражения принимают не числовые значения, а логические значения – "TRUE" (истина) и "FALSE" (ложь).
В логических выражениях можно использовать следующие операции отношений: =, <, >, < =, > =, < > (равно, меньше, больше, меньше либо равно, больше либо равно, не равно).
В логическом выражении допустимы два или несколько условий (операций отношения), которые связываются логическими операциями And, Or, Not (И, ИЛИ, НЕ). Логические операции осуществляют манипуляции над битами. Они возвращают значение "Истина" (не нулевое) и "Ложь" (нулевое) значения. Описание логических операций приведено в таблице 1.
Таблица 1. Логические функции языка VBA
Операция | Название | Логическое выражение | Объяснение |
And | Логическое умножение (И) | А And B | Логическое выражение истинно, когда выполняются оба условия одновременно (истинно А и истинно В). |
Or | Логическое сложение (ИЛИ) | А Or В | Логическое выражение истинно, когда хотя бы одно из условий выполняется (истинно или А или В или оба условия одновременно). |
Not | Логическое отрицание (НЕ) | Not A | Логическое выражение истинно, когда условие A не выполняется (А ложно). |
Xor | Исключающее ИЛИ | А Xor В | Логическое выражение истинно, когда условия А и В не совпадают. |
Eqv | Эквивалент-ность | А Eqv В | Логическое выражение истинно, когда А и В одновременно истинны или одновременно ложны. |
Imp | Импликация | A Imp B | A IMP B принимает значение "ложь", если A истинно, а В ложно, и значение "истина" в других случаях. |
Пример 3. Разработать программу вычисления интервальной функции с использование оператора If…Then, заданной графически на рисунке.
Sub lomanaya_funktsiya()
Dim x As Single
Dim y As Integer
' вводим значение аргумента
x = InputBox("Введите значение аргумента функции х", "Запрос задачи")
' вычисляем значение функции
If (x >= 1 And x < 3) Or (x >= 5 And x < 7) Or (x >= 9 And x < 11) Then
y = 1
ElseIf (x >= 4 And x < 5) Or (x >= 11 And x < 12) Then
y = 2
ElseIf x >= 7 And x < 9 Then
y = -1
ElseIf x >= 3 And x < 4 Then
y = -2
Else
y = 0
End If
' выводим ответ
MsgBox "При x = " & x & " функция равна " & y, , "Ответ задачи"
End Sub
Пример 4. Определить, попадает ли точка с координатами х0, у0 под кривую функции у=sin x, заданную в интервале 0≤x≤.2π
Sub Primer()
Dim x0 As Single, x_radian As Double
Dim y0 As Double, y As Double
x0 = InputBox("Введите х координату точки от 0 до 360 градусов", "Запрос задачи на попадание")
If x0 < 0 Or x0 > 180 Then
x0 = InputBox("Вы ввели неверное число. Повторите ввод", "Повторный запрос")
End If
y0 = InputBox("Введите у координату точки", "Повторный запрос")
' перевод х из градусов в радианы
x = x0 * 4 * Atn(1) / 180
' вычисляем значение функции
y = Sin(x_radian)
If y > y0 Then
MsgBox "Точка лежит под кривой", , "Ответ"
ElseIf y = y0 Then
MsgBox "Точка лежит на кривой", , "Ответ"
ElseIf y < y0 Then
MsgBox "Точка лежит над кривой", , "Ответ"
End If
End Sub
4. Оператор Select … Case
VBA имеет условный оператор перехода для использования в случаях, когда необходимо выбирать из большого количества различных ветвей кода: оператор Select Case (с его помощью очень удобно реализовывать структуру множественного выбора). Он работает во многом так же, как множество независимых операторов If, но он более понятен для того, кто пишет код, и того, кто читает этот код. Этот оператор более эффективен, чем оператор If…Then…Else.
Ключевые слова Select Case используются со многими операторами Case, где каждый оператор Case проверяет появление другого условия и выполняется только одна из ветвей Case. Ветвь Case может содержать один, несколько или ни одного оператора VBA.
Select Case – управляющий оператор, выполняющий один из нескольких блоков операторов в зависимости от значения выражения.
Select Case Выражение_выбора
[ Case Список_выражений_1
[Блок_операторов_1]
[Case Список_выражений_2 ]
[Блок_операторов_2]]
……………………………………………………………………………
[Case Else
[Блок_операторов_N]]
End Select
– Выражение_выбора – любое числовое или символьное выражение;
– Список_выражений – каждый из списков представляет собой список логических выражений, отделенных запятыми; имеют тот же тип, что и выражение_выбора;
– Блок_операторов – содержит любое количество операторов VBA.
При выполнении оператора Select Case VBA сначала оценивает Выражение_выбора, а затем сравнивает результат этого выражения с каждым выражением, перечисленным в каждом Списке_выражений. Если значение, представленное с помощью Выражение_выбора совпадает с выражением в Списке_выражений для одного из Case, VBA выполняет Блок_операторов для этого предложения Case. Если значение Выражение_выбора совпадает более, чем с одним оператором Case, VBA выполняет только операторы в первом совпадающем предложении Case. Часто Выражение_выбора – это просто имя одной переменной, математическое или численное, а не логическое выражение. Выражения в Списке_выражений – это обычно логические выражения.
После завершения выполнения операторов в первом совпадающем операторе Case VBA продолжает выполнение кода с первого оператора после ключевых слов End Select, которые обозначают конец Select Case.
Если значение Выражение_выбора не совпадает ни с каким из Case, а необязательный Case Else присутствует, VBA выполняет операторы, представленные с помощью Блок_операторов_N перед переходом к оператору после Select Case. Блок операторов Case Else выполняется только в том случае, если Выражения_выбора не удовлетворяет ни одному из условий Case. Обычно используется для обработки нежелательных значений. Действие оператора Select Case поясняется блок-схемой, приведенной на рис. 5.
Рис 5. Блок-схема конструкции Select Case
Элементы Списка _ выражений должны иметь одну из следующих трех форм:
Выражение_1,Выражение_2, …, Выражение_N
Выражение Тo Выражение
Is Выражение с операцией
– Выражение_ – любое числовое, символьное или логическое выражение того же типа, что и выражение выбора;
– Выражение с операцией – выражение, содержащее любую из следующих операций: <, <=, >, >=, < >, =.
Если используется ключевое слово Тo для определения пределов выражения, то меньшее значение должно быть первым. Например, операторы блока Case -1 To -5 не выполняются, если Выражение _ выбора равно -4. Эта строка должна быть написана как Case -5 To -1.
Операции сравнения можно использовать только с ключевым словом Is, за исключением операции равенства. При отсутствии ключа Is в нужном месте интеллектуальный редактор вставит его.
Можно использовать несколько выражений или пределов в каждом условии Case. Например, Case 1 TO 4, 7 TO 9, 11, 13, Is > n %.
Пример 4. Программа, рассчитывающая скидку в зависимости от суммы покупки.
Sub skidka()
' Определение скидки (в %) в зависимости от
' количества продаваемого товара
Dim skidka As Integer
Dim summa As Single
summa = InputBox("Введите сумму покупки", "Расчет скидки", 0)
If summa > 0 Then
Select Case summa
Case Is > 1000
skidka = 10
Case Is > 500
skidka = 5
Case Else
skidka = 0
End Select
MsgBox "Скидка" & skidka & "%"
Else
MsgBox "Сумма покупки не указана"
End If
End Sub
5. Задания на выполнение лабораторной работы
1. Разработать программу для определения количества цифр в числе X от 0 до 100000.
2. Разработать программу вычисления интервальной функции с использование оператора IF…THEN, заданной графически на рис. 6.
Рис. 6
3. Треугольник задан сторонами А, В и С. Разработать программу, определяющую, является ли он равносторонним, равнобедренным или разносторонним.
4. Треугольник задан своими сторонами А, В и С. Определить, является ли он прямоугольным (использовать условие равенства квадрата гипотенузы сумме квадратов катетов).
5. Определить, попадает ли точка с координатами Х0, Y0 под кривую функции y = cos x , заданную в интервале 0 ≤ Х ≤ 2π .
6. Даны четыре числа A, B, C, D. Разработать программу определения максимального числа.
7. Квадратное уравнение задано коэффициентами a, b и c. Разработать программу для вычисления корней этого уравнения. В случае, если корней нет, выдать сообщение об этом на экран.
8. Дана точка M с координатами ХO, YO . Разработать программу для определения номера квадранта (четверти), в котором будет находиться точка.
Рис. 7
9. Дана точка с координатами Х0, Y0 . Разработать программу, определяющую,
попадает ли точка с координатами Х0, Y0 в квадрат, изображенный на рис. 8.
10. Определить, попадает ли точка с координатами Х0, Y0 в круг с радиусом, равным 2 (уравнение окружности r2 = х2 + y2).
Рис. 8
11. Составить программу нахождения значения Q при заданных произвольных значениях x, y, z.
Х>0 |
Х≤0 |
||||||
Y>0 |
Y≤0 |
Y>0 |
Y≤0 |
||||
Z>0 |
Z ≤0 |
Z>0 |
Z ≤0 |
Z>0 |
Z ≤0 |
Z>0 |
Z ≤0 |
Q=1 |
Q=2 |
Q=3 |
Q=4 |
Q=5 |
Q=6 |
Q=7 |
-Q=8 |
12. Даны три различных целых числа. Определить, какое из них (первое, второе или третье):
а) самое большое;
б) самое маленькое;
в)является средним (средним назовем число, которое больше наименьшего из данных чисел, но меньше наибольшего).
13. Определить максимальное и минимальное значения из трех различных вещественных чисел.
14. Составить программу нахождения суммы двух наибольших из трех различных чисел.
15. Составить программу нахождения произведения двух наименьших из трех различных чисел.
16. Даны две тройки вещественных чисел. В каждой тройке все числа различные. Найти среднее арифметическое средних чисел каждой тройки (средним назовем такое число в тройке, которое больше наименьшего из чисел данной тройки, но меньше наибольшего).
17. Составить программу, которая в зависимости от порядкового номера дня недели (1, 2, ..., 7) выводит на экран его название (понедельник, вторник, ..., воскресенье).
18. Составить программу, которая в зависимости от порядкового номера месяца (1, 2, ..., 12) выводит на экран его название (январь, февраль, ..., декабрь).
6. Контрольные вопросы
1. Поясните, как
работает структура разветвления.
2. Какие две формы записи имеет оператор If … Then?
3. Чем отличается блочный синтаксис оператора If … Then от линейного синтаксиса?
4. Поясните алгоритм работы блочной формы оператора If … Then.
5. Поясните алгоритм работы линейной формы оператора If … Then.
6. Как связываются между собой несколько условий в операторе If … Then.?
7. Перечислите логические функции и кратко охарактеризуйте каждую из них.
8. Для чего используется оператор Select Case?
9. Поясните работу оператора Select Case.
10. Как могут быть записаны сложные выражения в списке выражений оператора Select Case?
11. Как организовать ветвление с использование функции MsgBox?
12. В чем преимущество организации ветвления с помощью функции MsgBox?