Выбор (ветвление) в Visual Basic осуществляют в основном 3 оператора:  

•   однострочный If;

•   многострочный If;

•   оператор выбора Select Case.

Их применению в программировании на Visual Basic и посвящена эта глава.

 

 

Что такое выбор (ветвление)

 

У начинающего программиста интерес должен вызывать такой вопрос: как компьютер думает, как он принимает решения, как он выбирает, какое действие из нескольких возможных нужно выполнить в данный момент? Ведь пока компьютер выполнял все, что ему приказывали, не рассуждая.

Возьмем игру в воздушный бой. Предположим, самолет на экране летит на автопилоте. Это значит, что он должен самостоятельно удерживать высоту полета между 3000 и 3200 м. Для этого ему достаточно периодически определять высоту и, если она меньше 3000, лететь вверх, а если больше 3200 - вниз. Естественно, этот выбор делает программа для игры в воздушный бой, сам по себе компьютер ничего выбрать не может. В программе заранее пишутся процедуры для полета вверх и для полета вниз, а выбор между ними делает специальная команда (оператор) выбора, имеющаяся в каждом языке программирования. Вот алгоритм выбора между полетом вверх и вниз:

 

1.  Определи высоту.

2.  Если высота < 3000, то выполняй процедуру ВВЕРХ.

3.  Если высота > 3200, то выполняй процедуру ВНИЗ.

4.  Продолжай полет.

 

Здесь команды 2, 3 - команды выбора. В общем случае команда выбора содержит условие, от которого зависит, будет ли выполнятся какая-нибудь команда или группа команд. Это условие быть самым разным: нажата или нет любая клавиша, нажата или конкретная клавиша, был ли щелчок мышью над таким-то объект больше ли одно число другого, правда ли, что с клавиатуры введено такое-то слово, и т. д. В нашем случае условие - это высота < 3000 высота > 3200.

Все языки программирования имеют специальные операторы для того, чтобы программа могла разветвляться и, в зависимости от того, выполняется заданное условие или нет, работать по-разному. Такой оператор, вызывающий ветвление программы, называется условным оператором.

Главная часть условного оператора – это условие. Условие – это логическое выражение со значением True (Да) или False (Нет). Условие истинно, если его значение – True (Да), и ложно в противном случае.

В условие входят два выражения, соединенных знаком равенства или неравенства. Всего таких знаков шесть. Они приведены в таблице.

 

<

Меньше

>

Больше

=

Равно

<>

Не равно

<=

Меньше или равно

>=

Больше или равно

 

Как видите, некоторые знаки записываются двумя символами, но они все равно считаются единым целым.

Смысл этих знаков не совсем тот, что в математике. Если в учебнике математики написано x < 5, обычно имеется ввиду, что значения переменной х должны быть меньше пяти.

Если в языке Visual Basic написано х < 5, то надо помнить, что х – это переменная (адрес), в которой уже хранится какое-то значение. Мы не утверждаем, что оно меньше пяти, а только проверяем этот факт. Если значение действительно меньше 5, то все выражение получает значение True (Да), в противном случае – значение False (Нет).

 

ПОЛЕЗНЫЕ СОВЕТЫ:

В математике мы требуем выполнения условия. В языках программирования, в том числе и в  Visual Basic, мы только проверяем, истинно оно или нет.

 

Условный оператор If, или

как компьютер делает выбор

 

Как писать разветвляющиеся программы Visual Basic.

Выучим сначала 3 английских слова:

Приведем пример записи нового для вас оператора

If а = 28 Then Print f Else  к = 44
Переводится он так:
Если а = 28 ТО печатай f ИНАЧЕ присвой переменной k значение 44.

 

Другими словами, мы предлагаем компьютеру сначала подумать, правда ли, что а = 28, и если правда, то выполнить оператор Print f, в противном случае выполнить оператор k=44. Таким образом, мы с вами впервые написали оператор, при выполнении которого компьютер не просто выполняет, что приказано, а сначала думает и делает выбор.

