Пример 4.4.2-2. Дополнить проект Пример 3.4-3 из Темы 3, предусмотрев в нем проверку исходных данных.
По результату проверки исходных данных программа должна выдавать предупреждающее сообщение, если вводятся значения сторон треугольника, при которых треугольник не существует.
Sub PsPr(ByVal A As Single, ByVal B As Single, ByVal C As Single) Dim P, S As Single If (A + B > C) And (B + C > A) And (C + A > B) Then PS(A, B, C, P, S):vivodSng3(P, TextBox4):vivodSng3(S,TextBox5) Else MsgBox("Ошибка!" & vbNewLine &, _ "Сумма двух сторон треугольника" _ &" должна быть больше третьей.") TextBox1.Text = ""'Очистка текстовых полей TextBox2.Text = ""'Очистка текстовых полей TextBox3.Text = ""'Очистка текстовых полей TextBox1.Focus()'В фокусе оказывается 'текстовое поле для(ввода)значения стороны А '(в нем будет мигать курсор), 'после чего можно повторить ввод End If End Sub |
Рис. 4.4.2-3. Процедура PsPR()Проекта 3.4-3
проверкой исходных данных
Для того чтобы можно было построить треугольник, необходимо и достаточно выполнения следующих неравенств (A, B, С – длины сторон треугольника, & – операция логического умножения):
(А + В > С) & (А + C > В) & (В + C > А).
Открыть проект Пример 3.4-3 и внесите изменения в процедуру,
Sub PSPr() (рис. 4.4.2-3). В окне функции MsgBox() текст сообщения выводится в две строки. Обратить внимание, что для перевода на новую строку используется текстовая константа vbNewLine.
Рассмотрим конструкцию Select Case.
Конструкция Select Case аналогична конструкции If...Then, но она более эффективна в тех ситуациях, когда ветвление зависит от одной ключевой переменной.
Оператор Select Case позволяет осуществить разветвление по любому фиксированному числу ветвей. Он имеет следующий формат:
Select Case выражение Case тест1 [блок_операторов1] [Case тест2 [блок_операторов2] ] . . . [Case Else [блок_операторовn] ] End Select |
Здесь выражение – арифметическое или строковое, а тестi может иметь следующую форму:
выражение [,выражение . . .] выражениеTo выражение Isоперация_отношениявыражение |
Например, Case могут содержать следующие тесты:
Case Is > 3' проверка на превышение значения 3; Case x^2' проверка на равенство значению выражения; Case 5 To 7' проверка на принадлежность отрезку [5,7]; Case 1 To 4, 7 To 9, 11, 13, Is > Max |
В последнем примере через запятую перечисляются несколько тестов, при этом результат проверки выражения считается истинным, если выполняется, хотя бы один тест.
Порядок выполнения оператора Select Case следующий: если значение выражения удовлетворяет тесту, расположенному после конструкции Case, то выполняется данный блок_операторов, а затем управление передается оператору, следующему после конструкции End Select. В противном случае проверяется следующий тест и так далее. Все конструкции Select Case работают аналогично. Блок_операторов, расположенный после Case Else, выполняется в том случае, если последовательные проверки всех тестов выше дали значение False (т.е. ни один тест не выполнился).
Оператор имеет следующие особенности: тест1, тест2 и так далее должны быть последними в строке, а конструкция Case Elseдолжна быть единственной в строке.
Следующий пример показывает, как работает конструкция Select Case
Dim Age As Integer= 18 Select Case Age Case 16 Label1.Text="Теперь Вы можете водить машину!" Case 18 Label1.Text="Теперь Вы можете участвовать в выборах!" Case 21 Label1.Text="Теперь Вы можете еще кой-чего." Case 65 Label1.Text="Пора уходить на пенсию." End Select |
используется в программе для вывода нужного сообщения о возрасте и культурных вехах в жизни человека. Если переменная Age содержит значение 18, то в свойство Text объекта надписи записывается строка «Теперь Вы можете участвовать в выборах!».
Также конструкция Select Case поддерживает оператор Case Else, который может использоваться для отображения сообщений, если ни одно из предшествующих значений не совпадает со значением переменной Аgе.
Dim Age As Integer Age = 25 Select Case Age Case 16 Label1.Text = "Теперь Вы можете водить машину!" Case 18 Label1.Text = "Теперь Вы можете участвовать в выборах!" Case 21 Label1.Text = "Теперь Вы можете еще кое-чего" Case 65 Label1.Text = "Пора уходить на пенсию" Case Else Label1.Text = "У Вас замечательный возраст! Наслаждайтесь!" End Select |
Чтобы включить в конструкцию Select Case диапазон проверяемых значений, можно использовать операции отношения =, <>, >, <, >= и <=. Чтобы использовать операции отношения, требуется включить в оператор ключевое слово Is или ключевое слово То, определяющие производимое сравнение. Ключевое слово Is говорит компилятору о том, что требуется сравнить переменную с выражением, указанным после ключевого слова Is. Ключевое слово То определяет диапазон значений. Следующая конструкция использует Is, То и несколько операций отношения для того, чтобы проверить значение переменной Ageи отобразить одно из пяти сообщений:
Select Case Age Case Is< 13 Label1.Text=" Наслаждайтесь детством!" Case 13 To 19 Label1.Text =" Наслаждайтесь юностью!" Case 21 Label1.Text =" Теперь Вы можете еще кое-чего" Case Is> 100 Label1.Text =" Здорово выглядите!" Case Else Label1.Text =" Отличный возраст." End Select |
Если значение переменной Аgе меньше 13, отображается сообщение «Наслаждайтесь детством!». Для возраста от 13 до 19 лет отображается сообщение «Наслаждайтесь юностью!» и так далее.
Условная конструкция Select Case обычно гораздо яснее, чем конструкция If...Then, и более эффективна, в случае если в зависимости от значения или свойства переменной следует образовать три или более ветвей программы. Однако, когда делается два или менее сравнений или, когда используется несколько различных значений, то лучше использовать условную конструкцию If...Then.
В следующем примере вы увидите, как использовать структуру Select Case для обработки ввода из поля списка. Для получения ввода будут использоваться свойства ListBox1.Text и ListBox1.Selected.IndexChanged, а затем для отображения приветствия на одном из четырех языков будет использоваться конструкция Select Case.