Шрифт:
Интервал:
Закладка:
Сделано все это для удобства чтения программы, для того, чтобы глаз мог сразу же уловить структуру программы, а именно, из каких частей состоит как сама программа, так и каждый из элементов, ее составляющих. Впрочем, вам с первого взгляда может показаться, что такая запись, наоборот, неудобна для чтения. Однако, заметьте, что она принята во всем мире и глаза профессиональных программистов привыкли именно к ней. Настолько привыкли, что программа, записанная без соблюдения ступенчатого стиля, вызывает раздражение.
Конечно, допустимы и некоторые отклонения от ступенчатого стиля. Например, как я уже говорил, несколько коротких похожих операторов вполне можно записать в одну строку:
а=0: b=0: с=0: f=4
Этим мы экономим дефицитное место по вертикали экрана или листа бумаги.
Вложенные операторы If
Согласно синтаксической схеме оператора If, после Then и Else может стоять любой оператор Visual Basic, в том числе и If.
Решим задачу: В компьютер вводится число (пусть для конкретности это будет дальность какого-нибудь выстрела). Если оно находится в интервале от 28 до 30, то напечатать текст ПОПАЛ, иначе — НЕ ПОПАЛ.
Сначала составим алгоритм: Введи число. Если оно меньше 28, то печатай НЕ ПОПАЛ, в противном случае надо еще подумать. А о чем же думать? А вот о чем: Если число меньше 30, то печатай ПОПАЛ, иначе печатай НЕ ПОПАЛ.
А теперь по составленному алгоритму напишем программу:
Private Sub Command1_Click()
а = InputBox("Введите дальность выстрела")
If а < 28 Then
MsgBox ("НЕ ПОПАЛ")
Else
If а < 30 Then MsgBox ("ПОПАЛ") Else MsgBox ("HE ПОПАЛ")
End If
End Sub
Здесь оператор If a < 30 входит в состав оператора If а < 28. Говорят, что он вложен в него.
Эту же программу можно записать и без вложенного If:
Private Sub Command1_Click()
a = InputBox("Введите дальность выстрела")
If a < 28 Then
MsgBox ("HE ПОПАЛ")
Elself a < 30 Then
MsgBox ("ПОПАЛ")
Else
MsgBox ("HE ПОПАЛ")
End If
End Sub
Задание 26: В компьютер вводятся длины трех отрезков. Компьютер должен ответить на вопрос, правда ли, что эти отрезки могут образовать треугольник.
Указание: Для этого каждый отрезок должен быть меньше суммы длин двух других отрезков.
Логические операции
Применение вложенных If создает довольно громоздкую, трудную для понимания программу. Поэтому в Visual Basic есть возможность записывать многие программы короче и понятнее, используя вместо вложенных друг в друга If только один If. Для этого используются так называемые логические операции. Что это такое, разберем на примерах.
Задача "Разборчивая принцесса". В прихожей у принцессы — длинная очередь женихов. Принцессе нравятся только голубоглазые маленького роста. Устав принимать женихов и отбирать из них подходящих, принцесса вместо себя поставила компьютер, написав для него программу, которая говорит ВЫ МНЕ ПОДОЙДЕТЕ тем, у кого цвет глаз голубой и рост меньше 140 см. Остальным программа говорит ДО СВИДАНИЯ.
Вот эта программа:
Dim Tsvet As String 'Цвет
Dim Rost As Integer: 'Рост
Private Sub Command1_Click()
Tsvet = InputBox("Каков цвет ваших глаз?")
Rost = InputBox("Введите ваш рост в сантиметрах")
If Tsvet = "Голубой" And Rost < 140 Then Print "ВЫ МНЕ ПОДОЙДЕТЕ"
Else Print "ДО СВИДАНИЯ"
End Sub
Мы видим, что условие в операторе If уже не такое простое, как мы описывали раньше, а сложное, то есть состоящее из двух условий, соединенных знаком логической операции And (переводится "и"). Весь оператор If можно прочесть так — если цвет глаз голубой И рост меньше 140 сантиметров, то печатай ВЫ МНЕ ПОДОЙДЕТЕ, иначе печатай ДО СВИДАНИЯ.
Знак логической операции And, поставленный между двумя условиями, говорит о том, что должны выполняться сразу оба эти условия.
Поэтому наш оператор If ответит ДО СВИДАНИЯ и высоким голубоглазым, и высоким неголубоглазым, и маленьким неголубоглазым. И лишь маленьким голубоглазым он ответит ВЫ МНЕ ПОДОЙДЕТЕ. В общем, And — строгий знак.
Программа для задачи ПОПАЛ — НЕ ПОПАЛ при использовании логических операций Значительно упростится:
Private Sub Command1_Click()
а = InputBox("Введите дальность выстрела")
If а > 28 And а < 30 Then MsgBox ("ПОПАЛ") Else MsgBox ("НЕ ПОПАЛ")
End Sub
Задача "Неразборчивая принцесса". Неразборчивой принцессе нравятся все маленькие независимо от цвета глаз и все голубоглазые независимо от роста. Программа неразборчивой принцессы будет отличаться от программы разборчивой одним единственным знаком логической операции:
If Tsvet ="Голубой" Or Rost<140 'Если цвет голубой ИЛИ рост<140
Знак логической операции Or переводится "или".
Поставленный между двумя условиями, знак Or говорит о том, что достаточно, если будет выполняться хотя бы одно из них.
Поэтому теперь оператор If ответит ВЫ МНЕ ПОДОЙДЕТЕ и высоким голубоглазым и маленьким голубоглазым и маленьким неголубоглазым. И лишь высоким неголубоглазым он ответит ДО СВИДАНИЯ.
Знаками And и Or можно объединять сколько угодно условий. Например:
If а>2 Or x=b Or с<>1 Then k=99 Else k=33. Здесь выполнится оператор k=99, если верно хотя бы одно из трех условий, и лишь когда все три неверны, будет выполняться оператор к=33.
Кроме логических операций And и Or применяется еще логическая операция Not (переводится "НЕ"). Запись If Not a>b Then… переводится так — ЕСЛИ НЕПРАВДА, ЧТО а больше Ь, ТО…. Вот фрагмент:
а=2: b=3: If Not a>b Then k=1 Else k=0
Здесь выполнится оператор k=1, так как неправда, что 2>3.
Логические выражения
Выражения
а>Ь
а > 28 And а < 30
Tsvet ="Голубой" Or Rost<140
а>2 Or x=b Or с<>1
имеют ту общую черту, что про каждое из них можно сказать, верно оно или нет в каждый момент времени. Такие