Федеральное государственное...

37
Федеральное государственное бюджетное образовательное учреждение высшего образования «Московский государственный университет путей сообщения Императора Николая II» ___________________________________________________ Кафедра «Системы автоматизированного проектирования» Э.Р.РЕЗНИКОВА РЕАЛИЗАЦИЯ ЦИКЛИЧЕСКИХ АЛГОРИТМОВ НА VBA В СРЕДЕ MS EXCEL Учебно-методическое пособие Москва – 2016

Upload: others

Post on 17-Jun-2020

14 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Федеральное государственное бюджетное80317.selcdn.ru/miit/59196fcbd4a60cikly-vba.pdf · Циклы с условием Циклы с условием

Федеральное государственное бюджетное

образовательное учреждение высшего образования

«Московский государственный университет путей

сообщения Императора Николая II»

___________________________________________________

Кафедра

«Системы автоматизированного проектирования»

Э.Р.РЕЗНИКОВА

РЕАЛИЗАЦИЯ ЦИКЛИЧЕСКИХ АЛГОРИТМОВ

НА VBA В СРЕДЕ MS EXCEL

Учебно-методическое пособие

Москва – 2016

Page 2: Федеральное государственное бюджетное80317.selcdn.ru/miit/59196fcbd4a60cikly-vba.pdf · Циклы с условием Циклы с условием

Федеральное государственное бюджетное

образовательное учреждение высшего образования

«Московский государственный университет путей

сообщения Императора Николая II»

________________________________________________

Кафедра

«Системы автоматизированного проектирования»

Э.Р.РЕЗНИКОВА

РЕАЛИЗАЦИЯ ЦИКЛИЧЕСКИХ АЛГОРИТМОВ

НА VBA В СРЕДЕ MS EXCEL

Учебно-методическое пособие

для студентов специальности САПР

и строительных специальностей

Москва – 2016

Page 3: Федеральное государственное бюджетное80317.selcdn.ru/miit/59196fcbd4a60cikly-vba.pdf · Циклы с условием Циклы с условием

УДК 004

Р 34

Резникова Э.Р. Реализация циклических алгоритмов на

VBA в среде MS Excel: Учебно-методическое пособие. – М.:

МГУПС (МИИТ), 2016. – 36 с.

В учебно-методическом пособии разбираются вопросы

реализации циклических алгоритмов со счетчиком и с

условием при создании VBA-приложений в среде Microsoft

Excel. Приводятся многочисленные примеры для лучшего

освоения материала.

Учебно-методическое пособие предназначено для

использования студентами специальности САПР и

строительных специальностей при изучении курсов

«Информатика», «Математика» и «Программирование».

Рецензент:

Доцент кафедры «Менеджмент качества» МГУПС (МИИТ)

к.ф.-м.н. А.А.Рогов

© МГУПС (МИИТ), 2016

Page 4: Федеральное государственное бюджетное80317.selcdn.ru/miit/59196fcbd4a60cikly-vba.pdf · Циклы с условием Циклы с условием

Содержание

Введение .................................................................................. 4

1. Циклы со счетчиком ........................................................... 5

2. Циклы с условием ............................................................. 15

3. Применение циклов для суммирования рядов ............... 19

4. Применение цикла для приближенного вычисления

определенного интеграла ................................................. 24

5. Программа для численного решения задачи Коши

методом Эйлера ................................................................. 26

Применение цикла со счетчиком - варианты заданий ....... 28

Вычисление суммы - варианты заданий ............................. 30

Суммирование рядов - варианты заданий .......................... 31

Приближенное вычисление определенного интеграла -

варианты заданий .................................................................. 32

Решение задачи Коши методом Эйлера - варианты

заданий ................................................................................... 33

Список литературы ............................................................... 35

Page 5: Федеральное государственное бюджетное80317.selcdn.ru/miit/59196fcbd4a60cikly-vba.pdf · Циклы с условием Циклы с условием

4

Введение

VBA (Visual Basic for Applications) является системой

программирования, встроенной в прикладные программы.

Все компоненты пакета Microsoft Office, в том числе и

программа для работы с электронными таблицами Excel,

содержат средства создания VBA-приложений.

Использование VBA-программ в Excel существенно

расширяет его возможности и позволяет эффективно

решать вычислительные задачи. В VBA-программах

можно реализовать любую алгоритмическую конструкцию

(линейную, разветвляющуюся и циклическую). Часто при

решении задач необходимо организовать повторение

некоторых действий. Именно для этого используют

циклические алгоритмы и программы. Можно выделить

два основных типа циклов:

✓ Циклы со счетчиком задают определенное

количество повторений.

✓ Циклы с условием определяют, в каком случае

повторения продолжать либо останавливать.

Рассмотрим формы записи и правила работы

циклических операторов VBA. При изучении материала

все разбираемые примеры желательно сразу напечатать и

запустить на выполнение в редакторе VBA в среде

Microsoft Excel. Примеры помогут разобраться в работе

циклических операторов, а также выполнить лабораторные

работы по информатике и математике.

Page 6: Федеральное государственное бюджетное80317.selcdn.ru/miit/59196fcbd4a60cikly-vba.pdf · Циклы с условием Циклы с условием

5

1. Циклы со счетчиком

Циклы со счетчиком используются в случаях, когда

необходимо повторить действия определенное количество

