Шрифт:
Закладка:
Логические выражения могут быть сложными — содержать одновременно операции And, Or, Not. Например, такое: а>2 And Not b>3 Or s>8
Чтобы его понять, нужно знать порядок действий. В арифметике сначала выполняется умножение, потом сложение. В логических выражениях сначала выполняется Not, затем And, затем Or. Для облегчения понимания не возбраняется расставлять скобки:
(а>2 And (Not b>3)) Or s>8
Это выражение равносильно предыдущему.
Скобки можно расставлять и чтобы изменить порядок действий: а>2 And Not (b>3 Or s>8)
Примеры:
Задание 27: "Замысловатая принцесса". Определите, кто нравится принцессе, по фрагменту из ее программы:
If Tsvet ="Черный" And (Rost<180 Or Rost>184) Then Print "ВЫ МНЕ ПОДОЙДЕТЕ" Else Print "ДО СВИДАНИЯ"
Задание 28: Усложним нашу задачу про ПОПАЛ — НЕ ПОПАЛ: Человек вводит в компьютер число. Если оно находится в интервале от 28 до 30, то нужно напечатать текст ПОПАЛ, если оно больше или равно 30 — то ПЕРЕЛЕТ, если оно находится на отрезке от 0 до 28, то НЕДОЛЕТ, если число меньше нуля — НЕ БЕЙ ПО СВОИМ.
Задание 29: Человек вводит с клавиатуры строку, смысл которой — приветствие при встрече. Компьютер тоже должен ответить приветствием. Отвечать нужно в соответствии со следующей таблицей:
Оператор варианта Select Case
У авторов языков программирования есть похвальное стремление сделать язык попроще, попонятнее. Они с ужасом взирают на многочисленные "иначе если" и логические операции и стараются, где можно, от них избавиться. Возьмем, например, такую задачу: Компьютер спрашивает школьника, какую он получил отметку по физике, и реагирует на нее подходящим текстом. Вот программа без нововведений, использующая If:
Dim Otmetka As Integer
Private Sub Command1_Click()
Otmetka = InputBox("Какую отметку ты получил по физике?")
If Otmetka = 1 Or Otmetka = 2 Then
Print "Кошмар!"
Elself Otmetka = 3 Then
Print "Неважно"
Elself Otmetka = 4 Then
Print "Неплохо"
Elself Otmetka = 5 Then
Print "Молодец!"
Else
Print "Таких отметок не бывает"
End If
End Sub
Здесь может вызвать раздражение слишком часто встречающееся имя Otmetka, а также то, что и в такой простой задаче не обошлось без логических операций. Хорошо бы программу можно было писать попроще, например, так (по-русски): Выбери вариант отметки Вариант 1, 2
печатай "Кошмар!"
Вариант 3
печатай "Неважно"
Вариант 4
печатай "Неплохо"
Вариант 5
печатай "Молодец!"
Вариант остальное
печатай "Таких отметок не бывает"
Конец выбора
И такой оператор варианта был придуман и назван Select Case, что и означает в переводе ВЫБЕРИ ВАРИАНТ. Я просто-напросто переписываю русский вариант программы по-английски:
Dim Otmetka As Integer Private Sub Command1_Click()
Otmetka = InputBox("Какую отметку ты получил по физике?")
Select Case Otmetka
Case 1, 2
Print "Кошмар!"
Case 3
Print "Неважно"
Case 4
Print "Неплохо"
Case 5
Print "Молодец!"
Case Else
Print "Таких отметок
End Select
End Sub
Логика работы Select Case абсолютно такая же, как и у блочного If. В процессе исполнения оператора компьютер сравнивает значение переменной Otmetka по очереди со всеми значениями, перечисленными в вариантах. Наткнувшись на совпадающее значение, он выполняет операторы, стоящие в этом варианте. На этом исполнение оператора Select Case завершается. Если же совпадающего значения так и не нашлось, то выполняются операторы, стоящие в варианте Else (в нашей программе он полезен на тот случай, если ученик болен манией величия и вводит число 6).
Оператор Select Case предоставляет более широкие возможности, чем в только что рассмотренном примере. Проиллюстрируем их на другом примере:
Private Sub Command1_Click()
а = 3
Select Case a * a + 1
Case 8, 4 * a, 26
k = 0
Print k Print a
Case 7, 10, 84 To 90
k = 1
Print k
Case Is < 0, 2, 4, 12 To 18 + a, 44, 68, Is > 100 + a
k = 3
End Select
End Sub
Эта программа напечатает 1. Здесь мы видим несколько новых для нас элементов.
Во-первых, после слов Select Case стоит не переменная, а выражение, поэтому с перечисленными в вариантах значениями будет сравниваться число 10, полученное как 3*3+1. В качестве значений вариантов тоже могут быть выражения, как, например, у нас — 4 * а.
Во-вторых, здесь у нас в двух вариантах не по одному, а по нескольку выполняющихся операторов.
В-третьих — конструкция 84 То 90. Она обозначает то же, что и 84,85,86,87,88,89,90, и служит в нашем случае для сокращения записи.
В-четвертых — конструкция Is < 0. Слово Is служит заменителем выражения а*а+1 и тоже используется для сокращения. Таким образом, Select Case не только сравнивает значения на равенство, но и проверяет неравенства.
В-пятых, здесь отсутствует вариант Else. Это значит, что если бы в нашей программе мы вместо а=3 написали а=0, то оператор Select Case, не найдя совпадения, не выбрал бы ни один из своих вариантов и, не найдя также Else, завершил бы свою работу, так ничего и не сделав.
Чем платим за удобство Select Case по сравнению с If? Что может If такого, чего не может Select Case? Самое главное — условия в If могут быть совершенно произвольны, а в Select Case мы привязаны к а*а+1.
Вот синтаксис оператора Select Case:
Select Case проверяемое выражение
[Case значение, значение……
[операторы
операторы
…………….]]
[Case значение, значение……
[операторы операторы]]
………………………
[Case Else
[операторы
операторы
…………….]]
End Select
Здесь значение — это:
— выражение
— выражение То выражение
— знак сравнения выражение
Выражения могут быть не только