Пример 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.

Наши рекомендации