раз (например, вычислить функцию в 10 точках или

просуммировать 30 членов ряда). При этом счетчик может

использоваться либо только для нумерации повторений (в

простых случаях), либо как элемент повторяющегося

действия. Например, для суммирования ряда

337531

33753 xxxxS можно использовать как цикл

со счетчиком от 1 до 16 (всего прибавляется к первой

единице 16 дробей), так и цикл со счетчиком от 3 до 33 с

шагом 2 (так меняются знаменатели дробей).

Заданное количество повторений реализует оператор

цикла For…Next.

For счетчик=нач.знач. To кон.знач. [Step шаг]

блок операторов

Next счетчик

Значение шага и слово Step указывать не обязательно,

по умолчанию он равен 1. Значение счетчика цикла

меняется от начального к конечному с заданным шагом, и

с каждым значением счетчика выполняется блок

операторов (происходит один проход цикла).

Алгоритм цикла For…Next 1) присвоить счетчику начальное значение

2) счетчик еще не перешел через конечное значение?

если да – к пункту 3, иначе – выход из цикла.

3) выполнить блок операторов один раз с текущим

значением счетчика

4) изменить значение счетчика, прибавив к нему величину

шага, и вернуться к пункту 2.

Page 7: Федеральное государственное бюджетное80317.selcdn.ru/miit/59196fcbd4a60cikly-vba.pdf · Циклы с условием Циклы с условием

6

Примечание. В пункте 2 при положительном шаге

проверяется условие “счетчик <= кон.знач.”, а при

отрицательном шаге проверяется “счетчик >= кон.знач.”

Пример – пятикратный повтор ввода аргумента x и

расчета экспоненты

Dim x As Double, p As Integer

For p = 1 To 5

x = InputBox(“Аргумент X:“)

MsgBox “экспонента = “ & Exp(x)

Next p

начало

конец

вывод ex

P := 1,5

ввод x

Page 8: Федеральное государственное бюджетное80317.selcdn.ru/miit/59196fcbd4a60cikly-vba.pdf · Циклы с условием Циклы с условием

7

Такой цикл повторит 5 раз два действия (ввод

аргумента x и вывод значения ex). Здесь счетчик p

используется только для подсчета количества проходов

цикла. Пошаговое описание работы этого цикла:

p=1

p<=5 ? да

x = InputBox(“Аргумент X:“) первый проход

MsgBox “экспонента = “ & Exp(x)

p=2

p<=5 ? да

x = InputBox(“Аргумент X:“) второй проход

MsgBox “экспонента = “ & Exp(x)

p=3

p<=5 ? да

x = InputBox(“Аргумент X:“) третий проход

MsgBox “экспонента = “ & Exp(x)

p=4

p<=5 ? да

x = InputBox(“Аргумент X:“) четвертый проход

MsgBox “экспонента = “ & Exp(x)

p=5

p<=5 ? да

x = InputBox(“Аргумент X:“) пятый проход

MsgBox “экспонента = “ & Exp(x)

p=6

p<=5 ? нет

выход из цикла

Page 9: Федеральное государственное бюджетное80317.selcdn.ru/miit/59196fcbd4a60cikly-vba.pdf · Циклы с условием Циклы с условием

8

Пример цикла для простого повторения действий

Повторить 3 раза следующие действия:

– ввод с клавиатуры градусной меры угла alfa (0-360)

– пересчет введенного значения в радианы и вычисление

синуса этого угла

Sub CommandButton1_Click()

Dim alfa As Double, S As Double, i As Integer

For i = 1 To 3

alfa = InputBox("Введите градусную меру угла (0-360)")

alfa = alfa * 3.14159 / 180 ‘перевод из градусов в рад.

S = Sin(alfa)

MsgBox "Синус этого угла равен " & Format(S, "0.000")

Next i

End Sub

В этом примере цикл повторяет 3 раза четыре

действия: ввод угла alfa, перевод из градусов в радианы,

вычисление синуса и вывод его значения. Здесь счетчик i

используется только для подсчета количества проходов

цикла и не участвует в работе операторов тела цикла. Это

возможно для самых простых вариантов применения

циклов, а в следующих задачах при каждом новом проходе

цикла операторы тела цикла будут использовать новое

значение счетчика.

Page 10: Федеральное государственное бюджетное80317.selcdn.ru/miit/59196fcbd4a60cikly-vba.pdf · Циклы с условием Циклы с условием

9

Пример – вычисление факториала n! = 1.2.3. … .n

Dim f As Double

Dim n As Integer, m As Integer

n = InputBox("n-?")

f = 1

For m = 2 To n

f = f * m

Next m

MsgBox "n!= " & f

начало

конец

f

m := 2, n

n

f := 1

f := f * m

Page 11: Федеральное государственное бюджетное80317.selcdn.ru/miit/59196fcbd4a60cikly-vba.pdf · Циклы с условием Циклы с условием

10

В этой программе переменная f хранит значения

факториала, накапливая произведение всех натуральных

чисел от 1 до n включительно. Здесь счетчик m уже не

просто нумерует повторения, а является множителем. Если

выполнить эту программу и ввести n=4, то будет

выполнено 3 прохода цикла (при значениях m 2, 3 и 4).

Пошаговое выполнение цикла:

f = 1

m=2 первый проход

m<=4 ? да

f = 1 * 2 (f получит значение 2)

m=3 второй проход

m<=4 ? да

