ТОП 10:

Правила записи однострочного оператора If



Любой оператор Visual Basic нужно записывать по определенным грамматическим правилам, в противном случак Visual Basic выдает сообщение об ошибке. У каждого человеческого языка есть своя грамматика, включающая в себя правила, по которым должны выстраиваться в цепочку слова и другие элементы языка, чтобы получилось правильное предложение. Совокупность этих правил образует часть грамматики, называемую синтаксисом. В языках программирования тоже есть предложения. Такими предложениями здесь являются операторы. Очевидно, у языков программирования тоже должен быть свой синтаксис, который описывает правила, по которым записываются операторы языка и из операторов составляется программа. После того, как человек запускает программу на выполнение, любая порядочная среда программирования прежде, чем действительно выполнять ее, сначала проверит, нет ли в ней синтаксических ошибок, и если есть, то программу выполнять не будет, а выдаст сообщение, указывающее человеку, в чем ошибка. А Visual Basic проверяет программу еще на стадии ввода кода.

У Visual Basic есть две формы оператора If: однострочная и многострочная. Пока мы пользовались только однострочным If и поэтому приведем правило записи только для него. Приведем это правило в виде синтаксической схемы:

Ifусловие Thenоператоры Else операторы

Как понимать эту схему? Ее следует понимать, как образец, шаблон записи оператора, указывающий порядок, в котором оператор записывается из отдельных слов. Слова, которые в схеме я записал жирными буквами, при записи оператора просто копируются. Вместо слов, которые в схеме записаны курсивом, нужно при записи оператора подставить то, что они означают. Поясним, что обозначают эти слова.

операторы любой оператор Visual Basic или группа операторов, разделенных двоеточиями
условие пока под условием будем понимать два арифметических или строковых выражения, соединенных знаком сравнения
знак сравнения знаков сравнения шесть: >больше >=больше или равно =равно <меньше <=меньше или равно <>не равно

 

Пример: If5*a+4 <= a*b ThenPrint b Elsea=b+5

Здесь

Print b - один оператор,

a=b+5 - другой оператор,

5*a+4 <= a*b - условие,

5*a+4 - одно выражение,

a*b - другое выражение,

<= - знак сравнения.

 

В 5.2 вы уже видели, что однострочный оператор If можно записывать в краткой форме. Вот синтаксическая схема для этой формы:

IfусловиеThenоператоры

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

 

Синтаксическая схема однострочного оператора If:

If условие Then операторы [ Else операторы ]

Квадратные скобки здесь означают, что их содержимое можно писать, а можно и не писать в операторе.

Полезное замечание: Вычисляя выражения, стоящие в условии оператора If, Visual Basic не записывает их значения в память. Например, после выполнения фрагмента - b=6 : If b+1>0 Then s=20 - в ячейке b будет храниться 6, а не 7. То же относится и к выражениям из оператора Print. Например: b=6 : Print b+1 . И здесь тоже в ячейке b останется храниться 6, а не 7. И вообще, информация в ячейках памяти не меняется при вычислении выражений без присвоения.

Примеры работы оператора If:

ФРАГМЕНТ ПРОГРАММЫ ЧТО НА ЭКРАНЕ
a=10 If a>2 Then Print "!!!" Else Print "!" !!!
a=4 If a>5 Then a=a+10 Else a=a-1 Print a
s=6 If s-8<>0 Then s=s+10 Print s
s=6 If s<0 Then s=s+10 s=s+1 Print s

 

Задания 15-17:

Определить без компьютера, что будет напечатано при выполнении следующих фрагментов программ:

15.k=20: k=k+10: If k+10<>30 Then k=8 Elsek=k-1

Print k

16.k=20: k=k+10: If k+10 = 30 Thenk=8 Else k=k-1

Print k

17.p=1: If p>0 Then p=p+5

If p>6 Then p=p+1

Print p

Задания 18-20:

18.В компьютер вводятся два числа. Если первое больше второго, то напечатать их сумму, иначе - произведение. После этого компьютер должен напечатать текст ЗАДАЧА РЕШЕНА.

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

Указание: Для этого его длина должна быть меньше суммы длин двух других отрезков. Замечание: Пока не думайте о том, что слишком длинными могут быть второй или третий отрезки. Об этом – задание 26 из 5.7.

20.Дракон каждый год отращивает по три головы, но после того, как ему исполнится 100 лет - только по две. Сколько голов и глаз у дракона, которому N лет?

 

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

