Печатать книгуПечатать книгу

Лабораторная работа. Основы работы в VBA. Алгоритмическая структура - ветвление

Рассмотрены принципы построения разветвляющихся программ в редакторе Visual Basic for Application (VBA) для Excel. На примерах показываются основные приемы программирования.


Сайт: Электронный университет КГЭУ - виртуальная образовательная среда
Курс: Информационные и компьютерные технологии (Бикеева Н.Г.)
Книга: Лабораторная работа. Основы работы в VBA. Алгоритмическая структура - ветвление
Напечатано:: Гость
Дата: Sunday, 30 June 2024, 16:02

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. Краткая форма оператора IfThen

 

         Полная форма записи (Если … То …. Иначе) содержит часть Else операторы 2.

 If логическое_выражение Then операторы 1 Else операторы 2

          – операторы 2 выполняется только тогда, когда логическое_выражение  ложно. Действие оператора If поясняется блок-схемой, приведенной на рис. 2.

 

Рис. 2. Полная линейная форма оператора IfThen

 Пример 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, наоборот, ставится пробел. Слова  IfElseIfElse и End If должны быть единственными в строке (другими словами, первый выполняемый оператор в каждом блоке должен начинаться со следующей новой строки). Последний блок операторов должен заканчиваться строкой End If.

         Любую программу можно составить с использованием только самой простой формы оператора If – краткой линейной формы. Все остальные формы используются только для удобства записи программы. Как было уже сказано, если проверяются одно или два условия, то имеет смысл использовать более простую линейную форму If…Then или If...ThenElse.

         Блочная форма оператора IfThen имеет несколько форм записи – они отличаются друг от друга наличием необязательных параметров (на приведенной выше общей форме записи они стоят в квадратных скобках). Минимальная блочная форма имеет вид:

     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. Минимальная блочная форма оператора IfThen

 Действие оператора If поясняется блок-схемой, приведенной на рис. 4.

  

Рис. 4. Максимальная блочная форма оператора IfThen

  Пример 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. Разработать программу вычисления интервальной функции с использование оператора IfThen, заданной графически на рисунке.

 

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, но он более понятен для того, кто пишет код, и того, кто читает этот код. Этот оператор более эффективен, чем оператор IfThenElse.

Ключевые слова 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. Разработать программу вычисления интервальной функции с использование оператора IFTHEN, заданной графически на рис. 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. Какие две формы записи имеет оператор IfThen?

3. Чем отличается блочный синтаксис оператора IfThen от линейного синтаксиса?

4. Поясните алгоритм работы блочной формы оператора  IfThen.

5. Поясните алгоритм работы линейной формы оператора  IfThen.

6. Как связываются между собой несколько условий в операторе IfThen.?

7. Перечислите логические функции и кратко охарактеризуйте каждую из них.

8. Для чего используется оператор Select Case?

9. Поясните работу оператора Select Case.

10. Как могут быть записаны сложные выражения в списке выражений оператора Select Case?

11. Как организовать ветвление с использование функции MsgBox?

12. В чем преимущество организации ветвления с помощью функции MsgBox?