f = 2 * 3 (f получит значение 6)

m=4 третий проход

m<=4 ? да

f = 6 * 4 (f получит значение 24)

m=5

m<=4 ? нет

выход из цикла

вывод ответа n! = 24

Если при выполнении этой программы ввести n=0 или

n=1, то не будет ни одного прохода цикла, т.к. начальное

значение счетчика m сразу окажется больше конечного.

Тогда переменная f просто сохранит свое начальное

значение (f=1), которое и будет выведено в ответе.

Page 12: Федеральное государственное бюджетное80317.selcdn.ru/miit/59196fcbd4a60cikly-vba.pdf · Циклы с условием Циклы с условием

11

Пример – вычисление суммы квадратных корней из

круглых чисел по убыванию от 300 до 150.

150280290300 P

P = 0

For k = 300 To 150 Step -10

P = P + Sqr(k)

Next k

MsgBox “P=” & P

Здесь переменная P предварительно обнуляется, а

затем с каждым проходом цикла увеличивается на одно

очередное слагаемое. При первом проходе цикла

слагаемым будет квадратный корень из числа 300, при

втором проходе - квадратный корень из числа 290, при

третьем проходе - квадратный корень из числа 280 и так

далее до 150 включительно. Значение счетчика цикла k

меняется от 300 до 150 с шагом -10, т.е. уменьшается после

каждого прохода цикла на 10.

Пример – вычисление суммы

2222 40

1

15

1

10

1

5

1 Q

Q = 0

For a = 5 To 40 Step 5

Q = Q + 1 / (a^2)

Next a

MsgBox “Q=” & Q

В этом примере в качестве счетчика цикла удобно

выбрать число, которое возводится в квадрат в

знаменателе. Это значение меняется от 5 до 40 с шагом 5.

Page 13: Федеральное государственное бюджетное80317.selcdn.ru/miit/59196fcbd4a60cikly-vba.pdf · Циклы с условием Циклы с условием

12

Пример - вычислить сумму для угла α = 0.15 рад

sin5sin6sin7sin S

alfa = 0.15

S = 0

For i = 7 To 1 Step –1 ‘7 проходов при i=7,6,5,4,3,2,1

slag = Sin(i * alfa) ‘вычисляется слагаемое 7 раз

S = S + slag ‘прибавляется слагаемое 7 раз

Next i

MsgBox "S = " & Format(S, "0.000") ‘вывод суммы S 1 раз

Здесь в качестве счетчика цикла удобно выбрать

коэффициент при угле α. Этот коэффициент меняется от 7

до 1 с шагом -1. При каждом значении коэффициента к

переменной S прибавляется одно слагаемое Sin(i * alfa).

При первом проходе цикла i=7 и слагаемое Sin(7α), при

втором проходе цикла i=6 и слагаемое Sin(6α), затем i=5 и

слагаемое Sin(5α) и так далее до i=1 и Sin(α). Ответ

(значение суммы S) выводится один раз после окончания

цикла. При необходимости узнать величину каждого

слагаемого можно добавить в тело цикла после оператора

slag = Sin(i * alfa)

еще одну операцию вывода:

MsgBox "slag = " & Format(slag, "0.000")

либо организовать вывод в ячейки таблицы на текущем

листе Excel:

Cells(stroka, 1) = slag ‘вывод одного значения slag

stroka = stroka + 1 ‘переход к следующей строке

‘для вывода очередного значения

Page 14: Федеральное государственное бюджетное80317.selcdn.ru/miit/59196fcbd4a60cikly-vba.pdf · Циклы с условием Циклы с условием

13

Пример – табулировать функцию

на заданном отрезке [a;b], получить N значений

XeX

X

5.1

5.2

Чтобы получить таблицу значений функции на

отрезке, надо распределить равномерно значения

аргумента X на этом отрезке, и в каждой точке вычислить

функцию. В общем случае, чтобы получить N точек,

равномерно расположенных на отрезке, его надо разделить

на (N-1) часть. Например, при делении отрезка на 2 части

получим 3 точки: начало, середину и конец.

Sub CommandButton1_Click()

Dim a As Double, b As Double, dX As Double

Dim X As Double, Y As Double

Dim N As Integer, stroka As Integer

a = InputBox(“Начало отрезка=”)

b = InputBox(“Конец отрезка=”)

N = InputBox(“Сколько значений получить?”)

dX = (b - a) / (N – 1)

Worksheets("Лист3").Activate

Cells.Clear

stroka = 1

For X = a To b Step dX

Y = Sqr(X + 2.5) / X + 1.5 * Exp(X)

Cells(stroka, 1) = X

Cells(stroka, 2) = Y

stroka = stroka + 1

Next X

End Sub

Page 15: Федеральное государственное бюджетное80317.selcdn.ru/miit/59196fcbd4a60cikly-vba.pdf · Циклы с условием Циклы с условием

14

В этом примере:

dX – длина одной части, на которые разбит отрезок

X – текущее значение аргумента

Y – значение функции

stroka – номер строчки на листе Excel

Программа начинается с объявления всех

необходимых переменных, затем следует ввод исходных

данных (a, b, N). Далее отрезок делится на (N-1) часть, и

длина этой части записывается в dX.

Затем активируем нужный лист Excel (т.е. определяем,

к какому листу будут относиться операции с ячейками

Cells) и очищаем все его ячейки. Задаем номер первой

