Логические операции And, Or, Not

Применение большого числа вложенных If создает довольно громоздкую, трудную для понимания программу. Применение вместо них ветвей ElseIf не всегда делает программу понятнее. Поэтому в VB есть возможность записывать программы короче и понятнее, используя так называемые логические операции. Что это такое, разберем на примерах.

Сформулируем последнюю задачу так: Если число больше 28 и одновременно меньше 30, то печатай ПОПАЛ, в противном случае – НЕ ПОПАЛ.

Обратите внимание, насколько эта формулировка короче и понятнее прежнего алгоритма. Упрощение достигнуто благодаря применению союза «и». В языках программирования в роли этого союза выступает логическая операция And(по-русски – логическая операция И). Вот как с ее помощью записывается наша программа:

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click

Dim a As Double = InputBox("Введите дальность выстрела")

If a > 28 Anda < 30 Then MsgBox("ПОПАЛ") Else MsgBox("НЕ ПОПАЛ")

End Sub

Как видите, намного короче.

Обратите внимание, что условие в операторе If уже не такое простое, как мы описывали раньше, а стало таким:

a > 28 And a < 30

Оно состоит из двух условий, между которыми стоит знак логической операции And .

Знак логической операции And, поставленный между двумя условиями, говорит о том, что должны выполняться сразу оба эти условия.

Разберем еще один пример.

Задача «Разборчивая принцесса». В прихожей у принцессы – длинная очередь женихов. Принцессе нравятся только голубоглазые маленького роста. Устав принимать женихов и отбирать из них подходящих, принцесса вместо себя поставила компьютер, написав для него программу, которая говорит OK тем, у кого цвет глаз голубой и одновременно рост меньше 140. Остальным программа говорит BYE.

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

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Dim Tsvet As String = InputBox("Каков цвет ваших глаз?")

Dim Rost As Integer = InputBox("Введите ваш рост в сантиметрах")

If Tsvet = "Голубой" And Rost < 140 Then MsgBox("OK ") Else MsgBox("BYE")

End Sub

Оператор If в данном примере можно прочесть так – если цвет глаз голубой И рост меньше 140 сантиметров, то говори OK , иначе говори BYE.

Поэтому наш оператор If ответит BYE и высоким голубоглазым, и высоким неголубоглазым, и маленьким неголубоглазым. И лишь маленьким голубоглазым он ответит OK . В общем, And – строгая операция.

Примеры:

ФРАГМЕНТ РЕЗУЛЬТАТ
a=8: b=6: If a>b And b>1 Then k=1 Else k=0 k=1
a=8: b=6: If a>b And b>7 Then k=1 Else k=0 k=0
If 8>2 And 3>5 Then k=1 Else k=0 k=0
If c>d And c<d Then k=1 Else k=0 k=0

Задача «Неразборчивая принцесса». Неразборчивой принцессе нравятся все маленькие независимо от цвета глаз и все голубоглазые независимо от роста. Программа неразборчивой принцессы будет отличаться от программы разборчивой одним единственным знаком логической операции:

If Tsvet = "Голубой" Or Rost < 140 Then MsgBox("OK ") Else MsgBox("BYE")

Оператор If в данном примере можно прочесть так – если цвет глаз голубой ИЛИ рост меньше 140 сантиметров, то говори OK , иначе говори BYE.

Здесь мы употребили логическую операцию Or(по-русски – логическую операцию ИЛИ).

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

Поэтому теперь оператор If ответит OK и высоким голубоглазым и маленьким голубоглазым и маленьким неголубоглазым. И лишь высоким неголубоглазым он ответит BYE. В общем, Or – добрая операция.

Примеры:

ФРАГМЕНТ РЕЗУЛЬТАТ
a=8: b=6: If a>b Or b>7 Then k=1 Else k=0 k=1
a=8: b=6: If a<b Or b>7 Then k=1 Else k=0 k=0
If 1>2 Or 5<4 Then k=1 Else k=0 k=0

Несколько And и Or. Знаками And и Or можно объединять не только два, а сколько угодно условий. Например:

If a>2 Or x=b Or c<>1 Then k=99 Else k=33

Здесь оператор k=99 выполнится, если верно хотя бы одно из трех условий, и лишь когда все три неверны, будет выполняться оператор k=33. Еще один пример:

If a>2 And x=b And c<>1 Then k=99 Else k=33

Здесь наоборот: оператор k=99 выполнится только тогда, когда верны все три условия, а когда хотя бы одно из них неверно, будет выполняться оператор k=33.

Not. Кроме логических операций And и Or применяется еще логическая операция Not(по-русски – НЕ). Запись

If Not a>b Then...

переводится так –

ЕСЛИ НЕПРАВДА, ЧТО a больше b, ТО....

Вот фрагмент:

a=2: b=3: If Not a>b Then k=1 Else k=0

Здесь выполнится оператор k=1, так как неправда, что 2>3.

Знак логической операции Not, поставленный перед условием, говорит о том, что это условие не должно выполняться.

Задание 16.

Усложним Задание 22 из 7.2.3 о треугольнике: В компьютер вводятся длины трех отрезков. Компьютер должен ответить на вопрос, можно или нельзя из этих отрезков образовать треугольник. Указание: Для этого каждый отрезок должен быть меньше суммы длин двух других отрезков. Напишите 3 варианта программы: без использования логических операций, с использованием логических операций Or, с использованием логических операций And.

Задание 17.

Человек вводит с клавиатуры строку, смысл которой – приветствие при встрече. Компьютер тоже должен ответить приветствием. Отвечать нужно в соответствии со следующей таблицей:

ПРИВЕТСТВИЕ ЧЕЛОВЕКА ОТВЕТ КОМПЬЮТЕРА
Привет Привет
Здравствуйте Здравствуйте
Добрый день Салют
Приветик Салют
Салют Салют
Здравия желаю Вольно
Любое другое приветствие Я вас не понимаю

Используя логические операции, постарайтесь уложиться в один оператор If с 4 ветвями.

Логические выражения

Выражения

a>28

a > 28 And a < 30

Tsvet ="Голубой"

Tsvet ="Голубой" Or Rost<140

a>b-2 Or 5*x+1=Sqrt(b) Or c<>10-y

имеют ту общую черту, что про каждое из них можно сказать, верно оно или нет в каждый момент времени. Такие выражения называются логическими выражениями. Если логическое выражение верно, то говорят, что оно имеет значение True(Истина). Если логическое выражение неверно, то говорят, что оно имеет значение False(Ложь). Любое логическое выражение может стоять в качестве условия в операторе If.

Логические выражения могут быть и более сложными, чем приведенные – содержать одновременно операции And, Or, Not. Например, такое выражение:

a>2 And Not b>3 Or s>8

Чтобы его понять, нужно знать порядок логических действий. В арифметике сначала выполняется умножение, потом сложение. В логических выражениях сначала выполняется Not, затем And, затем Or. Для облегчения понимания не возбраняется расставлять скобки:

(a>2 And (Not b>3)) Or s>8

Это выражение равносильно предыдущему. По-русски его смысл можно выразить так: оно верно тогда, когда или s больше 8 или одновременно a больше 2 и b не больше 3.

Скобки можно расставлять и чтобы изменить порядок действий:

a>2 And Not (b>3 Or s>8)

По-русски смысл этого выражения можно выразить так: оно верно тогда, когда a больше 2 и одновременно неправда, что или b больше 3 или s больше 8.

Наши рекомендации