Private Sub Command1_Click()

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

End Sub

Задание 21: Если кнопка на форме слишком высоко, пусть при нажатии на нее она будет пониже на 200 твипов.

Случайные величины

Без случайных величин компьютер всегда бы, как робот, на одинаковые действия человека реагировал одинаково. Но тогда невозможны игры.

Запустите такую программу:

Private Sub Command1_Click()

p = 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? Так - p = 20 * Rnd. А из диапазона от 6 до 7? Так - p = 6 + Rnd. А из диапазона от 200 до 210? Так - p = 200 + 10 * Rnd.

Как получить случайное целое число из диапазона от 200 до 210? Так - p = Int(200 + 11 * Rnd). Подумайте, почему я написал 11, а не 10. Если не можете додуматься, запустите такой проект:

Private Sub Command1_Click()

t = 200 + 11 * Rnd

p = Int(t)

Debug.Print t, p

End Sub

Щелкайте по кнопке, наблюдая за значениями t и p, до тех пор, пока не поймете, в чем тут дело.

 

Задание 22: "Ловля кузнечика или измеритель шустрости". Создайте проект с большой формой и одной маленькой кнопкой. При нажатии на кнопку она должна прыгать в случайное место формы.

Щелкая по кнопке, старайтесь щелкать как можно чаще. Можете засечь, сколько раз вам удалось щелкнуть за 1 минуту. (В дальнейшем вы сможете научить компьютер, чтобы он сам засекал время и сам подсчитывал количество нажатий. Кстати, попробуйте опередить книгу и сами организуйте подсчет. В этом вам поможет оператор вида k=k+1.) Указание: Чтобы кнопка прыгнула в случайное место формы, вам достаточно задать случайные значения двум свойствам кнопки - Left и Top. При этом вы должны добиться, чтобы кнопка не "упрыгивала" с формы. Подсказка: Вам могла бы понадобиться такая, например, случайная величина - Form1.Width * Rnd. Только имейте в виду, что размеры формы больше размеров ее рабочего пространства на размеры заголовка и бордюров. Поэтому указанную формулу надо немного подкорректировать в сторону уменьшения.

Задание 23: "Угадай число или экстрасенс ли вы". Это ваша первая простейшая игра с компьютером. Компьютер загадывает число - 0 или 1. Ваше дело - отгадать. А дело компьютера - сказать "Угадал" или "Не угадал". Некоторые экстрасенсы утверждают, что благодаря сверхчувственному контакту с компьютером они могут из 100 раз угадать 80.

Программа готова? Настройтесь на контакт! Пуск!

Указание: Здесь вам нужно получить целое число из диапазона от 0 до 1. Получается оно по той же методе, что и целое число из диапазона от 200 до 210.

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

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

Ifa <> 4 Thenb=3 : Print b Else b=0 : a=b+5 : с=0

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

Ifa <> 4 Then

b=3

Print b

Else

b=0

a=b+5

с=0

End If

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

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

Ifa <> 4 Then

b=3

Print b

End If

 

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

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

· Если a<0, то компьютер должен сказать "Число отрицательно".

· Если a=0, то компьютер должен сказать "Вы ввели нуль".

· Если a>100, то компьютер должен сказать "Число большое".

· В остальных случаях компьютер ничего не должен говорить, а только вычислить и напечатать его квадрат.

 

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

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

Private Sub Command1_Click()

a = InputBox("Введите число")

If a < 0 Then

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

ElseIf a = 0 Then

MsgBox ("Вы ввели нуль")

ElseIf a > 100 Then

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

Else

Print a ^ 2

End If

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

End Sub

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

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

 

Вот синтаксис многострочного оператора If:

If условие Then

операторы

операторы

…………….

[ ElseIfусловие Then

операторы

операторы

……………. ]

……………………….….

[ Else

операторы

операторы

……………. ]

End If

Частей ElseIf может быть сколько угодно или совсем не быть. Часть Else, если она есть, то одна и стоит последней.

Имейте в виду, что у вас нет права, экономя место по вертикали экрана, объединять строки многострочного оператора If, например, так:

If условие Then операторы ElseIf операторы

и я вам не советую (а часто вы и не сможете) переносить слова Then, ElseIf и другие со своего законного места, например, так:

If условие

Then операторы

ElseIf операторы

 

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

 

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







Последнее изменение этой страницы: 2016-08-12; Нарушение авторского права страницы

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 34.205.93.2 (0.02 с.)