строки, с которой начнется вывод значений функции.

Подготовка закончена, начинается основной цикл

For X = a To b Step dX

Счетчиком цикла здесь является аргумент X, значения

которого будут меняться от начала отрезка a с шагом dX

до конца отрезка b. Для каждого значения аргумента X

реализуется один проход цикла, при котором вычисляется

значение функции Y, выводятся X и Y в ячейки листа, а

также увеличивается номер строчки для следующего

прохода.

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

a=1, b=4, N=5 a=2, b=9, N=10

Page 16: Федеральное государственное бюджетное80317.selcdn.ru/miit/59196fcbd4a60cikly-vba.pdf · Циклы с условием Циклы с условием

15

2. Циклы с условием

Циклы с условием обычно применяются в задачах, где

количество повторений определяется не числом, а

некоторым событием (например, точность достигнута или

коэффициент превысил пороговое значение). Условие

продолжения или окончания повторений может

проверяться как перед каждым проходом цикла, так и

после каждого прохода. В первом случае это цикл с

предусловием, во втором – цикл с постусловием.

Рассмотрим оператор цикла с предусловием.

While условие

блок операторов (тело цикла)

Wend

Пока условие истинно, цикл While повторяет блок

операторов.

Алгоритм цикла While … Wend

1) проверить условие

если оно истинно – к пункту 2

иначе – выход из цикла

2) выполнить блок операторов один раз

3) вернуться к пункту 1

условие

=

блок

операторов

да нет

выход из цикла

Page 17: Федеральное государственное бюджетное80317.selcdn.ru/miit/59196fcbd4a60cikly-vba.pdf · Циклы с условием Циклы с условием

16

В теле цикла обязательно должен быть оператор,

который изменяет значение переменной(-ых) из условия

таким образом, чтобы через конечное число проходов

условие стало ложным, иначе произойдет «зацикливание».

Ведь перед каждым проходом цикла условие проверяется

заново, и если оно будет постоянно оставаться истинным,

то и выход из цикла не произойдет.

Пример – найти наибольший общий делитель

чисел M и N по алгоритму Евклида

Если М>N, то НОД(М,N) = НОД(M-N,N)).

Из большего числа следует вычитать меньшее до тех пор,

пока они не будут равны. Это одинаковое значение - ответ.

1.Если числа равны, то взять их общее значение в качестве

ответа, иначе – к пункту 2.

2.Определить большее из чисел.

3.Заменить большее число разностью большего и меньшего.

4.Вернуться к пункту 1.

Dim M As Integer, N As Integer

M = InputBox(“Введите первое число”)

N = InputBox(“Введите второе число”)

While M <> N

If M > N Then M = M - N Else N = N - M

Wend

MsgBox “HOД=“ & M

Например, пусть M=30, а N=12.

30<>12 да 1-ый проход цикла 30 > 12 да M=18

18<>12 да 2-ой проход цикла 18 > 12 да M=6

6<>12 да 3-ий проход цикла 6 > 12 нет N=6

6 <> 6 нет цикл закончен

Вывод ответа НОД=6

Page 18: Федеральное государственное бюджетное80317.selcdn.ru/miit/59196fcbd4a60cikly-vba.pdf · Циклы с условием Циклы с условием

17

Цикл с условием является универсальным. Он

позволяет решить и любую задачу, реализованную с

помощью цикла со счетчиком. Условием будет «счетчик

не перешел через конечное значение», при этом начальное

значение надо записать перед циклом, а изменение

счетчика на величину шага – в теле цикла. Рассмотрим, как

решить некоторые примеры из раздела 1 (циклы со

счетчиком) другим способом.

Пример – вычисление факториала n! = 1.2.3. … .n

n = InputBox("n-?")

f = 1: m = 2

While m <= n

f = f * m

m = m + 1

Wend

MsgBox "n!= " & f

Здесь переменная f также хранит значения факториала.

Переменная для множителя m (фактически это и есть

счетчик) перед циклом получает начальное значение 2, а в

теле цикла увеличивается на 1. Проходы цикла

повторяются, пока m<=n. Как только значение m станет

больше n (в результате многократного увеличения на 1),

цикл закончится. Ответом будет значение f.

Для n=3 работа цикла будет такой:

2<=3 ? да первый проход

f = 1 * 2 (f получит значение 2)

m=2 + 1 (m получит значение 3)

3<=3 ? да второй проход

f = 2 * 3 (f получит значение 6)

m=3 + 1 (m получит значение 4)

4<=3 ? нет выход из цикла

вывод ответа n! = 6

Page 19: Федеральное государственное бюджетное80317.selcdn.ru/miit/59196fcbd4a60cikly-vba.pdf · Циклы с условием Циклы с условием

18

Пример - вычислить сумму для угла α = 0.15 рад

sin5sin6sin7sin S

alfa = 0.15

S = 0

i = 7

While i >= 1

slag = Sin(i * alfa)

S = S + slag

i = i – 1

Wend

MsgBox "S = " & Format(S, "0.000")

Здесь цикл повторяет суммирование, пока

коэффициент i больше или равен 1. В результате

уменьшения его начального значения (7) на единицу,

которое происходит на каждом проходе цикла, условие

i >= 1 перестанет быть истинным после 7 проходов, и цикл

закончится. В переменной S будет накоплена сумма 7

слагаемых.

Пример – вычисление суммы