Мы видим, что оператор If включает в себя другие операторы, которые выполняются или не выполняются в зависимости от какого-то условия. Тем не менее, вся эта запись считается одним оператором If. Чтобы привыкнуть к оператору If, рассмотрим пару задач.

Задача. Компьютер должен перемножить 2 числа - 167 и 121. Если их произведение превышает 2000, то компьютер должен напечатать текст ПРОИЗВЕДЕНИЕ БОЛЬШОЕ, иначе – текст  ПРОИЗВЕДЕНИЕ МАЛЕНЬКОЕ. После этого компьютер в любом случае должен напечатать само произведение.

 

Программный код:

Dim a As Integer

Dim b As Integer

Dim у As Integer

Private Sub Form_Load()

     a = 167

    b = 121

    y = a * b

   if y > 20000 Then Debug.Print "ПРОИЗВЕДЕНИЕ БОЛЬШОЕ"_

                       Else Debug.Print "ПРОИЗВЕДЕНИЕ МАЛЕНЬКОЕ"

Debug.Print y

End Sub

Теперь замените в программе а = 167 на  а = 1 и снова выполни программу.

 

Задача. В компьютер вводятся 2 произвольных положительных числа - длины сторон двух кубиков. Компьютер должен подсчитать объем одного кубика - большего по размеру.

Обозначим через а1 сторону одного кубика, а2 - сторону другого bol - сторону большего кубика, V - объем кубика. Приведем 3 варианта программы:

 

ВАРИАНТ 1

Dim a1 As Double

Dim a2 As Double

Private Sub Command1_Click()

       a1 = InputВох("Введите сторону одного куба")

       a1 = InputВох("Введите сторону другого куба")

       If a1 > a2 Then Debug.Print a1 * a1 Else Debug.Print a2 * a2

End Sub

ВАРИАНТ 2

Dim a1 As Double

Dim a2 As Double

Dim V As Double

Private Sub Command1_Click()

       a1 = InputВох("Введите сторону одного куба")

       a1 = InputВох("Введите сторону другого куба")

       If a1 > a2 Then V = a1 * a1 * a1 Else V = a2 * a2 * a2

       Debug.Print V

End Sub

ВАРИАНТ 3

Dim a1 As Double

Dim a2 As Double

Dim bol As Double

Dim V As Double

Private Sub Command1_Click()

       a1 = InputВох("Введите сторону одного куба")

       a1 = InputВох("Введите сторону другого куба")

       If a1 > a2 Then  bol = a1 Else bol = a2

       V = bol * bol * bol

       Debug.Print V

End Sub

 

Как видите, одна задача может решаться разными программами.

Оператор If можно записывать и без части Else. Например, If s<t Then w = a+1. Это означает, что если s<t, то нужно выполнить оператор w = a+1, в противном случае ничего не делать, а просто перейти к следующему оператору.

Для примера рассмотрим простейшую задачу. В компьютер вводится слово. Компьютер должен просто распечатать его. Однако если введенным словом будет "колхозник", то компьютер должен напечатать вместо него слово "фермер". Вот как будет выглядеть наша программа "цензор":

Dim Slovo As String

Private Sub Command1_Click()

    Slovo = InputВох ("Введите слово")

    If Slovo = "колхозник" Then Slovo = "фермер"

    Debug.Print Slovo

End Sub             

До сих пор мы после Then и после Else писали только по одному оператору. А если нужно больше?

 

Задача. Если а не равно 4, выполнить операторы b = 3 и Print b, а противном случае - операторы b = 0, a=b+5 и с=0.    Вот оператор, решающий эту задачу:       .  

If а < > 4 Then   b=3:    Print b Else b=0:   a=b+ 5:   c=0

Как видите, после Then и Else можно писать по несколько операторов разделенных двоеточиями.

В выражения, входящие в условие оператора If, можно включать свойства объектов. Например, компьютеру нужно определить, правда ли, что форма красная. Делает это такая программа:

Private Sub Command 1_Click()

    If Forml .BackColor = vbRed Then MsgBox ("Правда") Else    MsgBox ("Неправда")

End Sub

  

Самостоятельное задание 1.

 

В компьютер вводятся длина и ширина участка. Далее в компьютер вводятся длина и ширина дома. Если площадь дома больше площади участка, то компьютер должен написать текст ДОМ НЕ СТРОИМ в противном случае – ДОМ СТРОИМ.

 

Вот так должен выглядеть и работать Ваш проект Smeta.

 

Шпаргалка

 

Самостоятельное задание 2.

 

Компьютер спрашивает «На улице сегодня дождь или солнце?». Далее вводится слово. Если СОЛНЦЕ, то компьютер отвечает, СЕГОДНЯ ИДЕМ ГУЛЯТЬ, если ДОЖДЬ – СЕГОДНЯ ГУЛЯТЬ НЕ ИДЕМ.

 

А теперь, узнаем прогноз погоды Prognoz

 

Шпаргалка

 

 

Многострочный If

 

Вспомним недавнюю задачу: Если а не равно 4, выполнить операторы b=3 и Print b, а в противном случае - операторы b=0, а=b+5 с=0.

Вот однострочный оператор if, решающий эту задачу:

If a <> 4 Then b=3: Print b Else b=0:   a=b+5: c=0

Однако часто количество операторов после Then и Else бывает гораздо большим, да и сами эти операторы бывают гораздо более сложными и длинными. В этом случае строка становится неудобочитаемой, да и вообще не умещается на экране. Для таких случаев создан многострочный (блочный) оператор If. Вот как решается наша задача с его помощью:

If <>4 Then

    b-3

    Print b

Else

    b-0

    a=b+5

    c=0

End If

Конструкция End If означает просто, что в этом месте оператор If заканчивается.

Часть Else может и отсутствовать. Например,

If a <> 4 Then

    b=3

    Print b

End If

Самое замечательное в блочном If то, что здесь можно одно за другим проверять несколько условий. Проиллюстрирую на примере.

Задача. В компьютер вводится целое число а.

В любом случае после всего этого компьютер должен сказать Дo свидания.

 

Вот программа:       

 

Private Sub Command1_Click()

    а = InputВох ("Введите число")

    If a<0Then         

        MsgBox ("Число отрицательное")

    Elself a=0 Then

        MsgBox ("Вы ввели 0")

    Elself a>100Then

        MsgBox ("Число большое")

    Else

        Print a^2

    End If

        MsgBox ("До свидания")

End Sub

 

Else lf переводят так: "иначе если". Получается вот что: Если а<0, то... иначе если а = 0, то... иначе если а > 100, то...

Блочный If выполняется так. Сначала проверяется первое условие (а < 0). Если оно не выполняется, то Visual Basic переходит к проверке второго условия (а = 0), и т. д. Наткнувшись, наконец, на условие которое выполняется, Visual Basic выполняет операторы, стоящи после его Then, и на этом заканчивает работу, даже если ниже ест условия, которые тоже выполняются. Если не выполняется ни один из условий, Visual Basic выполняет операторы, стоящие за Else.

 

Самостоятельное задание 3.

 

Компьютер спрашивает пользователя, как его зовут, а затем приветствует его в соответствии с именем: Колю – Привет, Васю – Здорово, Джона – Hi, а остальных – Здравствуйте. Для Васи, кроме того, он красит форму в зеленый цвет.

 

Privet

 

Шпаргалка

 

Самостоятельное задание 4.

 

Видоизменить диалог с компьютером. Пусть компьютер, узнав возраст человека, дальнейшую беседу ведет по двум вариантам. Если возраст больше 17, то компьютер должен задать вопрос: В каком институте ты учишься? и, получив ответ глубокомысленно заметить: Хороший институт. Если же возраст меньше или равен 17, то спросить – В какой школе ты учишься? и Неплохая школа. После этого, каков бы ни был вариант, компьютер должен попрощаться: До следующей встречи!

 

Dialog1

 

Шпаргалка