Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Понятно о Visual Basic.NET. Самоучитель.Ч2.2005...docx
Скачиваний:
43
Добавлен:
25.11.2019
Размер:
4.02 Mб
Скачать
    1. Вложенные операторы If. Логические операции и выражения

Для решения самых сложных логических задач компьютеру вполне достаточно тех операторов If, которые мы разобрали, при условии, что мы будем вкладывать операторы If один в другой.. А применение так называемых логических операций кроме того и значительно упрощает программу.

      1. Вложенные операторы If

Согласно синтаксической схеме оператора If, после Then и Else могут стоять любые операторы VB, а значит и еще один или несколько If.

Решим задачу: В компьютер вводится число (пусть для конкретности это будет дальность какого-нибудь выстрела). Если оно находится в интервале от 28 до 30, то напечатать текст ПОПАЛ, иначе – НЕ ПОПАЛ.

Сначала составим алгоритм: Введи число. Если оно меньше 28, то печатай НЕ ПОПАЛ, в противном случае надо еще подумать. А о чем же думать? А вот о чем: Если число меньше 30, то печатай ПОПАЛ, иначе печатай НЕ ПОПАЛ.

А теперь по составленному алгоритму напишем программу:

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

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

If a < 28 Then

MsgBox("НЕ ПОПАЛ")

Else

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

End If

End Sub

Здесь оператор If a < 30 входит в состав оператора If a < 28. Говорят, что он вложен в него. Естественно, вложенный If вполне и сам может быть многострочным и содержать другие If, вложенные в него. И так далее.

Некоторые программы с вложенными If можно достаточно просто переписать без вложенных If, применяя ветви ElseIf. Вот как мы сделаем это с нашей программой:

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

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

If a < 28 Then

MsgBox("НЕ ПОПАЛ")

ElseIf a < 30 Then

MsgBox("ПОПАЛ")

Else

MsgBox("НЕ ПОПАЛ")

End If

End Sub

      1. Логические операции 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 And a < 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, поставленный перед условием, говорит о том, что это условие не должно выполняться.

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

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

ПРИВЕТСТВИЕ ЧЕЛОВЕКА

ОТВЕТ КОМПЬЮТЕРА

Привет

Привет

Здравствуйте

Здравствуйте

Добрый день

Салют

Приветик

Салют

Салют

Салют

Здравия желаю

Вольно

Любое другое приветствие

Я вас не понимаю

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