2222 40

1

15

1

10

1

5

1 Q

Q = 0

a = 5

While a <= 40

Q = Q + 1 / (a^2)

a = a + 5

Wend

MsgBox “Q=” & Q

Здесь цикл повторяет суммирование, пока a <= 40.

Page 20: Федеральное государственное бюджетное80317.selcdn.ru/miit/59196fcbd4a60cikly-vba.pdf · Циклы с условием Циклы с условием

19

3. Применение циклов для суммирования рядов

Для суммирования заданного количества членов ряда

удобнее использовать циклы со счетчиком, а задачи с

неизвестным заранее числом повторений (например,

суммировать ряд до достижения заданной точности)

решаются с помощью циклов с условием.

Пример – вычисление суммы N членов ряда (|x| < 1)

753

1753 xxx

S

x = InputBox(“x - ?”)

If Abs(x) < 1 Then

N = InputBox(“N - ?”)

S = 1

xs = x ^ 3

For z = 3 To 2*N-1 Step 2

S = S + xs / z

xs = xs * x * x

Next z

MsgBox “S=” & S

Else

MsgBox “неверное значение x”

End If

В качестве счетчика цикла For выбрано значение

знаменателя z, которое меняется от 3 до 2*N-1 с шагом 2.

Для числителя каждой дроби используется переменная xs,

которая перед началом цикла вычисляется как x3, а затем

на каждом проходе цикла домножается на x2, чтобы

подготовить дробь для следующего прохода цикла. Таким

образом, при первом проходе цикла xs = x3, при втором

проходе xs = x5, при третьем - xs = x7 и т.д.

Page 21: Федеральное государственное бюджетное80317.selcdn.ru/miit/59196fcbd4a60cikly-vba.pdf · Циклы с условием Циклы с условием

20

Если в качестве счетчика цикла выбрать не

знаменатель, а номер (будем считать первую единицу

первым членом ряда, затем дробь x3 / 3 вторым и т.д.), то

решение задачи выглядит так:

x = InputBox(“x - ?”)

If Abs(x) < 1 Then

N = InputBox(“N - ?”)

S = 1

xs = x ^ 3

For i = 2 To N

S = S + xs / (2 * i – 1)

xs = xs * x * x

Next i

MsgBox “S=” & S

Else

MsgBox “неверное значение x”

End If

При таком способе решения счетчик цикла i меняется

от 2 до N с шагом 1, а в знаменателе каждый раз

вычисляется формула нечетного числа (2 * i – 1). При

первом проходе цикла (i=2) в знаменателе получится 3,

при втором (i=3) – 5 и так далее до последнего прохода

(i=N), когда знаменатель будет равен 2*N–1.

Page 22: Федеральное государственное бюджетное80317.selcdn.ru/miit/59196fcbd4a60cikly-vba.pdf · Циклы с условием Циклы с условием

21

Пример – вычисление суммы ряда (|x| < 1)

с точностью 0.0001

753

1753 xxx

S

В этой задаче необходимо применить цикл с условием,

т.к. количество повторений заранее неизвестно, а

определяется по величине очередного члена ряда. Как

только его модуль станет меньше заданной точности,

суммирование надо остановить.

x = InputBox(“x - ?”)

If Abs(x) < 1 Then

S = 1

z = 3

slag = x ^ z / z

While Abs(slag) >= 0.0001

S = S + slag

z = z + 2

slag = x ^ z / z

Wend

MsgBox “S = “ & S

Else

MsgBox “неверное значение x”

End If

Если требуется узнать количество повторений (т.е.

число просуммированных членов ряда), то можно либо

добавить дополнительную переменную-счетчик (которая

перед началом цикла обнуляется, а на каждом проходе

цикла увеличивается на 1), либо использовать значение z -

количество проходов цикла можно вычислить как (z-3)/2.

Page 23: Федеральное государственное бюджетное80317.selcdn.ru/miit/59196fcbd4a60cikly-vba.pdf · Циклы с условием Циклы с условием

22

Пример – вычисление суммы ряда с точностью 0.0001

(ряд сходится при x>0.5)

4

4

3

3

2

2

