Логические выражения, логические операции и операции отношения

End If

Else

End If

Else

[блок_операторов_N]

 

– логическое_выражение – выражение, возвращающее не нулевое значение (истина) или ноль (ложь);

– блок_операторов – любое количество операторов.

 

При блочной форме проверяется сначала первое логическое выражение. Если оно ненулевое ("истина"), выполняются операторы блока, следующего за словом Then (блок_операторов_1). Если логическое выражение равно нулю ("ложь"), происходит переход к оценке условия, заданного в последующей строке ElseIf. При выполнении этого условия выполняются операторы данного блока (блок_операторов_2) и т.д. Если ни одно из условий ElseIf не выполняется (все "ложь"), то выполняются операторы блока Else (блок_операторов_N). Последний блок операторов должен заканчиваться строкой End If.

Любую программу можно составить с использованием только самой простой формы оператора If – краткой линейной формы. Все остальные формы используются только для удобства записи программы. Как было уже сказано, если проверяются одно или два условия, то имеет смысл использовать более простую линейную форму If…Then или If...Then…Else.

Блочная форма применяется, когда необходимо анализировать не одно или два условия, а целый ряд взаимосвязанных условий:

 

If логическое_выражение_1 Then

[блок_операторов_1]

ElseIf логическое_выражение_2 Then

[блок_операторов_2]

……………………………………………………………………………………………………

ElseIf логическое_выражение_N–1 Then

[блок_операторов_N–1]

[блок_операторов_N]

 

Действие оператора If поясняется блок-схемой, приведенной на рис. 5.

 

 

Рис. 5. Блочная форма оператора If…Then

 

Пример 3.Определение количества знаков в числе от 0 до 1000.

 

Sub blochnaya_forma_If()

Dim x As Single

Dim y As Integer

m1: x = InputBox("Введите целое положительное число в интервале от 0 до 1000", "Запрос задачи")

If x < 0 Or x > 100 Or x <> Int(x) Then

'повтор ввода, если ввели не отвечающее требованиям число

MsgBox "Вы ввели не верное число", , "Повторите ввод"

GoTo m1:

ElseIf x < 10 Then

y = 1

ElseIf x < 100 Then

y = 2

ElseIf x < 1000 Then

y = 3

Else

y = 4

End If

MsgBox "Число " & x & " имеет " & y & " знак(а)", , "Решение задачи"

End Sub

 

Логическое выражение, стоящее после оператора If или ElseIf может быть истинным или ложным. В отличии от арифметических выражений логические выражения принимают не числовые значения, а логические значения – "TRUE" (истина) и "FALSE" (ложь).

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

В логическом выражении допустимы два или несколько условий (операций отношения), которые связываются логическими операциями And, Or, Not (И, ИЛИ, НЕ). Логические операции осуществляют манипуляции над битами. Они возвращают значение "Истина" (не нулевое) и "Ложь" (нулевое) значения. Описание логических операций приведено в таблице 5.

 

Таблица 5. Логические функции языка VBA

 

Операция Название Логическое выражение Объяснение
And Логическое умножение (И) А And B Логическое выражение истинно, когда выполняются оба условия одновременно (истинно А и истинно В).
Or Логическое сложение (ИЛИ) А Or В Логическое выражение истинно, когда хотя бы одно из условий выполняется (истинно или А или В или оба условия одновременно).
Not Логическое отрицание (НЕ) Not A Логическое выражение истинно, когда условие A не выполняется (А ложно).
Xor Исключающее ИЛИ А Xor В Логическое выражение истинно, когда условия А и В не совпадают.
Eqv Эквивалент-ность А Eqv В Логическое выражение истинно, когда А и В одновременно истинны или одновременно ложны.
Imp Импликация A Imp B Логическое выражениепринимает значение "ложь", если A истинно, а В ложно, и значение "истина" в других случаях.

 

Пример 4. Определить, попадает ли точка с координатами под кривую функции , заданную в интервале .

 

Sub Primer()

Dim x0 As Single, x_radian As Double

Dim y0 As Double, y As Double

x0 = InputBox("Введите х координату точки от 0 до 360 градусов", "Запрос задачи на попадание")

If x0 < 0 Or x0 > 180 Then

