числовые, но и строковые. Пример:
Private Sub Command1_Click() а = "Дом"
Select Case а
Case "Домик"
k = 3
Print a
Case "Дом"
k = 0
Print k
End Select
End Sub
Здесь будет напечатан 0.
Задание 30: Ученик вводит с клавиатуры букву русского алфавита. Компьютер должен сказать, какой звук обозначает это буква — гласный, согласный звонкий, согласный глухой или какой-нибудь другой (можно и НЕ ЗНАЮ).
Задание 31: Если у вас есть микрофон и вы можете записывать свой голос в файл, то попробуйте усовершенствовать ваш диалог с компьютером. Пусть компьютер подает вам реплики голосом. Для этого вам заранее придется записать на диск некоторое количество звуковых файлов с репликами компьютера и при помощи оператора Select Case выбирать между ними в зависимости от реплики человека с клавиатуры. Вы сразу же заметите, что компьютер поглупел, но зато стал изъясняться вслух.
Улучшаем калькулятор
Наш калькулятор не предохранен от попыток выполнения арифметических действий над текстом и от деления на ноль. Предохраним его от этого, а также научимся ставить пароль на проект.
Проверка ввода чисел в текстовое поле
Давайте запустим наш калькулятор в том же виде.
Dim Чис1 As Double 'Переменная, содержащая число из текстового поля Число1
Dim Чис2 As Double 'Переменная, содержащая число из текстового поля Число2
Dim Рез As Double 'Переменная-результат, предназначенный для текстового поля Результат
_____________
Private Sub Кл_сложения_Click()
Чис1 = Число1.Text 'Значения исходных данных переходят в переменные текстовых полей
Чис2 = Число2.Text
Рез = Чис1 + Чис2 'Обработка переменных для получения результата
Результат.Text = Рез 'Значения результата переходит из переменной в текстовое поле
End Sub
…………..
Попробуем ввести в верхнее текстовое поле вместо числа какую-нибудь ерунду, например, КУ-КУ. Щелкнем по кнопке сложения. Visual Basic выдает сообщение об ошибке "Туре mismatch" — несовпадение типов числовой переменной Чис1 и вводимой текстовой информации. Все верно.
Теперь подумаем — хорошо ли это, что Visual Basic реагирует на ваши неправильные действия собственными сообщениями об ошибке? Для вас, которые уже что-то умеют в программировании и делают калькулятор исключительно для собственного удовольствия, может быть и хорошо. Ну а представьте, что вы решили похвастаться калькулятором перед своей подругой, которая знакома с программированием только понаслышке, и она, работая на нем, допустила такую же ошибку? Что она подумает, увидев неожиданно возникшее окно с непонятными английскими словами? Вы думаете, она поймет, что это сообщение об ошибке? Скорее всего она подумает, что это сломался компьютер. И на какие кнопки, скажите на милость, ей нажимать? "Ну и гадость твой калькулятор!" — скажет она наконец и будет сто раз права.
Та же проблема стоит и перед всеми профессиональными программистами, которые создают свои продукты для использования людьми, не обязанными ничего знать о программировании. Программист обязан сделать так, чтобы на все неправильные действия пользователя реагировал не Visual Basic своими непонятными сообщениями, а сама программа, причем понятно, по-русски, и тут же давала возможность исправиться.
Для этого в Visual Basic должны быть средства. И они там есть. Что нам нужно сейчас? Нам нужно средство, которое определяло бы, число ли записано в текстовом окне или же все, что угодно, но только не число. Это функция IsNumeric. Ее аргумент может быть любого типа, в том числе и строкой. Функция анализирует строку и если видит, что она состоит из цифр, знака минус и запятой таким образом, что получается число (и больше ничего в строке нет), то функция получает значение True, что означает "Правда", в противном случае — False, что означает "Ложь". Проверим:
Оператор Debug.Print IsNumeric("КУ-КУ") печатает False.
Оператор Debug.Print IsNumeric("-67,3") печатает True.
Раз так, то функцию IsNumeric можно включать в логические выражения и использовать в качестве условия оператора If. Например,
If IsNumeric("-67,3") Then MsgBox ("Это число") Else MsgBox ("Это не число")
что означает: "Если -67,3 — число, то…" Поэтому же совсем не обязательно писать If IsNumeric ("-67,3") = True Then….
Алгоритм работы калькулятора с проверкой звучит примерно так: Если в текстовом поле Число1 введено число и в текстовом поле Число2 введено число, то делай все, что положено, иначе выдавай сообщение "Вводите только числа". Процедура сложения с учетом этого алгоритма будет выглядеть так:
Private Sub Кл_сложения_Сliск ()
If IsNumeric(Число1) And IsNumeric(Число2) Then
Чис1 = Число1.Text
Чис2 = Число2.Text
Результат.Text = Чис1 + Чис2
Else
MsgBox ("Вводите только числа")
End If
End Sub
Здесь я немного сэкономил на переменной Рез. Поскольку мы ее никак не обрабатываем, я обошелся без нее. Процедуры для остальных действий пишутся аналогично.
Запрет деления на ноль
Вторая ошибка, на которую реагирует Visual Basic, это деление на ноль. От нее мы избавимся, если запретим компьютеру делить на ноль, записав вместо оператора
Результат.Text = Чис1/Чис2
такой:
If Чис2 <> 0 Then Результат.Text = Чис1/Чис2 Else MsgBox ("На ноль делить нельзя")
Вот как будет выглядеть теперь процедура деления:
Private Sub Кл_деления_Click ()
If IsNumeric(Число1) And IsNumeric(Число2) Then
Чис1 = Число1.Text
Чис2 = Число2.Text
If Чис2 <> 0 Then Результат.Text = Чис1 / Чис2 Else MsgBox ("На ноль делить нельзя")
Else
MsgBox ("Вводите только числа")
End If
End Sub
Как видите, здесь в состав многострочного If входит однострочный.
Ставим пароль на калькулятор
Ваш калькулятор стал достаточно надежен и удобен. Теперь его не стыдно показать друзьям. Ну а защищаться от врагов будем паролем.
Наша задача — сделать так, чтобы при попытке запустить калькулятор на экране появлялось приглашение ввести пароль, известный только вам. При попытке ввода неправильного пароля, программа должна заканчивать свою работу.
Поскольку приглашение на ввод пароля должно появляться раньше всего остального, то программируем его в процедуре Form_Load, в самом начале. Предварительно объявим строковую переменную для хранения пароля и выдумаем сам пароль, например, "калям".
Dim Parol As String 'Переменная-пароль
Private Sub Form_Load()
Parol = InputBox("Введите пароль")
If Parol <> "калям" Then MsgBox ("Пароль неверный!"): End
End Sub
Новый для вас оператор End делает