
- •А.И. Ходанович Офисное программирование
- •Введение
- •Лабораторная работа № 1 Величины и типы данных vba
- •Лабораторная работа № 2. Макросы и модули vba
- •Лабораторная работа № 3. Линейный алгоритм. Стандартные функции vba
- •Математические функции
- •Функции преобразования данных
- •Функции даты и времени
- •Строковые функции
- •Задачи для самостоятельного решения
- •Лабораторная работа № 4. Циклический алгоритм. Операторы цикла
- •Лабораторная работа № 5. Алгоритм ветвления. Оператор условного перехода
- •Лабораторная работа № 6. Массивы
- •Задачи для самостоятельного решения
- •Лабораторная работа № 7. Подпрограммы. Процедуры и функции
- •Лабораторная работа № 8. Генератор случайных чисел. Метод Монте-Карло
- •Лабораторная работа № 9. Вычислительный эксперимент. Модели случайных блужданий
- •Лабораторная работа № 10. Численные методы решения уравнений вида
- •Приложение Работа с файлами. Инструкция Print #
- •Литература
- •Ходанович Александр Иванович
Задачи для самостоятельного решения
Вычислить значения выражений по формулам (предполагается, что значениями переменных могут быть любые действительные числа):
1.
|
2.
|
3.
|
4.
|
5.
|
6.
|
7.
|
8.
|
9.
|
10.
|
11.
|
12.
|
13.
|
14.
|
15.
|
16.
|
17.
|
18.
|
19.
|
20.
|
21.
|
22.
|
23.
|
24.
|
Лабораторная работа № 4. Циклический алгоритм. Операторы цикла
Теоретические сведения
Цикл- многократное повторение последовательности действий по некоторому правилу. Известны три типа циклических алгоритмических структур: цикл с предусловием, цикл с постусловием и цикл с параметром. В VBA существуют операторы, реализующие все три типа циклов.
Цикл с предусловием (цикл-пока) — наиболее универсальная циклическая структура. Он организует выполнение операторов, составляющих тело цикла, неизвестное заранее число раз. Реализуется оператором While. Формат оператора:
Do While <условие>
<тело цикла>
Loop
Здесь Do, While, Loop – зарезервированные слова;
<условие> – выражение логического типа;
<тело цикла> – операторы VBA.
Алгоритм работы оператора следующий. Вначале вычисляется значение выражения <условие>. Если <условие> имеет значение True, выполняется <тело цикла>; после чего вычисление значения выражения <условие> повторяется. Если <условие> имеет значение False, оператор прекращает свою работу.
Таким образом, выход из цикла осуществляется, если логическое выражение принимает значение ложь. Истинность логического выражения проверяется вначале каждого прохождения цикла, поэтому тело цикла может не выполняться ни разу.
Цикл с постусловием (цикл-до) позволяет организовать многократное выполнение операторов, если число повторений заранее неизвестно.
Цикл с постусловием может быть записан в одном из следующих видов:
Do Until <условие>
<тело цикла>
Loop
или
Do
<тело цикла>
Loop Until <условие>
Здесь Do, Until, Loop – зарезервированные слова;
<условие> – выражение логического типа;
<тело цикла> – операторы VBA.
Оператор работает по следующему алгоритму. Вначале выполняется <тело цикла>, после чего вычисляется значение логического выражения <условие>. Если его значение есть False, операторы, образующие <тело цикла>, повторяются. В противном случае оператор завершает свою работу.
То есть выход из цикла осуществляется, если логическое выражение принимает значение True (истина). Поскольку значение логического выражения вычисляется в конце каждого прохождения цикла, тело цикла выполнится хотя бы один раз.
Цикл с параметром (цикл со счетчиком, цикл – для) служит для организации циклов с заранее известным числом повторений.
Синтаксис оператора:
For <параметр> = <начальное значение> To <конечное значение> [Step <шаг>]
<тело цикла>
Next
Здесь For, To, Step, Next – зарезервированные слова VBA;
<параметр> – простая переменная порядкового типа ;
<начальное значение> – выражение того же типа что и <параметр>, определяющее начальное значение параметра;
<конечное значение> – выражение того же типа, определяющее конечное значение параметра;
<шаг> – некоторое значение типа <параметр>, задающее, на сколько изменяется значение параметра при каждом проходе цикла;
<тело цикла> – операторы VBA.
Этот оператор организует повторение группы инструкций, образующих <тело цикла>, пока <параметр> изменяется от <начального значения> до <конечного значения> с указанным шагом. Цикл выполняется столько раз, сколько нужно, чтобы <параметр> от <начального значения> достиг <конечного значения>.
При выполнении оператора вначале вычисляется значение выражения <начальное значение> и осуществляется присваивание <параметр> = <начальное значение>. После этого циклически повторяется:
проверка условия <параметр> <= <конечное значение>, если значение выражения <шаг> задано и имеет положительное значение, или <параметр> >= <конечное значение>, если значение выражения <шаг> задано и имеет отрицательное значение;
выполнение <тела цикла>;
изменение значения переменной <параметр> на величину, указанную после слова Step; если <шаг> не указан, он полагается равным 1.
Демонстрационные примеры
1. Найти сумму десяти целых случайных чисел.
Sub Сумма()
Dim sum1 As Integer, sum2 As Integer, i As Integer
Randomize
‘решение задачи с помощью цикла с предусловием
i = 10
Do While i > 0 ‘цикла выполняется, пока логическое условие истинно
sum1 = sum1 + Int((10 * Rnd) + 1)
i = i - 1
Loop
MsgBox "Сумма чисел=" & sum1
‘решение задачи с помощью цикла с постусловием
i = 10
Do ‘цикла выполняется, пока логическое условие ложно
sum2 = sum2 + Int((10 * Rnd) + 1)
i = i - 1
Loop Until i = 0
MsgBox "Сумма чисел=" & sum2
End Sub
Заметим, что особенностью интерпретатора VBA является то, что значения переменных числовых типов перед выполнением процедуры полагаются равными 0. Поэтому в программе отсутствуют команды присваивания вида: sum1 = 0 и sum2=0.
2. Найти cумму n первых членов ряда 1, 1/2, 1/3, ... 1/n
Option Explicit
Sub Summ_n()
Dim n As Byte, i As Byte, sum As Single
n = Val(InputBox("Введите количество членов ряда"))
For i =1 To n
sum = sum + 1 / i
Next i
MsgBox "Сумма " & sum
End Sub
3. Найти сумму всех четных чисел в первой десятке:
Option Explicit
Sub Summa ()
Dim j As Integer, sum As Integer
For j = 2 To 10 Step 2
sum = sum + j
Next j
MsgBox "Сумма равна " & sum
End Sub
4.
Вычисление числа
по формуле Лейбница
Sub Pi()
Dim s, n, i As Variant
s = 0
n = 20000
For i = 1 To n
s = s + (-1) * (-1) ^ i / (2 * i - 1)
Next i
MsgBox 4 * s
End Sub
5.
Вычисление числа
по формуле Виета (рекурсия)
Sub Viet()
Dim res, P, y As Double
n = 30
P = 1
y = Sqr(2)
For i = 1 To n
y = Sqr(2 + y)
P = P * y / 2
Next i
res = 2 / (P * Sqr(2) / 2)
MsgBox res
End Sub
6.
Вычисление «золотого сечения» по формуле
Sub Zoloto1()
Dim res, y As Double
n = 12
y = Sqr(1)
For i = 1 To n
y = Sqr(1 + y)
Next i
res = y
MsgBox res
End Sub
7.
Вычисление «золотого сечения» по формуле
Sub Zoloto2()
Dim res, y As Double
n = 12
y = 1 / (1 + 1)
For i = 1 To n
y = 1 / (1 + y)
Next i
res = 1 + y
MsgBox res
End Sub
Задачи для самостоятельного решения
Д
ано натуральное число n. Вычислить:
Д
ано натуральное число N. Вычислить:
Д
ано натуральное число N. Вычислить произведение первых N сомножителей:
Д
ано натуральное число N. Вычислить:
Д
ано действительное число х. Вычислить:
Даны действительное число a и натуральное число n. Вычислить:
Д
аны действительное число a и натуральное число n. Вычислить:
Даны действительное число a, натуральное число n. Вычислить:
Д
ано действительное x. Вычислить:
Даны натуральное n, действительное x. Вычислить:
Ч
исла Фибоначчи (fn) определяются формулами: Определить f40.
Д
ано натуральное n. Вычислить:
Вычислить число с заданной точностью по формуле Эйлера
14. Вычислить число с заданной точностью по формуле Эйлера
15.
Вычислить число
с
заданной точностью по формуле Валлиса
16. Вычислить число e с заданной точностью по формуле замечательного предела
17.
Вычислить число е с заданной точностью
по формуле Бернулли-Эйлера