Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Сравнения
При проверке условий используются не только логические операторы, но и операторы сравнения. С их помощью можно узнать, равны ли числа или строки и в каком отношении они находятся друг к другу, принадлежат ли они интервалу допустимых значений и т. д. Сравнивать можно слова, имена, числа и вообще все, что вам захочется. Давайте посмотрим, как это делается.
Проверка условия «равно» Почти в каждом приложении требуется сравнить два выражения и узнать, совпадают ли их значения. В Visual Basic эта задача решается оператором =. Он встречался во многих примерах, приведенных ранее. Проверка равенства выполняется так:
If x = 3 Then MsgBox " Значение x равно 3" End If
Оцените красоту Visual Basic — программа получается очень похожей на простой английский текст. Данный фрагмент можно было бы сформулировать словами:
Если значение x равно 3, то вывести диалоговое окно.
Как правило, программисту приходится решать противоположную задачу и превращать слова в текст программы. К счастью, программа приносит больше пользы, чем простой текст на листке бумаги! Чтобы наглядно познакомиться с тем, как выполняется проверка даты, рассмотрим следующий пример. В нем мы проверяем дату и выводим соответствующее сообщение: 1. Создайте новый проект командой File > New Project. 2. В диалоговом окне New Project выберите значок Standard EXE. Нажмите кнопку ОК. 3. Задайте свойству Name формы Form1 значение frmMain, а свойству Caption — значение Выберите число. 4. Создайте на форме две кнопки. 5. Задайте свойству Name первой кнопки значение cmdGetSecretNumber, а свойству Caption — значение Загадать & число. 6. Задайте свойству Name второй кнопки значение cmdGuess, a свойству Caption — значение & Угадать. 7. Дважды щелкните на форме frmMain, чтобы открыть окно программы. 8. Вставьте следующий фрагмент в процедуру события Load формы frmMain:
Private Sub Form_Load() Загадать число SecretNumber = GetSecretNumber() End Sub
9. Вставьте следующую строку в секцию (General)(Declarations) формы frmMain:
Option Explicit Private SecretNumber As Integer
10. Перейдем к созданию функции GetSecretNumber(), которая является одним из важнейших компонентов приложения. Вставьте следующий фрагмент в секцию (General)(Declarations):
Private Function GetSecretNumber() As Integer ' Загадать число от 1 до 10 Randomize GetSecretNumber = Int(Rnd(1) * 10) + 1 End Function
11. Вставьте следующий фрагмент в процедуру события Click кнопки cmdGetSecret Number:
Private Sub cmdGetSecretNumber_Click() ' Загадать число SecretNumber = GetSecretNumber() End Sub
12. Наконец, вставьте следующий фрагмент в процедуру события Click кнопки cmdGuess:
Private Sub cmdGuess_Click() Dim guess As Integer Dim msg As String Dim cap As String
' Создать сообщение msg = " Введите число от 1 до 10" ' Получить число от пользователя guess = CInt(InputBox(msg))
'Число угадано верно? If guess = SecretNumber Then ' Да! Пользователь угадал! msg = " Вы угадали! " cap = " Верно! " ' Вывести сообщение MsgBox msg, vbExclamation, cap 'Закончить игру End Else ' Нет. Следующая попытка... msg = " Неверно." cap = " Попробуйте снова! " MsgBox msg, vbInformation, cap End If End Sub
Эта процедура — самая важная часть нашего примера. Знак = впервые встречает-ся в строке msg = " Введите число...", однако сравнение происходит лишь в строке If guess = SecretNumber Then. Мы проверяем, совпало ли введенное значение с загаданным числом. 13. Сохраните проект. Мы изменим его в нескольких ближайших примерах. 14. Запустите проект клавишей F5. Если нажать кнопку Загадать число, программа загадывает случайное число от 1 до 10. Нажмите другую кнопку и попробуйте угадать это число! При каждой попытке программа сообщает, было число названо верно или нет (рис.6.1).
Рис. 6.1. Игра с угадыванием числа
Проверка условия «больше» Для проверки условия «больше» в программировании, как и в алгебре, используется символ >. Рассмотрим следующий фрагмент:
if x > 3 Then MsgBox " x больше 3" End If
В своих программах вы можете проверить некоторую величину и узнать, больше ли она другой величины. Проверки такого рода обычно встречаются в случае, когда введенное пользователем значение должно принадлежать конкретному диапазону. Впрочем, все зависит от приложения. Откройте проект из предыдущего примера и выполните следующие действия: 1. Откройте окно программы, дважды щелкнув на форме frmMain. 2. Отредактируйте процедуру события Click кнопки cmdGuess и приведите ее к следующему виду:
Private Sub cmdGuess_Click() Dim guess As Integer Dim msg As String Dim cap As String
' Создать сообщение msg = " Введите число от 1 до 10"
'Получить число от пользователя guess = CInt(InputBox(msg))
' Число угадано верно? Select Case guess Case Is = SecretNumber ' Да! Пользователь угадал! msg = " Вы угадали! " cap = " Верно! "
'Вывести сообщение MsgBox msg, vbExclamation, cap
' Закончить игру End Case Is > SecretNumber ' Нет. Следующая попытка... msg = " Неверно. Загаданное число меньше." cap = " Попробуйте снова! "
MsgBox msg, vbInformation, cap. End Select End Sub
3. Сохраните и запустите проект. Попробуйте угадать число. Если введенное вами число будет больше загаданного, программа сообщит вам об этом (рис. 6.2).
Рис. 6.2. Названное число больше загаданного
Основные изменения в программе находятся в блоке, который начинается со строки Саsе Is > SесretNumber. Программа проверяет, что введенное число боль-ше SecretNumber. Если это условие не выполняется, следующий логичный шаг — убедиться в том, что введенное число меньше SecretNumber.
Проверка условия «меньше» Для проверки условия «меньше» используется символ <:
if x < 3 Then MsgBox " x меньше 3" End If
Этот оператор дополняет оператор «больше». Довольно часто они используются вместе и проверяют, что величина принадлежит некоторому диапазону. Далее мы продолжим работать с предыдущим примером. Откройте проект и выполните следующие действия: 1. Откройте окно программы, дважды щелкнув на форме frmMain. 2. Отредактируйте процедуру события Click кнопки cmdGuess и приведите ее к следующему виду:
Private Sub cmdGuess_Click() Dim guess As Integer Dim msg As String Dim cap As String
'Создать сообщение msg = " Введите число от 1 до 10" ' Получить число от пользователя guess = CInt(InputBox(msg))
' Число угадано верно? Select Case guess
Case Is = SecretNumber ' Да! Пользователь угадал! msg = " Вы угадали! " cap = " Верно! " ' Вывести сообщение MsgBox msg, vbExclamation, cap ' Закончить игру End Case Is > SecretNumber ' Нет. Следующая попытка... msg = " Неверно. Загаданное число меньше." cap = " Попробуйте снова! " MsgBox msg, vbInformation, cap Case Is < SecretNumber ' Нет. Следующая попытка... msg = " Неверно. Загаданное число больше." cap = " Попробуйте снова! " MsgBox msg, vbInformation, cap End Select End Sub
3. Сохраните и запустите проект. Попробуйте угадать число. Если введенное вами число будет меньше загаданного, программа сообщит вам об этом (рис. 6.3).
Рис. 6.3. Названное число меньше загаданного
Проверка условия «не равно» Если вы хотите убедиться в том, что одно значение отлично от другого, следует воспользоваться оператором < >:
if x < > 3 Then MsgBox " x не равно 3" End If
Этот оператор бывает особенно полезным в ситуациях, когда требуется проверить, что пользователь ввел значение. Чтобы понять, почему это так, запустите программу из предыдущего примера: 1. Нажмите кнопку Загадать число, чтобы сгенерировать случайное число от 1 до 10. 2. Нажмите кнопку Угадать. 3. В открывшемся окне ввода нажмите кнопку OK или Cancel Появляется сообщение об ошибке — несовпадение типов. Нажмите кнопку End, чтобы завершить работу программы. Не вдаваясь в подробности процесса отладки, скажу, что ошибка возникла в следующей строке:
guess = CInt(InputBox(msg))
Дело в том, что функция CInt() должна получать данные, преобразуемые в целое число. Если функция вызывается для пустой строки, выдается сообщение об ошибке. Чтобы предотвратить ошибку, перед проверкой следует убедиться в том, что пользователь ввел некоторое значение. Оператор < > идеально подходит для этой цели! Проверку можно выполнить следующей командой:
If rс < > " " Then
В переводе на человеческий язык это означает: «Если значение guess не равно пустой строке, то сделать что-то». 4. Отредактируйте процедуру события Click кнопки cmdGuess и приведите ее к следующему виду:
Private Sub cmdGuess__Click() Dim guess As Integer Dim msg As String Dim cap As String Dim rc As String
‘Создать сообщение msg = " Введите число от 1 до 10"
‘Получить число от пользователя rс = InputBox(msg)
‘Убедиться в том, что пользователь ввел значение... If rс < > " " Then ‘Преобразовать строку в целое число guess = CInt(rc) ' Число угадано верно? Select Case guess Case Is = SecretNumber ' Да! Пользователь угадал! msg = " Вы угадали! " cap = " Верно! " ' Вывести сообщение MsgBox msg, vbExclamation, cap ‘Закончить игру End Case Is > SecretNumber ' Нет. Следующая попытка... msg = " Неверно. Загаданное число меньше". cap = " Попробуйте снова! " MsgBox msg, vbInformation, cap Case Is < SecretNumber ' Нет. Следующая попытка... msg = " Неверно. Загаданное число больше". cap = " Попробуйте снова! " MsgBox msg, vbInformatidn, cap End Select Else msg = " Вы должны ввести число! " cap = " Введите число! " MsgBox msg, vbInformation, cap End If
End Sub
5. Сохраните и запустите проект
Проверка условия «больше или равно» Иногда приходится проверять, что некоторая величина больше другой или равна ей. Для этой цели используется оператор > =:
if x > = 3 Then MsgBox " x больше или равно 3" End If
Приведенный фрагмент чрезвычайно прост. Если значение x больше или равно 3, программа выводит окно сообщения. Вероятно, вы уже поняли, как пользоваться этим оператором. Предположим, вы пишете программу для управления пассажирским самолетом. Конечно, если пилот летит слишком быстро, его необходимо предупредить. Превышение скорости может привести к перегрузке и вызвать катастрофические повреждения самолета. Однако на самолете работает ваша (конечно же, превосходная!) программа; она проверяет скорость и убеждается в том, что пилот не превысил максимальную рекомендованную скорость. Выполните следующие действия: 1. Создайте новый проект командой File > New Project. 2. В диалоговом окне New Project выберите значок Standard EXE. Нажмите кнопку ОК. 3. Задайте свойству Name формы значение frmMain, а свойству Caption — значение Датчик скорости. 4. Создайте на форме вертикальную полосу прокрутки и задайте ее свойству Name значение vscThrottle. Расположите полосу в правой части формы и растяните ее на всю высоту формы. 5. Задайте свойству Мах полосы vscThrottle значение 100. 6. Создайте на форме frmMain надпись. Задайте ее свойству Name значение lbl Airspeed, а свойству Caption — значение Текущая скорость:. 7. Дважды щелкните на форме frmMain в конструкторе форм, чтобы открыть окно программы. 8. Вставьте следующий фрагмент в секцию (General)(Declarations) формы frmMain:
Option Explicit Private Throttle As Integer ' Текущее значение газа Private Const VNE = 427 'Предельная скорость
9. Инициализируйте значение газа в следующем фрагменте, который необходимо вставить в процедуру события Load формы frmMain:
Private Sub Form_Load() vscThrottle.Value = 100 End Sub
10. Вставьте следующий фрагмент в процедуру события Change элемента vsc Throttle:
Private Sub vsc_Throttle_Change() Dim ias As Integer ' Текущая скорость
' Расстояние до верхней позиции полосы прокрутки Throttle = 100 - vscThrottle.Value
'Вычислить текущую скорость по значению газа ias = Throttle * 4.5
'Обновить датчик скорости lblAirspeed.Caption = " Текущая скорость: " & Trim$(Str$(ias))
'Проверить текущую скорость и убедиться, что она не превышает предельной If ias > = VNE Then MsgBox " Уменьшить газ! ", vbCritical, " Превышение скорости" End If End Sub
Эту процедуру стоит рассмотреть подробнее. Первая часть, в которой мы вычисляем значение Throttle, необходима из-за того, что при нахождении бегунка в верхней позиции полосы прокрутки ее свойство Value по умолчанию равно 0. Максимальному газу на самолете, наоборот, соответствует верхнее положение рукоятки («от себя»). Наша программа имитирует самолетную рукоятку газа с помощью полосы прокрутки. Строка, в которой рассчитывается текущая скорость (ias), не слишком точна. Вычисление скорости настоящего самолета — задача сложная и выходящая далеко за рамки этой книги. Я воспользовался простейшей формулой, которая позволяет самолету разогнаться до 400 узлов. Предупреждение выводится в следующем фрагменте:
' Проверить текущую скорость и убедиться, ' что она не превышает предельной If ias > = VNE Then MsgBox " Уменьшить газ! ", vbCritical, " Превышение скорости" End If
Если текущая скорость превышает предельную или равна ей, программа выводит предупреждающее сообщение. 11. Сохраните и запустите проект. Перемещайте бегунок на полосе прокрутки и следите за тем, как растет текущая скорость. Когда она достигнет предельной, появляется предупреждение (рис. 6.5).
. 6.5. Превышение предельной скорости
Проверка условия «меньше или равно» Иногда требуется проверить, что некоторая величина меньше или равна (но не больше) другой величины. Для проверки этого условия применяется оператор < =. Следующий фрагмент показывает, как выполняются подобные проверки:
if x < = 3 Then MsgBox " x меньше или равно 3" End If
Мы воспользуемся новым оператором в новом варианте предыдущего примера. Если самолет летит слишком медленно, он может войти в штопор и упасть. Haш датчик скорости должен сообщать пилоту о том, что он летит слишком медленно. Продолжим работу над примером: 1. Откройте пример из предыдущего раздела, если он не был открыт ранее. 2. Вставьте следующую строку в секцию (General)(Declarations) формы frmMain:
Private Const VSTALL = 73 ' Минимальная скорость
3. Предположим, вы в данный момент летите и рукоятка газа установлена на 77 процентов. Отредактируйте процедуру события Form_Load и приведите ее к следующему виду:
Private Sub Form_Load() vscThrottle.Value = 23 vscThrottle_Change End Sub
Наконец, отредактируйте процедуру события Change элемента vscThrottle:
Private Sub vsc_Throttle_Change() Dim ias As Integer ' Текущая скорость ' Расстояние до верхней позиции полосы прокрутки Throttle = 100 - vscThrottle.Value
' Вычислить текущую скорость по значению газа ias = Throttle * 4.5
' Обновить датчик скорости lblAirspeed.Caption = " Текущая скорость: " & _ Trim$(Str$(ias))
' Проверить текущую скорость и убедиться, ' что она не превышает предельной If ias > = VNE Then MsgBox " Уменьшить газ! ", vbCritical, " Превышение скорости" End If
' Убедиться, что самолет не входит в штопор If ias < = VSTALLThen MsgBox " Увеличить газ! ", vbCritical, ' " Вход в штопор! " End If End Sub
5. Сохраните и запустите проект. Если уменьшить газ ниже порогового значения датчик скорости выдает предупреждение.
Итак, вы научились пользоваться различными операторами для принятия решений в программах. После знакомства с азами компьютерной логики мы переходим к следующей теме — как использовать эту логику для управления выполнением программы и как принимать простые решения в приложениях.
|