Шрифт:
Интервал:
Закладка:
Напишем для примера примитивный алгоритм, позволяющий имитировать вежливое общение компьютера с человеком при включении компьютера:
Покажи на мониторе текст "Здравствуйте, я — компьютер, а вас как зовут?"
Жди ответа с клавиатуры.
Если на клавиатуре человек набрал "Петя" или "Вася", то покажи на мониторе текст "Рад встретиться со старым другом!", иначе покажи на мониторе текст "Рад познакомиться!"
Покажи на мониторе текст "Чем сегодня будем заниматься — программировать или играть?"
Жди ответа с клавиатуры.
Если……………………
Выбор называют ветвлением по аналогии с разветвляющимся деревом (когда мы забираемся на дерево, мы время от времени делаем выбор, по какой из нескольких веток забираться дальше).
Идею разветвления в программе я изложил. Как видите, команды ветвления довольно просты. Как же с помощью таких простых команд запрограммировать сложное поведение компьютера? Ответ вы найдете в материале этой главы. Добавлю только, что вся мыслительная деятельность во всех программах (в том числе и той, что выиграла в шахматы у Каспарова) осуществляется при помощи сложного набора таких вот простых команд ветвления (выбора).
Условный оператор If или как компьютер делает выбор
Теперь посмотрим, как писать разветвляющиеся программы на Visual Basic. Выучим сначала три английских слова:
If читается "иф" переводится "если"
Then читается "зэн" переводится "то"
Else читается "элз" переводится "иначе"
Теперь приведем пример записи нового для вас оператора:
If а=28 Then Print f Else k=44
Переводится он так:
ЕСЛИ а=28 ТО печатай f ИНАЧЕ присвой переменной к значение 44.
Другими словами, мы предлагаем компьютеру сначала подумать, правда ли, что а=28, и если правда, то выполнить оператор Print f, в противном случае выполнить оператор к=44. Таким образом, мы с вами впервые написали оператор,
при выполнении которого компьютер не просто выполняет, что приказано, а сначала думает и делает выбор (пока одного из двух).
Мы видим, что оператор If включает в себя другие операторы, которые выполняются или не выполняются в зависимости от какого-то условия. Тем не менее, вся эта запись считается одним оператором If. Чтобы привыкнуть к оператору If, рассмотрим пару задач.
Задача 1. Компьютер должен перемножить два числа — 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 у
End Sub
Пояснение: В процедуре 5 операторов, последний — Debug.Print у. Поскольку эти 5 операторов выполняются по порядку, то он выполнится обязательно.
Обязательно выполните эту программу в пошаговом режиме. Обратите внимание, что подсветка после If у > 20000 Then перескакивает на Debug.Print "ПРОИЗВЕДЕНИЕ БОЛЬШОЕ", а затем на Debug.Print у.
Теперь замените в программе а = 167 на а = 1 и снова выполните программу в пошаговом режиме. Обратите внимание, что теперь подсветка после If у > 20000 Then перескакивает на Debug.Print "ПРОИЗВЕДЕНИЕ МАЛЕНЬКОЕ", а затем уже на Debug.Print у.
Задача 2. В компьютер вводятся два произвольных положительных числа — длины сторон двух кубиков. Компьютер должен подсчитать объем одного кубика — большего по размеру.
Обозначим а1 — сторону одного кубика, а2 — сторону другого, bo1 — сторону большего кубика, V — объем кубика. Приведем три варианта программы:
ВАРИАНТ 1
Dim a1 As Double
Dim a2 As Double
Private Sub Command1 Click()
a1 = InputBox("Введите сторону одного кубика")
а2 = InputBox("Введите сторону другого кубика")
If a1 > а2 Then Debug. Print a1 * a1 * a1 Else Debug.Print a2 * a2 * a2
End Sub
ВАРИАНТ 2
Dim a1 As Double
Dim a2 As Double
Dim V As Double
Private Sub Command1 Click()
a1 = InputBox("Введите сторону одного кубика")
а2 = InputBox("Введите сторону другого кубика")
If a1 > а2 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 bo1 As Double
Private Sub Command1 Click()
a1 = InputBox("Введите сторону одного кубика")
а2 = InputBox("Введите сторону другого кубика")
If a1 > а2 Then bo1 = a1 Else bo1 = a2 Debug.Print bo1 * bo1 * bo1
End Sub
Каждый из вариантов должен быть вами понят. Если возникают трудности, то используйте пошаговый режим и следите за значениями переменных. Для каждого варианта пошаговый режим используйте два раза — когда первый кубик больше и когда второй кубик больше. Как видите, одна задача может решаться разными программами.
Итак, если паровая машина избавила человека от тяжелого физического труда, то оператор if избавил человека от тяжелого умственного труда, в нашем случае — от необходимости решать, какое из двух чисел больше другого.
Оператор If можно записывать и без части Else. Например, If s<t Then w=a+1. Это означает, что если s<t, то нужно выполнить оператор w=a+l, в противном случае ничего не делать, а просто перейти к следующему оператору.
Для примера рассмотрим простейшую задачу: В компьютер вводится слово. Компьютер должен просто распечатать его. Однако, если введенным словом будет "колхозник", то компьютер должен напечатать вместо него слово "фермер".
Вот как будет выглядеть наша программа-"цензор":
Dim Slovo As String
Private Sub Command1_Click()
Slovo = InputBox("Введите слово")
If Slovo = "колхозник" Then Slovo = "фермер"
Debug.Print Slovo
End Sub
До сих пор мы после Then и после Else писали только по одному оператору. А если нужно больше?
Задача: Если а не равно 4, выполнить операторы Ь=3 и Print Ь, а в противном случае — операторы Ь=0, а=Ь+5 и с=0.
Вот оператор, решающий эту задачу:
If а <> 4