Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

Вложенные операторы If. Логические операции и выражения

Типы данныхи точность вычислений | Порядок создания простого вычислительного проекта | Теперь нужно задать компьютеру действия, которые он должен проделать с исходными данными, чтобы получить результат. | Строковые переменные | Как выводить информацию оператором Print | Как выводить информацию в текстовое поле | Что такое выбор(ветвление) | Условный операторIf или как компьютер делает выбор | Правила записи однострочного оператора If | Случайные величины |


Читайте также:
  1. Quot;Used to" и "would" для выражения повторяющегося действия или обычного состояния в прошлом.
  2. Аддитивная и мультипликативная операции коммутативны
  3. Активные операции коммерческого банка
  4. Акты самовыражения
  5. Акэно улыбался Buchou с тонким выражения.
  6. АНАТОМО-ФИЗИОЛОГИЧЕСКИЕ ОСОБЕННОСТИ ПЕРИОДОНТА
  7. Арифметические выражения

Умный компьютер решает сложные логические задачи. Для этого нужны сложные средства языка. Рассмотрим их.

Вложенные операторы 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)

 

 

Примеры:

ФРАГМЕНТ РЕЗУЛЬТАТ
a=8: b=6: If a>b And b>7 Then k=1 Else k=0 k=0
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
a=8: b=6: If Not a=8 Then k=1 Else k=0 k=0

Задание 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

печатай "Молодец!"

Вариант остальное

печатай "Таких отметок не бывает"

Конец выбора

И такой оператор варианта был придуман и назван 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()

a = 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 * a.

Во-вторых, здесь у нас в двух вариантах не по одному, а по нескольку выполняющихся операторов.

В-третьих - конструкция 84 To 90. Она обозначает то же, что и 84,85,86,87,88,89,90, и служит в нашем случае для сокращения записи.

В-четвертых - конструкция Is< 0. Слово Is служит заменителем выражения a*a+1 и тоже используется для сокращения. Таким образом, Select Case не только сравнивает значения на равенство, но и проверяет неравенства.

В-пятых, здесь отсутствует вариант Else. Это значит, что если бы в нашей программе мы вместо a=3 написали a=0, то оператор Select Case, не найдя совпадения, не выбрал бы ни один из своих вариантов и, не найдя также Else, завершил бы свою работу, так ничего и не сделав.

 

Чем платим за удобство Select Case по сравнению с If? Что может If такого, чего не может Select Case? Самое главное - условия в If могут быть совершенно произвольны, а в Select Case мы привязаны к a*a+1.

 

Вот синтаксис оператора Select Case:

Select Case проверяемое выражение

[Case значение, значение ……

[ операторы

операторы

……………... ]]

[Case значение, значение ……

[ операторы

операторы

……………... ]]

…………………….……………….

[Case Else

[ операторы

операторы

……………... ]]

End Select

 

Здесь значение - это:

- выражение

- выражение To выражение

- Is знак сравнения выражение

 

Выражения могут быть не только числовые, но и строковые. Пример:

Private Sub Command1_Click()

a = "Дом"

Select Case a

Case "Домик"

k = 3

Print a

Case "Дом"

k = 0

Print k

End Select

End Sub

Здесь будет напечатан 0.

 

Задание 30: Ученик вводит с клавиатуры букву русского алфавита. Компьютер должен сказать, какой звук обозначает это буква - гласный, согласный звонкий, согласный глухой или какой-нибудь другой (можно и НЕ ЗНАЮ).

Задание 31: Если у вас есть микрофон и вы можете записывать свой голос в файл, то попробуйте усовершенствовать ваш диалог с компьютером из 4.9. Пусть компьютер подает вам реплики голосом. Для этого вам заранее придется записать на диск некоторое количество звуковых файлов с репликами компьютера и при помощи оператора Select Case выбирать между ними в зависимости от реплики человека с клавиатуры. Вы сразу же заметите, что компьютер поглупел, но зато стал изъясняться вслух.


Дата добавления: 2015-11-16; просмотров: 99 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Многострочный If| Улучшаем калькулятор.

mybiblioteka.su - 2015-2024 год. (0.036 сек.)