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

Суть оператора. У авторов языков программирования есть похвальное стремление сделать язык попроще, попонятнее. Они с ужасом взирают на многочисленные «иначе если» и логические операции и стараются, где можно, от них избавиться. Возьмем, например, такую задачу: Компьютер спрашивает школьника, какую он получил отметку по физике, и реагирует на нее подходящим текстом. Вот программа без нововведений, использующая If:

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

Dim Otmetka As Integer = InputBox("Какую отметку ты получил по физике?")

If Otmetka = 1 Or Otmetka = 2 Then

MsgBox("Кошмар!")

ElseIf Otmetka = 3 Then

MsgBox("Неважно")

ElseIf Otmetka = 4 Then

MsgBox("Неплохо")

ElseIf Otmetka = 5 Then

MsgBox("Молодец!")

Else

MsgBox("Таких отметок не бывает")

End If

End Sub

Здесь может вызвать раздражение слишком часто встречающееся имя Otmetka, а также то, что и в такой простой задаче не обошлось без логических операций. Хорошо бы программу можно было писать попроще, например, так (по-русски):

Выбери вариант отметки

Вариант 1, 2

говори "Кошмар!"

Вариант 3

говори "Неважно"

Вариант 4

говори "Неплохо"

Вариант 5

говори "Молодец!"

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

говори "Таких отметок не бывает"

Конец выбора

И такой оператор варианта был придуман и назван Select Case, что и означает в переводе ВЫБЕРИ ВАРИАНТ. Теперь я просто-напросто переписываю русский вариант программы по-английски:

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

Dim Otmetka As Integer = InputBox("Какую отметку ты получил по физике?")

Select Case Otmetka

Case 1, 2

MsgBox("Кошмар!")

Case 3

MsgBox("Неважно")

Case 4

MsgBox("Неплохо")

Case 5

MsgBox("Молодец!")

Case Else

MsgBox("Таких отметок не бывает")

End Select

End Sub

Логика работы Select Case абсолютно такая же, как и у многострочного If. В процессе исполнения оператора компьютер сравнивает значение переменной Otmetka по очереди со всеми значениями, перечисленными в вариантах, сверху вниз. Наткнувшись на совпадающее значение, он выполняет операторы, стоящие в этом варианте. На этом исполнение оператора Select Case завершается. Если же совпадающего значения так и не нашлось, то выполняются операторы, стоящие в варианте Case Else (в нашей программе он полезен на тот случай, если ученик – угрюмый мечтатель и вводит число 6).

Возможности оператора. Оператор Select Case предоставляет более широкие возможности, чем рассмотренные в только что приведенном примере. Проиллюстрируем их:

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

Dim a, k As Double

a = 3

Select Case a * a + 1

Case 8, 4 * a - 3, 26

k = 0

Debug.WriteLine(k)

Debug.WriteLine(a)

Case 7, 9 To 12

k = 1

Debug.WriteLine(k)

Case Is < 0, 2, 4, 2.57 To 1.8 + a, 44, 68, Is > 100 + a

k = 3

End Select

End Sub

Эта программа напечатает 1. Здесь мы видим несколько новых для нас элементов:

  • После слов Select Case стоит не переменная, а выражение, поэтому с перечисленными в вариантах значениями будет сравниваться число 10, полученное как 3*3+1.

  • В качестве значений вариантов тоже могут стоять выражения, как, например, у нас – 4*a-3.

  • Значений вариантов довольно много, все они перечислены через запятые.

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

  • Конструкция 9 To 12. Она обозначает то же, что и 9 <= a*a+1 <= 12, и служит в нашем случае для сокращения записи.

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

  • Здесь отсутствует вариант Case Else. Это значит, что если бы в нашей программе оператор Select Case не выбрал ни один из своих вариантов, то, не найдя также 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 Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click

Dim a As String = "Дом"

Select Case a + a

Case "Домик"

Debug.WriteLine(44)

Case "ДомДом"

Debug.WriteLine(99)

End Select

End Sub

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

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

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

Последний маленький шажок – сделать так, чтобы компьютер правильно реагировал на ваши реплики, подаваемые не с клавиатуры, а с микрофона. Но наука пока не в силах сделать этот маленький шажок.