ПОНЯТНО О Visual Basic NET (том 2)

Разбираем оператор If на примерах


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

If

читается "иф"

переводится  "если"

Then



читается "зэн"

переводится  "то"

Else

читается "элз"

переводится  "иначе"

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

If             a=28      Then      Debug.WriteLine(f)            Else       k=44

Переводится он так:

ЕСЛИ     a=28        ТО           пиши  f                                   ИНАЧЕ   присвой k значение 44

Другими словами, мы предлагаем компьютеру прежде, чем что-то делать, сначала подумать, правда ли, что  a=28 , и если правда, то выполнить оператор Debug.WriteLine(f), в противном случае выполнить оператор k=44. Таким образом, мы с вами впервые написали оператор, при выполнении которого компьютер не просто выполняет, что приказано, а сначала думает и делает выбор (пока одного из двух).

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

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

Программа:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        Dim a, b, y As Integer

        a = 167

        b = 121

        y = a * b

        If y > 20000 Then Debug.WriteLine("ПРОИЗВЕДЕНИЕ  БОЛЬШОЕ")  _

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

        Debug.WriteLine(y)

End Sub

Пояснение: В процедуре 5 операторов, не считая оператора Dim, последний из них – Debug.WriteLine(y). Поскольку все 5 операторов выполняются по порядку, то он выполнится обязательно. Оператор If у нас – однострочный, пусть вас не вводит в заблуждение то, что он занимает физически две строки, ведь в конце первой из них я поставил знак переноса.


Обязательно выполните эту программу в пошаговом режиме. Обратите внимание, что подсветка после If y > 20000 Then перескакивает на Debug.WriteLine ("ПРОИЗВЕДЕНИЕ  БОЛЬШОЕ"), а затем на Debug.WriteLine(y).
Теперь замените в программе a = 167 на a = 1 и снова выполните программу в пошаговом режиме. Обратите внимание, что теперь подсветка после If y > 20000 Then перескакивает на Debug.WriteLine("ПРОИЗВЕДЕНИЕ МАЛЕНЬКОЕ"), а затем уже на Debug.WriteLine(y).
Задача 2. В компьютер вводятся два произвольных положительных числа – длины сторон двух кубиков. Компьютер должен подсчитать объем одного из них – того, что больше по размеру. 
Обозначим a1 - сторону одного кубика, a2 - сторону другого, bol - сторону большего кубика, V - объем кубика. Приведем три варианта программы:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim a1, a2 As Double
        a1 = InputBox("Введите сторону одного кубика")
        a2 = InputBox("Введите сторону другого кубика")
        If a1 > a2 Then Debug.WriteLine(a1 * a1 * a1) Else Debug.WriteLine(a2 * a2 * a2)
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Dim a1, a2, V As Double
        a1 = InputBox("Введите сторону одного кубика")
        a2 = InputBox("Введите сторону другого кубика")
        If a1 > a2 Then V = a1 ^ 3 Else V = a2 ^ 3
        Debug.WriteLine(V)
End Sub
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
        Dim a1, a2, bol As Double
        a1 = InputBox("Введите сторону одного кубика")
        a2 = InputBox("Введите сторону другого кубика")
        If a1 > a2 Then bol = a1 Else bol = a2
        Debug.WriteLine(bol ^ 3)
End Sub
Каждый из вариантов полезен и должен быть вами понят. Вы должны убедиться, что одна и та же задача может решаться разными программами. Если возникают трудности в понимании, то используйте пошаговый режим и следите за значениями переменных. Для каждого варианта пошаговый режим используйте два раза – когда больше первый кубик и когда больше второй кубик.


If без Else. Оператор If можно записывать и без части Else. Например, 
If  s<t  Then  w=a+1
Это означает, что если s<t, то нужно выполнить оператор w=a+1, в противном случае ничего не делать, а просто перейти к следующему оператору. Фрагмент
        a = 6
        If a > 5 Then a = a + 10
        Debug.WriteLine(a)
напечатает 16, а фрагмент
        a = 2
        If a > 5 Then a = a + 10
        Debug.WriteLine(a)
напечатает 2.
Еще один пример: Пусть в компьютер вводится слово. Компьютер должен просто распечатать его. Однако, если введенным словом будет «колхозник», то компьютер должен напечатать вместо него слово «фермер».
Вот как будет выглядеть наша программа-«цензор»:
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
        Dim Slovo As String
        Slovo = InputBox("Введите слово")
        If Slovo = "колхозник" Then Slovo = "фермер"
        Debug.WriteLine(Slovo)
End Sub
Несколько операторов после Then и Else. До сих пор мы после Then и после Else писали только по одному оператору. А если нужно больше?
Задача: Если a не равно 4, выполнить операторы b=3 и Debug.WriteLine(b), а в противном случае - операторы  b=0,  a=b+5  и  с=0.
Вот оператор, решающий эту задачу:
        If   a <> 4     Then    b = 3 : Button4.Width = 50      Else   b = 0  : a = b + 5  : c = 0
Как видите, после Then и Else можно писать по нескольку операторов, разделенных двоеточиями. Однако, чаще для этого применяют многострочный If.

Содержание раздела