4

)1(

3

)1(

2

)1(1)ln(

x

x

x

x

x

x

x

xx

x = InputBox(“x - ?”)

If x > 0.5 Then

y = Log(x) ‘ y – точное значение ln(x)

MsgBox “ln x = “ & y

S = 0 ‘S – сумма ряда

k = 1

slag = (x – 1) / x

While Abs(slag) >= 0.0001

S = S + slag

k = k + 1

slag = (x – 1)^k / (k * x^k)

Wend

MsgBox “S = “ & S

MsgBox “количество итераций = “ & (k – 1)

Else

MsgBox “неверное значение x”

End If

Перед началом цикла переменная для суммы S

обнуляется, затем с каждым последующим проходом

цикла увеличивается на значение очередного слагаемого

slag. Пока slag по абсолютной величине больше или равен

заданной точности, суммирование продолжается. Как

только он станет меньше точности, цикл останавливается,

выводится результат – сумма и количество итераций. Для

определения количества итераций (проходов цикла)

использована переменная k, при выводе она уменьшается

на 1, т.к. ее значение после окончания цикла совпадает с

номером нового слагаемого, которое уже не прибавлялось

(произошел выход из цикла).

Page 24: Федеральное государственное бюджетное80317.selcdn.ru/miit/59196fcbd4a60cikly-vba.pdf · Циклы с условием Циклы с условием

23

Чтобы избежать неэффективных избыточных

вычислений, можно заметить, что вместо операции

возведения в степень для каждого слагаемого можно

использовать формулу для подсчета следующего члена

ряда с использованием предыдущего:

k = 1

slag = (x – 1) / x

While Abs(slag) >= 0.0001

S = S + slag / k

k = k + 1

slag = slag * (x – 1) / x

Wend

Действительно, каждая следующая дробь получается

из предыдущей домножением числителя на (x – 1), а

знаменателя – на x. Оператор slag = slag * (x – 1) / x

готовит новое значение slag для следующего прохода

цикла.

Коэффициент в знаменателе записан в операторе

прибавления одного слагаемого S = S + slag / k. При

первом проходе цикла k=1, при втором k=2, при третьем –

k=3 и т.д.

Page 25: Федеральное государственное бюджетное80317.selcdn.ru/miit/59196fcbd4a60cikly-vba.pdf · Циклы с условием Циклы с условием

24

4. Применение цикла для приближенного вычисления

определенного интеграла

Для приближенного численного вычисления

определенного интеграла можно использовать метод

прямоугольников.

n

abh

hydxxf

b

a

n

k

k

1

0

)(

Разделим отрезок [a, b] на достаточно большое число

участков (длина каждого участка h) так, чтобы изменением

значения функции на одном участке можно было

пренебречь и считать его постоянным. Тогда искомую

площадь под кривой графика подынтегральной функции

можно заменить суммой площадей прямоугольников.

Площадь каждого прямоугольника рассчитывается как

произведение его высоты (значение функции в очередной

точке разбиения отрезка) на ширину h.

Page 26: Федеральное государственное бюджетное80317.selcdn.ru/miit/59196fcbd4a60cikly-vba.pdf · Циклы с условием Циклы с условием

25

Пример – вычисление методом прямоугольников

3

1

2 )5.02( dxx

Dim Integral As Double, x As Double

Dim a As Double, b As Double, h As Double

Dim n As Integer

a = InputBox(“Начало отрезка=”)

b = InputBox(“Конец отрезка=”)

n = InputBox(“Количество участков=”)

h = (b - a) / n

Integral = 0

For x = a To b–h Step h

Integral = Integral + (2 * x * x – 0.5)

Next x

Integral = Integral * h

MsgBox “Значение интеграла приближенно =” & Integral

Здесь цикл организует повторение по всем точкам x от

начала отрезка до предпоследней точки на отрезке (b–h).

Для каждой точки вычисляется значение подынтегральной

функции и добавляется к сумме (Integral). Умножение на

ширину каждого прямоугольника (h) вынесено за скобки и

выполняется один раз после цикла для всей суммы сразу.

Аналитически данный интеграл равен:

33.16)5.03

