Главная страница

Информатика VBA. Учебное пособие по дисциплинам Информатика иИнформационные технологии


Скачать 1.05 Mb.
НазваниеУчебное пособие по дисциплинам Информатика иИнформационные технологии
АнкорИнформатика VBA.pdf
Дата28.01.2017
Размер1.05 Mb.
Формат файлаpdf
Имя файлаИнформатика VBA.pdf
ТипУчебное пособие
#900
страница5 из 11
1   2   3   4   5   6   7   8   9   10   11
частичной суммой) хранится в некоторой переменной SUM, а переменной A присвоено значение очередного слагаемого a
n+1
, то для получения суммы S
n+1
необходимо вычислить значение выражения SUM + A. Это значение для суммирования при следующем повторении тела цикла должно снова оказаться в пере- менной SUM. И так как находящееся в SUM значение S
n уже больше не потребуется, то переменной SUM можно присваивать только что вычисленное значение S
n+1
. Таким образом, в цикле необходимо мно- гократно выполнять оператор
SUM = SUM + A , а перед каждым его выполнением присваивать переменной A значе- ние очередного слагаемого. Начать можно, положив SUM=0, а затем
S
n
S
n+1

54 в цикле последовательно присваивать A значения a
1
, a
2
, a
3
,...,a
m
. Од- нако, если первый член a
1
ряда слагаемых выпадает из общей законо- мерности их вычислений (например: S = 2 + n + n
2
+ n
3
+ ..
.), то его следует сразу присвоить переменной SUM(SUM=2), а затем в цикле последовательно придавать A значения a
2
, a
3
,..., a
m
Представим сказанное как схемы накапливания суммы где A= a
1
, a
2
, a
3
,..., a
m
Рисунок 4.1 – Схемы накапливания суммы элементов группы
При накапливании произведения группы чисел в первой схеме вместо начального значения «0» задается единица («1»), а символ операции сложения заменяется на символ операции умножения
(«звездочка»).
При определении количества элементов группы данных исполь- зуется первая схема накапливания суммы чисел, только к переменной обозначающей количество элементов прибавляется не значение эле- мента, а единица.
Циклы могут быть организованы с использованием оператора сравнения If с командой GoTo (см. примеры 3.3 и 3.4). Однако во всех языках программирования для организации циклов существуют специальные операторы. В языке VBA такими операторами являются операторы For и Do. Переменная, которая определяет количество по- вторений цикла, называется параметром цикла.
4.1
Оператор цикла For
Оператор цикла For служит для организации циклов с преду- словием, параметр которого меняется по закону арифметической про- где A= a
2
, a
3
,..., a
m

55 грессии либо выбирается из группы элементов. Оператор For имеет две разновидности - оператор For для организации циклов, в которых параметр цикла изменяется по закону арифметической прогрессии, и оператор For Each.
Синтаксис оператора For для организации циклов, в которых параметр цикла изменяется по закону арифметической прогрессии:
For
α
=
α
нач.
To
α
кон.
[Step
Δ
α
]
тело цикла
Next [
α
] где
α
- переменная числового типа, являющаяся параметром цик- ла, определяет количество выполненных итераций;
α
нач.
- начальное значение параметра цикла – любое арифметиче- ское выражение (в частном случае – константа или пере- менная);
α
кон
. -
конечное значение параметра цикла – любое арифметиче- ское выражение;
Δ
α
-
шаг изменения параметра цикла – любое арифметическое выражение.
Оператор Next последний оператор цикла. Он ограничивает действие оператора For. Имя переменной, являющейся параметром цикла, в операторе Next можно не указывать. Но если имя перемен- ной цикла указано (это повышает наглядность и читаемость програм- мы), оно должно совпадать с именем параметра предыдущего опера- тора For – ошибка при написании имени переменной приведет к син- таксической ошибке при выполнении программы.
Цикл, заданный оператором For, является циклом с предуслови- ем и работает следующим образом. Генерируется арифметическая прогрессия последовательности значений параметра цикла в диапазо-