x0 = InputBox("Вы ввели неверное число. Повторите ввод", "Повторный запрос")

End If

y0 = InputBox("Введите у координату точки", "Повторный запрос")

' перевод х из градусов в радианы

x = x0 * 4 * Atn(1) / 180

' вычисляем значение функции

y = Sin(x_radian)

If y > y0 Then

MsgBox "Точка лежит под кривой", , "Ответ"

ElseIf y = y0 Then

MsgBox "Точка лежит на кривой", , "Ответ"

ElseIf y < y0 Then

MsgBox "Точка лежит над кривой", , "Ответ"

End If

End Sub

 

Результат программы:

 

 

 

 

 

Циклические программы. Оператор For…Next

 

В программировании часто возникает необходимость многократного выполнения однотипных операций, выполняемых по определенному алгоритму. Такие задачи называют циклическими, а группу операторов, которые используются в программе многократно – циклом. Различают циклы арифметические и итерационные. Примером циклического алгоритма является задача ввода в программу массива данных, их обработка и вывод.

Реализация арифметического цикла осуществляется операторами For…Next.

Цикл For…Next организует счетный цикл и используется, когда необ­ходимо повторить действие или ряд действий заданное количество раз, из­вестное до начала выполнения цикла.

Цикл For...Nextимеет следующий синтаксис:

For счетчик = Начало То Конец [Step Шаг]

[Операторы цикла]

Next счетчик

Счетчик — любая переменная, по которой организован цикл.

В квадратных скобках указан необязательный параметр.

По умолчанию VBA увеличивает счетчик на 1 каждый раз при выпол­нении операторов в цикле (шаг по умолчанию равен 1). Если нужно другое значение шага, надо включать в оператор For необязательное ключевое сло­во Step.

При выполнении цикла For…Next VBA поступает следующим образом:

– присваивает значение Начало переменной счетчик;

- выполняет все операторы, представленные с помощью Операторы
цикла, пока не достигнет ключевого слова Next, которое указывает VBA на
то, что достигнут конец тела цикла;

- изменяет счетчик на величину Шаг (если в оператор For включается необязательное ключевое слово Step; если Step не определено, то VBA по умолчанию увеличивает пере­менную на 1);

- возвращается к началу цикла и сравнивает текущее значение счетчика
со значением Конец. Если значение счетчика меньше или равно Конец, VBA
выполняет цикл снова. Если значение Счетчика больше значения Конец,
VBA продолжает выполнение кода с первого оператора после ключевого
слова Next.

Если Шаг >0, то такой цикл называется циклом с возрастающим счет­чиком; если Шаг <0 – цикл с убывающим счетчиком. В последнем случае Начало должно быть больше, чем Конец.

Цикл For…Next выполняется только в том случае, если начальное зна­чение счетчика цикла плюс шаг изменения значения счетчика меньше или равно конечному значению счетчика. Если конечное значение счетчика меньше начального значения, то шаг должен быть отрицательным. Цикл вы­полняется до тех пор, пока текущее значение счетчика не выйдет за рамки конечного значения. При завершении текущего цикла к значению счетчика прибавляется значение шага. Если начальное и конечное значения счетчика совпадают, то цикл выполняется один раз, вне зависимости от значения шага. Если шаг равен нулю, цикл продолжается неопределенное количество раз.

Пример 5.Построить заполнить таблицу значениями функции

на интервале 16° < х < 40° с шагом 4°.

Sub Demo_ForNext()

' Объявляем начало, конец цикла, шаг

Dim xStart, xEnd, xStep As Integer

Dim x As Integer

Dim i As Integer

Dim xradian, у As Single

‘ Чтение числовых значений из рабочего листа Excel

xStart = Cells(2, 2)

xEnd = Cells(3, 2)

xStep = Cells(4, 2)

' Номер строки заголовка таблицы значений функции

i = 1

For x = xStart To xEnd Step xStep

' Вычисляем значение х в радианах

xradian = 3.14* х/180

' Вычисляем значение функции

у = (2.51 * Sin (xradian ) / (2 + 3* Cos (xradian))^ (1 / 3))

i = i + 1

' Передаем полученные значения в рабочий лист

Cells(i, 4) = х

Cells(i, 5) = y

Next x

End Sub