Лабораторная работа № 5. Оператор безусловного перехода

Теоретические сведения

Наряду с оператором условного перехода, позволяющим организовать выполнение той или иной группы операторов в зависимости от результатов проверки условия, иногда применяется и оператор безусловного перехода. Оператор безусловного перехода задает переход на строку внутри процедуры, помеченную меткой.

Синтаксис оператора:

GoTo <имя метки>

<имя метки> – произвольное имя, отвечающее стандартным правилам именования.

Это же имя должно стоять в начале строки, на которую будет осуществляться переход; при этом имя метки от оператора отделяется двоеточием.

Заметим, что этот оператор в языке программирования VBA является избыточным, поскольку его работа моделируется другими средствами. Кроме того, часто использование этого оператора свидетельствует о “плохом” стиле программирования.

Мы будем использовать оператор безусловного перехода для организации ввода, отвечающего определенным требованиям. В записываемых при этом логических выражениях, помимо арифметических операций, операций отношения, логических операций часто используются функции проверки типов.

Функции проверки типов

Имя функции

Выполняемая проверка

IsArray (<переменная>)

Является ли <переменная> массивом

IsData (<переменная>)

Является ли <переменная> датой

IsEmpty (<переменная>)

Была ли <переменная> описана инструкцией Dim

IsError (<переменная>)

Является ли <переменная> кодом ошибки

IsNull (<переменная>)

Является ли <переменная> пустым значением

IsNumeric (<переменная>)

Является ли <переменная> числовым значением

IsObject (<переменная>)

Является ли <переменная> объектом

Поскольку функция InputBox возвращает значение типа String, иногда более удобно анализировать результаты ввода, считая их строковыми величинами.

Некоторые функции обработки строк:

Len (<строка>)

Возвращает длину строки, т.е. количество символов в строке.

Например,

Len (“cat”) возвращает значение, равное 3;

Len (“3451787”) возвращает значение, равное 7;

Len (“Пример № 5”) возвращает значение, равное 10.

Mid (<строка>, <начальная позиция> [, <количество символов>])

Возвращает подстроку строки <строка>, начиная с символа, номер которого <начальная позиция>, длиной в указанное <количество символов>. Если последний аргумент <количество символов> не задан, то функция возвратит подстроку, включающую в себя символы с указанного аргументом <начальная позиция> до конца исходной строки.

Например, если

S = “весенний день”, то

Mid (S, 10, 4) возвращает значение, равное “день”;

Mid (S, 5, 3) возвращает значение, равное “нн”;

Mid (S, 3) возвращает значение, равное “сенний день”

Демонстрационные примеры:

1. Приведем пример программы, в которой оператор безусловного перехода используется в конструкции If Them Else. Требуется найти частное от деления числа a на число b, при этом, если водится b=0, должен быть предусмотрен повторный ввод.

Option Explicit

Sub Частное ()

Dim a As Integer, b As Integer

a = InputBox ("Введите делимое", "Ввод значений")

1: b = InputBox ("Введите делитетель", "Ввод значений")

If b = 0 Then

MsgBox "Делитель должен быть отличен от нуля," & Chr(13) & "повторите его ввод"

GoTo 1

End If

MsgBox "Частное от деления:   " & a / b, vbExclamation, "Результат"

End Sub

2. Напишем программу, которая заставляла бы пользователя повторять ввод в случаях, когда вводимое значение пустое или не является числом. Если ввод прошел успешно, то введенное число должно выдаваться в окне сообщения.

Option Explicit

Sub Проверка ()

Dim x As Variant

Метка: x = InputBox("Введите любое число", "Ввод числа")

If IsNull(x) Then                                      ‘проверка на пустое значение

GoTo Метка

ElseIf Not IsNumeric(x) Then                проверка на число

GoTo Метка

Else

MsgBox "Введенное число =" & x

End If

End Sub

В приведенной программе было использовано вложенное ветвление, последовательно осуществляющее проверку указанных условий. Эта же программа может быть написана по-другому – с использованием оператора ветвления, содержащего сложное логическое условие.

Option Explicit

Sub Проверка ()

Dim x As Variant

Метка: x = InputBox("Введите любое число", "Ввод числа")

If IsNull(x) Or Not IsNumeric(x) Then  'использование сложного логического условия

GoTo Метка

Else

MsgBox "Введенное число =" & x

End If

End Sub

Задачи для самостоятельного решения

Каждый студент должен решить обе задачи.

1. С клавиатуры вводятся числа a, b, c, d. Подсчитать значение выражения (a+b)/(c+d). Если c+d=0, заставить пользователя повторить ввод.

2. Написать программу, проверяющую правильность ввода даты (формат ввода: дд.мм.гг):

-          введено нужное количество символов;

-          дд и мм являются числами;

-          1 £ дд £ 31;

-          1£ мм £12.

В случае неправильного ввода заставить пользователя повторить ввод. Если ввод прошел успешно, то введенная дата должно выдаваться в окне сообщения в виде списка:

День: дд;

Месяц: мм;

Год: гг.