56 не от
α
нач до
α
кон с шагом Δ
α.
Операторы, образующие тело цикла, выполняются для каждого значения
α
из этой последовательности, при этом изменять параметры
α
,
α
нач
,
α
кон
,
Δ
α
внутри цикла недопус- тимо. Если шаг арифметической прогрессии равен единице, то слу- жебное слово Step с числом 1 можно не задавать. После завершения цикла переменная, являвшаяся параметром цикла, будет равна по- следнему значению арифметической прогрессии плюс шаг (Δ
α).
Для цикла с предусловием проверка на выполнение очередной итерации осуществляется перед ее началом. Цикл может не выпол- ниться ни разу, если при положительном значении шага (Δ
α)
значе- ние
α
нач
,
будет больше значения
α
кон
, либо, если при отрицательном значении шага (Δ
α)
значение
α
нач
,
будет меньше значения
α
кон.
. Од- нако переменная, обозначающая параметр цикла, при этом получит значение, равное
α
нач
Для досрочного завершения цикла For следует использовать команду Exit For, которую, как правило, располагают в управляющей конструкции If, например:
If условие Then Exit For
При досрочном завершении цикла переменная, являющаяся парамет- ром цикла, сохраняет свое текущее значение.
При задании конечного значения параметра цикла следует учи- тывать то обстоятельство, что любое арифметическое действие над вещественными числами в компьютере выполняется с некоторой по- грешностью. Это связано с тем, что не каждое десятичное число можно точно перевести в двоичную систему счисления, а также с тем, что мантисса вещественного числа содержит либо 7 (тип Single), либо
15 (тип Double) цифр. Поэтому, при записи оператора For с вещест- венным параметром цикла конечное значение параметра следует не- много увеличивать для положительного значения шага Δ
α, либо

57 уменьшать для отрицательного значения шага. Как правило, к тре- буемому конечному значению добавляют или отнимают половину шага изменения параметра цикла. В общем случае лучше организо- вывать циклы по параметру имеющему целый тип.
Оператор цикла For Each
Параметром цикла, образованного конструкцией такого вида оператора For, является элемент из некоторой группы данных, на- пример, такой как коллекция объектов или массив.
Синтаксис оператора:
For Each
имя_элемента In группа
тела цикла
Next [
имя_элемента]
где имя_элемента - переменная, используемая для обозначения очередного элемента из группы;
группа - это объект коллекции или массив;
тело цикла – операторы, осуществляющие обработку значения очередного элемента из группы.
Пример 4.1. На активном листе таблицы Excel (см. рисунок4.2) выделена группа ячеек. Определить количество и сумму чисел выде- ленной области.
Рисунок 4.2 - Изображение данных в таблице и выделенная группа объектов

58
Sub
Пример_4_1()
s = 0: k=0
For Each Elem In Selection
'Цикл для элемента Elem в группе Selection s = s + Elem : k=k+1
Next
MsgBox
"Ответ: Количество элементов в группе " & k & " их сумма"& s
End Sub
Процедура обрабатывает элементы выделенной области (объект
Selection
) построчно, т. е. элемент «Elem» последовательно принима- ет значения 1; 3; -1; 2; 5 и т.д. (см. рисунок 4.2). В результате работы процедуры на экран активного листа будет выведено диалоговое ок- но, представленное на рисунке 4.3.
Рисунок 4.3 - Диалоговое окно, выведенное процедурой «Пример_4_1»
После завершения цикла значение элемента «Elem» становится неоп- ределенным.
4.2
Оператор цикла Do
C использованием оператора цикла Do (делай) можно програм- мировать и циклы с предусловием и циклы с постусловием, а также бесконечные циклы. Количество итераций в цикле конструкции Do зависит от заданного условия окончания цикла. Существует пять раз- новидностей данной циклической конструкции.
Первые две разновидности используются для создания цикла с предусловием:
Do While
условие
Do Until
условие тело цикла тело цикла
Loop
Loop

