Шрифт:
Закладка:
Как видите, после Then и Else можно писать по нескольку операторов, разделенных двоеточиями.
Правила записи однострочного оператора If
Любой оператор Visual Basic нужно записывать по определенным грамматическим правилам, в противном случае Visual Basic выдает сообщение об ошибке. У каждого человеческого языка есть своя грамматика, включающая в себя правила, по которым должны выстраиваться в цепочку слова и другие элементы языка, чтобы получилось правильное предложение. Совокупность этих правил образует часть грамматики, называемую синтаксисом. В языках программирования тоже есть предложения. Такими предложениями здесь являются операторы. Очевидно, у языков программирования тоже должен быть свой синтаксис, который описывает правила, по которым записываются операторы языка и из операторов составляется программа. После того, как человек запускает программу на выполнение, любая порядочная среда программирования прежде, чем действительно выполнять ее, сначала проверит, нет ли в ней синтаксических ошибок, и если есть, то программу выполнять не будет, а выдаст сообщение, указывающее человеку, в чем ошибка. А Visual Basic проверяет программу еще на стадии ввода кода.
У Visual Basic есть две формы оператора If: однострочная и многострочная.
Пока мы пользовались только однострочным If и поэтому приведем правило записи только для него. Приведем это правило в виде синтаксической схемы:
If условие Then операторы Else операторы
Как понимать эту схему? Ее следует понимать, как образец, шаблон записи оператора, указывающий порядок, в котором оператор записывается из отдельных слов. Слова, которые в схеме я записал жирными буквами, при записи оператора просто копируются. Вместо слов, которые в схеме записаны курсивом, нужно при записи оператора подставить то, что они означают. Поясним, что обозначают эти слова.
операторы ∙ любой оператор Visual Basic или группа операторов, разделенных двоеточиями
условие ∙ пока под условием будем понимать два арифметических или строковых выражения, соединенных знаком сравнения
знак сравнения ∙ знаков сравнения шесть: > больше; >= больше или равно; = равно; < меньше; <= меньше или равно; <> не равно
Пример:
If 5*а+4 <= a*b Then Print b Else a=b+5
Здесь
Print b — один оператор,
a=b+5 — другой оператор,
5*a+4 <= a*b — условие,
5*a+4 — одно выражение,
a*b — другое выражение,
<= — знак сравнения.
Вы уже видели, что однострочный оператор If можно записывать в краткой форме. Вот синтаксическая схема для этой формы:
If условие Then операторы
Таким образом, это уже вторая синтаксическая схема, касающаяся одного оператора. Удобно же весь синтаксис оператора иметь перед глазами в одной схеме. Соединим две схемы в одну. Вот эта схема:
Синтаксическая схема однострочного оператора If:
If условие Then операторы [Else операторы]
Квадратные скобки здесь означают, что их содержимое можно писать, а можно и не писать в операторе.
Полезное замечание: Вычисляя выражения, стоящие в условии оператора If, Visual Basic не записывает их значения в память. Например, после выполнения фрагмента — b=6: If b+1>0 Then s=20 — в ячейке Ь будет храниться 6, а не 7. То же относится и к выражениям из оператора Print. Например: Ь=6: Print Ь+1. И здесь тоже в ячейке Ь останется храниться 6, а не 7. И вообще, информация в ячейках памяти не меняется при вычислении выражений без присвоения.
Примеры работы оператора If:
Задания 15–17: Определить без компьютера, что будет напечатано при выполнении следующих фрагментов программ:
k=20: k=k+10: If k+10<>30 Then k=8 Else k=k-1
Print k
k=20: k=k+10: If k+10 = 30 Then k=8 Else k=k-1
Print k
р=1: If р>0 Then р=р+5
If р>6 Then р=р+1
Print р
Задания 18–20: В компьютер вводятся два числа. Если первое больше второго, то напечатать их сумму, иначе — произведение. После этого компьютер должен напечатать текст ЗАДАЧА РЕШЕНА.
В компьютер вводятся длины трех отрезков. Компьютер должен ответить на вопрос, правда ли, что первый отрезок достаточно мал, чтобы образовать с другими двумя отрезками треугольник.
Указание: Для этого его длина должна быть меньше суммы длин двух других отрезков.
Замечание: Пока не думайте о том, что слишком длинными могут быть второй или третий отрезки.
Дракон каждый год отращивает по три головы, но после того, как ему исполнится 100 лет — только по две. Сколько голов и глаз у дракона, которому N лет?
Если в выражения, входящие в условие оператора If, включить свойства объектов, то вы можете заставить компьютер работать с ними. Например, компьютеру нужно определить, правда ли, что форма красная. Делает это такая программа:
Private Sub Command1_Click()
If Form1.BackColor = vbRed Then MsgBox ("Правда") Else MsgBox ("Неправда")
End Sub
Задание 21: Если кнопка на форме слишком высоко, пусть при нажатии на нее она будет пониже на 200 твипов.
Случайные величины
Без случайных величин компьютер всегда бы, как робот, на одинаковые действия человека реагировал одинаково. Но тогда невозможны игры.
Запустите такую программу:
Private Sub Command1_Click()
р = Rnd Debug.Print p
End Sub
Вот результат: 0,7055475. Это случайное число из диапазона от 0 до 1. Вырабатывает это число функция Rnd.
Щелкнем несколько раз по кнопке. Получим серию случайных чисел:
0,7055475
0,533424
0,5795186
0,2895625
0,301948
Завершим работу программы и снова запустим. Получаем ту же серию:
0,7055475
0,533424
0,5795186
0,2895625
0,301948
Выходит, что числа хоть и случайные, но после каждого запуска одинаковые. Не очень-то, получается, случайные. Как сделать их разными от запуска к запуску? Добавим оператор Randomize:
Private Sub Command1_Click()
Randomize
p = Rnd
Debug.Print p
End Sub
Теперь числа и случайные и разные от запуска к запуску.
Как получить случайное число из диапазона от 0 до 20? Так — р = 20 * Rnd.
А из диапазона от 6 до 7? Так — р = 6 + Rnd. А из диапазона от 200 до 210? Так — р = 200 + 10 * Rnd.
Как получить случайное целое число из диапазона от 200 до 210? Так — р = Int(200 + 11 * Rnd). Подумайте, почему я написал 11, а не 10. Если не можете додуматься, запустите такой проект:
Private Sub Command1_Click()
t = 200 + 11 * Rnd
p =