Главная страница Случайная страница Разделы сайта АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Вложенные операторы If. Логические операции и выражения
Умный компьютер решает сложные логические задачи. Для этого нужны сложные средства языка. Рассмотрим их. Вложенные операторы If Согласно синтаксической схеме оператора If, после Then и Else может стоять любой оператор Visual Basic, в том числе и If. Решим задачу: В компьютер вводится число (пусть для конкретности это будет дальность какого-нибудь выстрела). Если оно находится в интервале от 28 до 30, то напечатать текст ПОПАЛ, иначе - НЕ ПОПАЛ. Сначала составим алгоритм: Введи число. Если оно меньше 28, то печатай НЕ ПОПАЛ, в противном случае надо еще подумать. А о чем же думать? А вот о чем: Если число меньше 30, то печатай ПОПАЛ, иначе печатай НЕ ПОПАЛ. А теперь по составленному алгоритму напишем программу: Private Sub Command1_Click() a = 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: Private Sub Command1_Click() a = InputBox(" Введите дальность выстрела") If a < 28 Then MsgBox (" НЕ ПОПАЛ") ElseIf a < 30 Then MsgBox (" ПОПАЛ") Else MsgBox (" НЕ ПОПАЛ") End If End Sub
Задание 26: Усложним задание 19 из 5.3: В компьютер вводятся длины трех отрезков. Компьютер должен ответить на вопрос, правда ли, что эти отрезки могут образовать треугольник. Указание: Для этого каждый отрезок должен быть меньше суммы длин двух других отрезков. Логические операции Применение вложенных 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() a = InputBox(" Введите дальность выстрела") If a > 28 And a < 30 Then MsgBox (" ПОПАЛ") Else MsgBox (" НЕ ПОПАЛ") End Sub Задача " Неразборчивая принцесса". Неразборчивой принцессе нравятся все маленькие независимо от цвета глаз и все голубоглазые независимо от роста. Программа неразборчивой принцессы будет отличаться от программы разборчивой одним единственным знаком логической операции: If Tsvet =" Голубой" Or Rost< 140 'Если цвет голубой ИЛИ рост< 140 Знак логической операции Or переводится " или". Поставленный между двумя условиями, знак Or говорит о том, что достаточно, если будет выполняться хотя бы одно из них. Поэтому теперь оператор If ответит ВЫ МНЕ ПОДОЙДЕТЕ и высоким голубоглазым и маленьким голубоглазым и маленьким неголубоглазым. И лишь высоким неголубоглазым он ответит ДО СВИДАНИЯ.
Знаками And и Or можно объединять сколько угодно условий. Например: If a> 2 Or x=b Or c< > 1 Then k=99 Else k=33 Здесь выполнится оператор k=99, если верно хотя бы одно из трех условий, и лишь когда все три неверны, будет выполняться оператор k=33.
Кроме логических операций 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. Логические выражения Выражения a> b a > 28 And a < 30 Tsvet =" Голубой" OrRost< 140 a> 2 Or x=b Or c< > 1 имеют ту общую черту, что про каждое из них можно сказать, верно оно или нет в каждый момент времени. Такие выражения называются логическими выражениями. Если логическое выражение верно, то говорят, что оно имеет значение 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 Это выражение равносильно предыдущему. Скобки можно расставлять и чтобы изменить порядок действий: a> 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 " Кошмар! " ElseIf Otmetka = 3 Then Print " Неважно" ElseIf Otmetka = 4 Then Print " Неплохо" ElseIf Otmetka = 5 Then Print " Молодец! " Else Print " Таких отметок не бывает" End If End Sub Здесь может вызвать раздражение слишком часто встречающееся имя Otmetka, а также то, что и в такой простой задаче не обошлось без логических операций. Хорошо бы программу можно было писать попроще, например, так (по-русски): Выбери вариант отметки Вариант 1, 2 печатай " Кошмар! " Вариант 3 печатай " Неважно" Вариант 4 печатай " Неплохо" Вариант 5 печатай " Молодец! " Вариант остальное печатай " Таких отметок не бывает"
|