59
В цикле Do While операторы тела цикла выполняются пока «усло-
вие», заданное в заголовке, принимает значение «истина» (True), если оно ложно (False), то осуществляется выход из цикла и управление передается оператору, расположенному после служебного слова Loop
(цикл). Во второй разновидности конструкции DO (Do Until), тело цикла выполняется до тех пор, пока «условие», заданное в заголовке, имеет значение «ложь» (False), а если оно истинно (True), осуществ- ляется переход к оператору, расположенному после служебного слова
Loop
. Цикл с предусловием может не выполняться ни разу, если при начальных значениях параметра цикла «условие», заданное в заголов- ке цикла, принимает соответствующее значение. Неправильная за- пись логического выражения в заголовке цикла может привести к бесконечному циклу, и, если не предпринять дополнительных дейст- вий, к «зацикливанию» программы.
При использовании следующих двух разновидностей цикличе- ской конструкции DO:
Do
Do
тело цикла тело цикла
Loop While
условие
Loop Until
условие создается цикл с постусловием, в котором операторы тела цикла вы- полняются хотя бы один раз, вне зависимости от условия. Условие проверяется после первого выполнения тела цикла. Операторы тела цикла Do разновидности Loop While выполняются до тех пор, пока
«
условие», заданное в последней строке цикла, принимает значение
«истина» (True), а в разновидности Loop Until – тело цикла выполня- ется до тех пор, пока условие не выполняется (имеет значение False).
Неправильная запись условия в этих разновидностях цикла DO также может привести к «зацикливанию» программы.
Пятая разновидность циклической конструкции DO имеет сле- дующий синтаксис:

60
Do
тело цикла
Loop
и используется для создания «бесконечных» циклов. Такой цикл об- речен на бесконечное повторение. Однако он не лишен смысла вме- сте с условием завершения, помещенным в тело такого цикла. Выход из цикла разновидности Do_Loop осуществляется командой Exit Do, записываемого, как правило, в условном операторе If:
If
условие Then Exit Do
Эту же команду следует применять для программирования досрочно- го выхода из цикла, организованного с использованием других разно- видностей оператора DO. После команды Exit Do управление переда-
ётся оператору, следующему за оператором Loop.
Применение оператора DO с бесконечным циклом позволяет от- казаться от использования в программе оператора GoTo. Так пример
3.4 может быть реализован с бесконечным циклом.
Пример 4.2.
Sub
Пример_4_2()
Dim x As Single, y As Single, n As Integer, k As Integer
' считываем из диалогового окна координаты x и y
Do
x = CSng ( InputBox
("Задайте координату X"))
y = CSng ( InputBox
("Задайте координату Y"))
' функция Csng переводит строку текста в число и требует,
' разделителя дробной и целой части числа - символа "запятая"
' вычисление значения n по формуле с упрощенным оператором If
n = 2
If y > -x And y > x Then n = 1
If x ^ 2 + y ^ 2 > 4 Then n = 0
' выводим полученный результат в диалоговое окно с заголовком
' "Ответ" и двумя световыми кнопками - "Повтор" и "Отмена"

61 k = MsgBox
("Номер области" & Str(n), vbRetryCancel, "Ответ")
' анализируем код нажатой кнопки
If k = vbCancel Then Exit Do '
если нажата кнопка "Отмена" –
' завершаем работу
' если нажата клавиша "Повтор" продолжить цикл DO
Loop Do
End Sub
4.3
Вложенные циклы
Для расчета графика функции двух переменных y=F(a,x) ис- пользуются циклы, вложенные один в другой. Один из таких циклов называют внешним, а другой внутренним. Телом внешнего цикла яв- ляется весь внутренний цикл. При записи рассчитанных значений функции следует учитывать тип диаграммы, с помощью которой бу- дут отображаться кривые. Для диаграммы типа «График» представ- ляется целесообразным разместить данные в виде таблицы: один столбец которой содержит значения аргумента x i
, а соседние столбцы содержат координаты y i
для заданных значений второго параметра.
Если же предполагается выводить графики в виде диаграммы типа
«Точечная», а для неоднозначных функций это единственный способ корректного их представления в Excel, то значения аргумента и функции должны располагаться в соседних столбцах. Причем, если на одну диаграмму выводятся точки нескольких кривых, то точки од- ной кривой от точек другой должны отделяться пустой строчкой.
Пример 4.3. Рассчитать значения функции
2 1
x
a
x
a
Y

+

=
на интерва- ле [-4, 4], с шагом 0,2. Параметр «а» последовательно принимает зна- чения 1; 1,5; 2; 2,5. По рассчитанным значениям точек функции по- строить в Excel диаграммы типа «График».

