Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
INFORMATIKA / LrVBA / Lab3.doc
Скачиваний:
18
Добавлен:
12.04.2015
Размер:
1 Mб
Скачать
          1. Синтаксис

If<Условие>Then<ИнструкцияДа> [Else<ИнструкцияНет>]

Если условие принимает значение True, выполняется ИнструкцияДа, идущая после словаThen. Если условие не выполняется (принимает значениеFalse), выполняется ИнструкцияНет, идущая после словаElse. Схема алгоритма изображена на Error: Reference source not found.

Часть оператора, начинающаяся сElse, не является обязательной. Если она отсутствует, говорят, что оператор записан в сокращённой форме, иначе речь идёт о полной форме. Схема алгоритма, соответствующая сокращённой форме условного оператора изображена на Error: Reference source not found.

Приведённая конструкция позволяет выполнить только по одной инструкции в случае выполнения или невыполнения условия. Если одна из ветвей должна содержать несколько инструкций, целесообразно применение блока If.

В следующем примере выполняется вычисление натурального логарифма. Как известно, логарифм можно вычислить только для положительного значения аргумента. Попытка вычислить логарифм неположительного числа, приведёт к аварийному завершению программы. Схема алгоритма представлена на Рис. 1

Рис. 1. Алгоритм вычисления натурального логарифма

          1. Текст программы

Subln()

DimxAsSingle

x=Val(InputBox("Введитеx"))

Ifx> 0ThenMsgBox("Ln" &Str(x) & " = " &Str(Log(x))) _

ElseMsgBox("Аргумент должен быть больше нуля")

EndSub

        1. БлокIf

Блок Ifвыполняет функции условного оператора, но позволяет реализовать по несколько операторов в каждой ветви алгоритма.

          1. Синтаксис

If<Условие>Then<Инструкции> [Else<Инструкции>]EndIf

Как и любой блок в VBA, блокIfзаканчивается ключевым словомEndи названием блока. ВетвьElseне является обязательной.

          1. Пример

Вычислить площадь треугольника, заданного длинами сторон.

Как известно, чтобы вычислить площадь треугольника по длине сторон, необходимо убедиться, что треугольник существует. Иначе при вычислении площади по формуле Герона квадратный корень будет извлекаться из отрицательного числа, что приведёт к аварийному завершению программы.

          1. Схема алгоритма (Рис. 2)

Рис. 2. Алгоритм вычисления площади треугольника

          1. Текст программы

SubTriangle()

Dima,b,c,p,sAsSingle,outstrAsString

a=Val(InputBox("Введите длину стороны 1"))

b=Val(InputBox("Введите длину стороны 2"))

c=Val(InputBox("Введите длину стороны 3"))

If ((a + b) > c) And ((a + c) > b) And ((b + c) > a) Then

p = (a + b + c) / 2

s = Sqr(p * (p - a) * (p - b) * (p - c))

outstr= "Площадь треугольника равна " &Str(s)

Else

outstr = "Треугольник не существует"

End If

MsgBox (outstr)

End Sub

        1. If Then ElseIf … Else End If

Рассмотрим задачу следующего содержания: по введённым длинам сторон определить, является ли треугольник равнобедренным, равносторонним, ни тем, ни другим, или вообще не существует.

          1. Алгоритм задачи

Рис. 3. Определение вида треугольника.

Для решения этой задачи требуется последовательная проверка трёх условий: в случае невыполнения первого проверяется второе, в случае невыполнения второго проверяется третье. В схему этого алгоритма идеально укладывается блок операторов «IfThenElseIf…Else End If».

          1. Синтаксис

If<Условие 1>Then<Инструкции 1> [ElseIf<Условие 2>Then<Инструкции 2> ... [ElseIf<Условиеn>Then<Инструкцииn> [Else<Инструкции>]EndIf

          1. Схема алгоритма

Рис. 4. Схема алгоритма блока «If Then ElseIf … ElseEndIf»

          1. Текст программы

Sub Triangles()

Dim a, b, c As Single

a=Val(InputBox("Введите сторону 1"))

b = Val(InputBox("Введите сторону 2"))

c = Val(InputBox("Введите сторону 3"))

If ((a + b) <= c) Or ((a + c) <= b) Or ((b + c) <= a) Then

MsgBox ("Треугольника не существует")

ElseIf ((a = b) And (b = c)) Then

MsgBox ("Треугольник равносторонний")

ElseIf ((a = b) Or (b = c) Or (a = c)) Then

MsgBox ("Треугольник равнобедренный")

Else

MsgBox ("Треугольник обыкновенный")

End If

End Sub

      1. Оператор выбораSelectCase

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

          1. Синтаксис

SelectCaseвыражениеCaseСписокВыражений-1: <инструкции- 1> … [CaseСписокВыражений-n: <инструкции-n>] [CaseElse: <инструкцииelse>]EndSelect

          1. Аргументы

Выражение– проверяемое выражение, в зависимости от значения которого выполняется та или иная ветвь алгоритма

СписокВыражений– одно или несколько (через запятую) условий типа список, диапазон (50To100) или отношение (IS>10), которым должно удовлетворять выражение.

инструкции- одна или несколько инструкций, выполняемых в том случае, если выражение удовлетворяет любому компоненту условия СписокВыражений

инструкции else(необязательная часть) - одна или несколько инструкций, выполняемых в том случае, если выражение не совпадает ни с одним из предложенийCase

          1. Схема алгоритма

Рис. 5. Схема алгоритма оператора SelectCase

Пример: в зависимости от введённого времени выдать одно из сообщений: Утро, День, Вечер, Ночь, Полночь, Полдень.

          1. Схема алгоритма

Рис. 6. Схема алгоритма программы определения времени суток

Соседние файлы в папке LrVBA