Математические выражения (операторы и функции)
Подход к теме: зубрить не надо, просто «пробегитесь».
Обычные математические действия (+ * - /) выполняются над двумя числами. В то же время существуют менее обычные действия, которые выполняются над одним числом (извлечение квадратного корня, определение модуля и т.п.).
Действия над двумя числами реализуются с помощью операторов. Формат оператора:
<числовое значение 1> <оператор> <числовое значение 2>
например (считаем, что существует переменная apple):
apple * 2
Действия над одним числом реализуются с помощью функций. Формат функции:
<функция>(<аргумент>)
например (считаем, что существуют переменные a и b):
Sqr(a * a + b * b)
И операторы, и функции в результате своего выполнения вырабатывают (возвращают) значения. Их нельзя использовать как самостоятельные строки программы. Они могут использоваться (пока):
· справа от знака равенства
· в качестве аргументов команд или других функций.
Например:
diag = Sqr(a * a + b * b)
MsgBox apple * 2
Некоторые операторы
Считаем, что операторы + – * / известны.
Оператор | Смысл | Пример | Результат |
^ | возведение в степень | a = 2 ^ 3 | 8 |
\ | целочисленное деление | a = 32 \ 5 | 6 |
mod | остаток при делении | a = 32 mod 5 | 2 |
Некоторые фнкции
Функция | Смысл | Пример | Результат |
Sqr | извлечение квадратного корня | a = Sqr(16) | 4 |
Abs | модуль числа | a = Abs(5) a = Abs(-5) | 5 5 |
Sgn | знак числа в виде 1, 0 или -1 | a = Sgn(5) a = Sgn(0) a = Sgn(-8) | 1 0 -1 |
Int | целая часть числа | a = Int(3.8) | 3 |
|
|
Ветвление
Вновь начнем с примера. Очень добрый преподаватель измерил знания студентов в процентах. За уровень более 50% он ставит оценки «5», а за 50 и менее – оценки «4» (он «принципиально» против троек и двоек). Фрагмент, непосредственно относящийся к ветвлению, выделен.
Dim proc As Double, otmetka As Integer
proc = <значение из таблицы>
If ball > 50 Then
otmetka = 5
Else
otmetka = 4
End If
<значение из таблицы> = otmetka
Мы видим:
§ традиционное название структуры: If
§ «скобки» вида If – End If
§ окончание первой строки словом Then (с т.зр. синтаксиса оно является избыточным и о нем все время забываешь)
§ границу между ветвями в виде слова Else на отдельной строке.
Структуру ветвления в общем виде можно предстваить так:
If <условие> Then
<действия-1, можно в несколько строк>
Else
<действия-2, можно в несколько строк>
End If
Деление на строки обязательно.
В неполном ветвлении раздел “Else” + <действия-2> отсутствуют:
If <условие> Then
<действия-1, можно в несколько строк>
End If
Условие как правило формулируется с помощью математических операторов сравнения: <, >, =.
Кроме задачи, описанной выше, реализуйте еще одну:
|
|
В соседних ячейках написаны два числа. В третьей ячейке надо получить большее из этих чисел.
A | B | C | |
1 | Число-1 | Число-2 | Большее |
2 | 25 | 47 | 47 |
а может быть так:
A | B | C | |
1 | Число-1 | Число-2 | Большее |
2 | 13 | 10 | 13 |
Циклы
Подход к уроку:
Покажем два основных вида цикла на примере обработки последовательностей, расположенных в соседних ячейках таблицы (в столбце). Пока не рассматривается цикл Do-Loop и некоторые вопросы использования циклов при взаимодействии с таблицей.
Возьмем следующую задачу. Пусть в столбце находятся цены товаров в долларах. Справа от каждого числа мы хотим вывести цену в рублях.
A | B | C | D | |
1 | Товар | Доллары | Рубли | |
2 | Товар-1 | 60 | 1800 | |
3 | Товар-2 | 40 | 1200 | |
4 | Товар-3 | 70 | 2100 | |
*** | *** | *** | ||
11 | Товар-N | 35 | 1050 | |
Пусть объектная переменная mesto привязана к ячейке B2. В этом случае можно считать. что в таблице создан виртуальный двумерный массив, к элементам которого мы можем обращаться с помощью «формулы»
mesto(<номер_строки>, <номер_столбца>)
то есть практически так же, как в Паскале, только не квадратными скобками, а с круглыми.
|
|
Для начала будем считать, что строк ровно 10. Это дает нам возможность познакомиться с циклом For i.
Sub Magazin()
Dim mesto As Range
Dim doll As Double, rubli As Double, kurs As Double
Dim i As Integer
Set mesto = Range("B2")
For i = 1 to 10
doll = mesto (i, 1)
rubli = doll * kurs
mesto (i, 2) = rubli
Next i
End Sub
Мы видим:
§ традиционное название структуры (For) и имя счетчика (i).
§ «скобки» вида For i – Next i
§ в конце строки For нет слова Do (как в Паскале)
§ переменную-счетчик необходимо объявлять, с типом Integer (это очень странно, но так сделано, приходится с этим считаться)
Шаг счетчика по умолчанию +1. Его можно измениь с помощью ключевого слова Step, например:
For i = 1 to 10 Step 2
Значение Step мжет быть отрицательным, соответственно паскалевского варианта DownTo в VBA нет.
Реализуйте и проверьте эту процедуру на ПК.
Циклы For можно вкладывать друг в друга. Пусть нам надо заполнить квадрат 4х4 единицами:
Dim mesto As Range
Дата добавления: 2019-03-09; просмотров: 211; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!