62
Option Explicit
' запрет на использование в программе ' необъявленных переменных
Sub
Пример_4_3()
Dim x As Single, a As Single
Dim i As Integer, k As Integer
Cells(1, 1) = "x\
а" ' Записываем в первую строку заголовок таблицы a = 1
For k = 2 To 5 '
Цикл по параметру a (k-номер столбца для записи Yi)
Cells(1, k) = a '
Запись в первую строку таблицы значения параметра a
i = 2
' Номер строки для выводимых координат
For x = -4 To 4.1 Step 0.2 '
Цикл по параметру x
If k = 2 Then Cells(i, 1) = x
' Запись в ячейку координаты x
Cells(i, k) = a*x / Sqr(1 + a*x^2)
' Запись в ячейку координаты y
i = i + 1 '
Номер следующей строки для вывода координат
Next x a = a + 0.5
' изменяем значение a для следующего цикла
Next k '
заканчиваем цикл по параметру a
End Sub
На рисунке 4.4 приведен вид полученной таблицы значений функции и диаграмма с графиками для разных значений параметра а. Следует отметить следующее. В первом столбце таблицы выведены значения переменной х, которые вычисляются по закону арифметической про- грессии в операторе «For x=-4 …». Нетрудно заметить, что ожидае- мого нулевого значения переменной х нет, а есть значение 6,258∙10
-7
Как было указано выше, это связано с ошибками округления резуль- татов арифметических действий в ЭВМ (если переменной х присво- ить тип Double, ошибка округления будет значительно меньше, но она все равно останется). Ошибка начинает проявляется с числа «–
1,8», а для положительных значений ошибка вычисления переменной

63 х проявляется в шестом знаке после запятой. Поэтому, если бы в опе- раторе For по параметру х, конечное значение было задано ровно 4, как в условии задания, то последняя точка кривой не была бы рассчи- тана. Для исключения такой ошибки, конечное значение в этом опе- раторе увеличено на половину шага. Цикл по параметру «a» оформ- лен через переменную «k» целого типа, поэтому изменять конечное значение не требуется.
Рисунок 4.4 - Таблица значений и графики функции
2 1
x
a
x
a
Y

+

=
Пример 4.4. Изобразить на точечной диаграмме Excel полярные кривые r=|20+a|cos
2
φ - sin
2
φ||, 0≤ φ ≤2π, Δφ =π/36, при каждом из значений параметра а= 60, 40, 20, 0.
В первый столбец таблицы выведем значения координаты x=r
(φ)∙cos(φ), в соседний столбец выведем значения координаты y=r
(φ)∙sin(φ). Значение параметра «a», будем выводить в третий стол-

64 бец рядом с координатами первой точки очередной кривой. Учтем особенность построения точечных кривых – координаты каждой по- следующей кривой, строящейся независимо от предыдущей, должны отделяться друг от друга пустой строкой в таблице.
Option Explicit '
запрет на использование в программе
' необъявленных переменных
Sub
Пример_4_4()
Dim r As Single,a As Single, fi As Single
Dim H As Single
Dim i As Integer
Const pi As Single = 3.1415927
'
Заносим заголовки в первую строку таблицы
Cells(1, 1) = "x": Cells(1, 2) = "y": Cells(1, 3) = "a"
H = pi / 36
' вычисляем шаг изменения угла
i = 2
' Номер строки для выводимых координат.
For a = 60 To 0 Step -20 '
Цикл по параметру a
Cells(i, 3) = a '
Запись в ячейку Excel значения параметра
For fi = 0 To 2 * pi + 0.01 Step H
' Цикл по углу fi
' число 0.01 учитывает ошибку при вычислении конечного значения fi
r = Abs(20 + a * Abs(Cos(fi) ^ 2 - Sin(fi) ^ 2))
Cells(i, 1) = r * Cos(fi)
' Запись в ячейку координаты x
Cells(i, 2) = r * Sin(fi)
' Запись в ячейку координаты y
i = i + 1
' Номер следующей строки для вывода координат.
Next
' конец внутреннего цикла по параметру fi
i = i + 1
' Для пропуска строки после вывода координат кривой
1   2   3   4   5   6   7   8   9   10   11


написать администратору сайта