2()5.02(

3

1

33

1

2 xx

dxx

Результат программы при вводе a=1, b=3, n=100

Значение интеграла приближенно = 15.83

Результат программы при вводе a=1, b=3, n=1000

Значение интеграла приближенно = 16.32

Page 27: Федеральное государственное бюджетное80317.selcdn.ru/miit/59196fcbd4a60cikly-vba.pdf · Циклы с условием Циклы с условием

26

5. Программа для численного решения

задачи Коши методом Эйлера

Дано: уравнение y' = f(x, y)

отрезок [a, b]

начальное значение функции y(a)=yнач

h - шаг изменения x

Найти: значения функции y на отрезке [a, b] с шагом h

Расчетные формулы метода Эйлера: N = (b–a) / h – количество частей, на которые разделен [a,b]

x0=a, y0= yнач

xi = xi-1 + h, yi = yi-1 + h * f(xi-1 ,yi-1)

i =1, 2, 3, …, N

(N + 1) – количество точек на [a,b],

где будет вычислена функция

Пример - решить уравнение y' = y2 − x

на отрезке [1, 3] методом Эйлера с шагом 0.1, y(1) = 0

a = 1: b = 3

h = 0.1

s = 2 ‘номер строки на листе Excel

N = (b - a) / h

Worksheets("Лист1").Activate

x = 1 ‘начало отрезка

y = 0 ‘начальное значение функции

Cells(s, 1) = x

Cells(s + 1, 1) = y

For i = 1 To N

y = y + h * (y * y - x) ‘вычисление «нового» yi

x = x + h ‘переход к «новой» точке xi

Cells(s, i + 1) = x

Cells(s + 1, i + 1) = y

Next i

Page 28: Федеральное государственное бюджетное80317.selcdn.ru/miit/59196fcbd4a60cikly-vba.pdf · Циклы с условием Циклы с условием

27

Формулы xi = xi-1+h и yi = yi-1+h*f(xi-1 ,yi-1) являются

рекуррентными, т.е. «новые» x и y вычисляются через

«старые» значения x и y. В цикле оператор

y = y + h * (y * y - x)

содержит в правой части «старые» значения, а в левой

части – «новое». Сначала «новый» y вычисляется через

«старые» значения x и y. А затем оператор x = x + h

осуществляет переход к «новой» точке x.

Перед началом цикла в первую ячейку строки № 2

выводится начальное значение x, а в первую ячейку строки

№ 3 - начальное значение y.

В результате работы программы на листе Excel будет

таблица (в строке № 2 – значения x, в строке № 3 –

значения функции y):

2 1 1,1 1,2 1,3 1,4 1,5 1,6 1,7 1,8

3 0 -0,1 -0,21 -0,325 -0,444 -0,564 -0,683 -0,796 -0,903

При необходимости по полученным координатам

можно построить график искомой функции средствами

Excel (создать точечную диаграмму).

Page 29: Федеральное государственное бюджетное80317.selcdn.ru/miit/59196fcbd4a60cikly-vba.pdf · Циклы с условием Циклы с условием

28

Применение цикла со счетчиком - варианты заданий

№1. Написать программу с использованием цикла For,

который повторяет 4 раза следующие действия:

– ввод с клавиатуры градусной меры угла beta (0-360)

– пересчет введенного значения в радианы и вычисление

косинуса этого угла

– запись исходного и полученного значений в файл

№2. Написать программу с использованием цикла For,

который повторяет 3 раза следующие действия:

– ввод с клавиатуры градусной меры угла gamma (0-360)

– пересчет введенного значения в радианы и вычисление

тангенса этого угла

– запись исходного и полученного значений в файл

№3. Написать программу с использованием цикла For,

который повторяет 5 раз следующие действия:

– ввод с клавиатуры градусной меры угла A (0-360)

– пересчет введенного значения в радианы и вычисление

синуса этого угла

– запись исходных и полученных значений в файл

№4. Написать программу с использованием цикла For,

который повторяет 3 раза следующие действия:

– ввод с клавиатуры двух чисел C1 и C2

– вычисление их среднего арифметического 2

2С1С

– запись исходных и полученных значений в файл

№5. Написать программу с использованием цикла For,

который повторяет 4 раза следующие действия:

– ввод с клавиатуры двух положительных чисел A и B

– вычисление их среднего геометрического B*A

– запись исходных и полученных значений в файл

Page 30: Федеральное государственное бюджетное80317.selcdn.ru/miit/59196fcbd4a60cikly-vba.pdf · Циклы с условием Циклы с условием

29

№6. Написать программу с использованием цикла For,

который повторяет 5 раз следующие действия:

– ввод с клавиатуры положительного числа Y

– вычисление Y

– запись исходного и полученного значений в файл

№7. Написать программу с использованием цикла For,

который повторяет 5 раз следующие действия:

– ввод с клавиатуры градусной меры угла beta (0-360)

– пересчет введенного значения в радианы и вычисление

суммы Sin(beta)+Cos(beta)

– запись исходного и полученного значений в файл

№8. Написать программу с использованием цикла For,

который повторяет 4 раза следующие действия:

– ввод с клавиатуры угла gamma (в радианах)

– вычисление модуля тангенса этого угла

– запись исходного и полученного значений в файл

№9. Написать программу с использованием цикла For,

который повторяет 4 раза следующие действия:

– ввод с клавиатуры двух чисел C1 и C2

– вычисление среднего арифметического их модулей

2

2С1С

– запись исходных и полученных значений в файл

№10.Написать программу с использованием цикла For,

который повторяет 4 раза следующие действия:

– ввод с клавиатуры двух чисел A и B

– вычисление среднего геометрического их модулей

B*A

– запись исходных и полученных значений в файл

Page 31: Федеральное государственное бюджетное80317.selcdn.ru/miit/59196fcbd4a60cikly-vba.pdf · Циклы с условием Циклы с условием

30

Вычисление суммы - варианты заданий

№1.S = cos(beta) + cos(beta/2) + cos(beta/3) +…+ cos(beta/9)

угол beta = 1.35 рад

№2. S = tg(2*gam) + tg(4*gam) + tg(6*gam)+…+ tg(12*gam)

угол gam = 0.35 рад

№3. S = sin(A) + sin2(A) + sin3(A) + … + sin6(A)

угол A = 75o

№4. S = 22 + 23 + 24 + … + 210

№5. S = 3 + 32 + 33 + … + 38

№6. 256

1

16

1

8

1

4

1

2

1S

№7. S = cos(beta) + cos2(beta) + cos3(beta) + … + cos6(beta)

угол beta = 1.5 рад

№8. S = tg(11*gam) + tg(9*gam) + tg(7*gam) + … + tg(gam)

угол gam = 0.12 рад

№9. S = sin(7*A) + sin(6*A) + sin(5*A) + … + sin(2*A)

угол A = 15o

№10. S = 29 + 28 + 27 + … + 23

№11. S = 310 + 39 + 38 + … + 33

№12. 8

1

256

1

512

1

1024

1S

Page 32: Федеральное государственное бюджетное80317.selcdn.ru/miit/59196fcbd4a60cikly-vba.pdf · Циклы с условием Циклы с условием

31

Суммирование рядов - варианты заданий

Дана функция и ее разложение в степенной ряд.

Написать программу для вычисления точного

значения функции, суммирования N членов ряда, а

также для подсчета суммы ряда с точностью 0.0001.

№ 1. Ряд сходится при x>0.5

4

4

3

3

2

2

4

)1(

3

)1(

2

)1(1)ln(

x

x

x

x

x

x

x

xx

№ 2. Ряд сходится при 1 < x < 3

5

5

3

3

)1(5

)1(

)1(3

)1(

1

12)ln(

x

x

x

x

x

xx

№ 3. Ряд сходится при |x| > 1

753 7

1

5

1

3

112

1

1ln

xxxxx

x

№ 4. Ряд сходится при 0.2 < x < 1.2

53 )12(5

1

)12(3

1

12

12

1ln

xxxx

x

№ 5. Ряд сходится при |x| < 1

7532

1

1ln

753 xxxx

x

x

№ 6. Ряд сходится при -1 < x < 1

4321ln

432 xxxxx

№ 7. Ряд сходится при |x| < 0.5

432 16842121

1xxxx

x

№ 8. Ряд сходится при |x| < 1

432

254321

)1(

1xxxx

x

Page 33: Федеральное государственное бюджетное80317.selcdn.ru/miit/59196fcbd4a60cikly-vba.pdf · Циклы с условием Циклы с условием

32

Приближенное вычисление определенного интеграла -

варианты заданий

№ 1.

13

6

)3( dXXX № 13.

7

2

)2( dXXX

№ 2. dXXX

9

1

2 )35( № 14. dXXX

7

0

2 )54(

№ 3. dXXX

3

3

2 )173( № 15. dXXX

5

2

2 )12(

№ 4. dXXX

15

10

2 )53( № 16. dXXX

6

1

2 )26(

№ 5.

3

1

)21( dXXX № 17.

8

3

)51( dXXX

№ 6.

9

4

2 )2( dXXX № 18.

9

4

2 )3( dXXX

№ 7.

14

7

)2( dXXX № 19.

11

6

)2( dXXX

№ 8. dXXX

10

7

2 )52( № 20. dXXX

10

0

2 )33(

№ 9. dXXX

5

0

2 )5( № 21. dXXX

10

0

2 )54(

№ 10. dXXX

10

3

3 )2( № 22. dXXX

15

5

3 )32(

№ 11.

10

5

)41( dXXX № 23.

26

17

)21( dXXX

№ 12.

9

4

2 )3( dXXX № 24.

16

9

2 )9( dXXX

Page 34: Федеральное государственное бюджетное80317.selcdn.ru/miit/59196fcbd4a60cikly-vba.pdf · Циклы с условием Циклы с условием

33

Решение задачи Коши методом Эйлера -

варианты заданий

уравнение нач. условие отрезок

1 y' = y2 − x y(1) = 0 [1; 3]

2 y' = sin x – cos y y(0) = 1 [0; 1]

3 y'=cos y + 3 x y(0) = 1.3 [0; 1]

4 у' = 2x2+2у y(0) = 1 [0; 1]

5 у' =y / x – 4 / √x y(1) = 2 [1; 3]

6 у' = –2 xу y(0) = 1 [0; 1]

7 у' =y / x + x2 y(1) = 1 [1; 2]

8 у' =y / x + x3 y(0.5) = 0.1 [0.5; 1.5]

9 у' = – x y – x3 y(0.5) = 1.1 [0.5; 1.5]

10 у' = –2 xy – 2 x 3 y(1) = 3 [1; 2]

11 у' = – x y – x4 y(1) = 2 [1; 2]

12 у' = –2 y / x + x –2 y(3) = 1 [3; 4]

13 у' = 4 x y + x y(1) = 0.75 [1; 2]

14 у' = y / x + 9 x 3 y(2) = 1 [2; 3]

Page 35: Федеральное государственное бюджетное80317.selcdn.ru/miit/59196fcbd4a60cikly-vba.pdf · Циклы с условием Циклы с условием

34

15 у' = –3 y / x + 2 / x 3 y(1) = 3 [1; 2]

16 у' = 2 x (x - y ) / (1+x2) y(0) = 5 [0; 1]

17 у' = 3 y / x + x 3 e x y(1) = e [1; 2]

18 у' = у/(x+2)+2x+x2 y(0) = 2 [0; 2]

19 у' = (2 x – 1)y / x 2 +1+x2 y(2) = 1 [2; 3]

20 у' = y / x + 5 x cos x y(0.6) = 1 [0.6; 2.6]

21 у' = –2 xy + 2 x e–x∙x y(1) = 5 [1; 2]

22 у' = y / x – 2 ln x / x y(2.7) = 1/ e [2.7; 4.7]

23 у' = 2 у / (x+1)+(x+1)3 y(0) = 2 [0; 1]

Page 36: Федеральное государственное бюджетное80317.selcdn.ru/miit/59196fcbd4a60cikly-vba.pdf · Циклы с условием Циклы с условием

35

Список литературы

1. Гарбер Г.З. Начальный курс программирования на

VBA Excel. – Palmarium Academic Publishing, 2014.

— 240 с.

2. Резникова Э.Р. Ввод и вывод информации в

программах на VBA (в Microsoft Office Excel):

Методические указания к лабораторным работам по

курсу “Информатика”. – М.: МИИТ, 2009. – 28 с.

Page 37: Федеральное государственное бюджетное80317.selcdn.ru/miit/59196fcbd4a60cikly-vba.pdf · Циклы с условием Циклы с условием

36

Учебно-методическое издание

Резникова Эмма Романовна

РЕАЛИЗАЦИЯ ЦИКЛИЧЕСКИХ АЛГОРИТМОВ

НА VBA В СРЕДЕ MS EXCEL

Учебно-методическое пособие

_____________________________________________________

Подписано к печати Формат 60х90 1/16

Тираж 50 экз. Усл. – печ. л.

Заказ № Изд. № 43-16

______________________________________________________