Тело цикла Do … Loop Until наоборот выполняется в случае ложности условия. Выход из цикла происходит, если результат проверки условия равен True.
а) цикл с предусловием б) цикл с постусловием
Рис. 5. Способы изображения циклов на схемах алгоритмов
Если условие проверяется в начале цикла (используется цикл с предусловием), то тело цикла может ни разу не выполниться. Если же проверка проводится в конце, то тело цикла выполняется как минимум один раз, независимо от того, выполнено условие или нет.
Если необходимо прервать выполнение цикла Do … Loop до его завершения, используется команда безусловного перехода Exit Do.
Задание. С использованием оператора цикла c пред- или постусловием найти сумму элементов бесконечного заданного ряда с заранее определенной точностью e > 0; x — произвольное число, определенное в программе.
1. , 2.
, 3.
,
4. , 5.
, 6.
,
7. , 8.
, 9.
,
10. , 11.
, 12.
,
13. , 14.
, 15.
,
16. , 17.
, 18.
,
19. , 20.
, 21.
,
22. , 23.
, 24.
,
25. .
Пример выполнения задания
Вычисление суммы ряда с определенной точностью — типичный пример использования цикла с условием.
Вычислить сумму ряда
с погрешностью
.
Суммой ряда называется предел, к которому стремится последовательность частичных сумм данного ряда, если он существует. Если такой предел существует, то ряд называется сходящимся. Если , где
и
— соответственно
й и
й члены ряда, то ряд сходится.
Будем считать, что сумма n первых членов ряда отличается от точной суммы ряда меньше чем на величину . Следовательно, для получения результата с заданной погрешностью будем накапливать частичную сумму элементов ряда, пока очередной член ряда по модулю не станет меньше заданной погрешности
.
Вычислять элементы ряда независимо друг от друга нерационально. Для получения более эффективного алгоритма заметим, что й элемент ряда
может быть получен по рекуррентной формуле:
.
Поскольку ,
а , то
То есть
.
Переменная x служит для хранения входных данных, переменная y — результата вычисления.
Значение в ходе вычисления суммы ряда не меняется, поэтому значение (
) достаточно вычислить один раз до входа в цикл (запоминается в переменной x2).
Пример реализации программы. На форму помещены 3 элемента управления: кнопка Command1 (для запуска процесса вычислений), строка ввода Text1 (для ввода x) и метка Label1 (для вывода y).
Private Sub Command1_Click()
Const eps = 0.0001 'точность вычисления
Dim x As Double 'аргумент
Dim y As Double 'сумма ряда
Dim r As Double 'член ряда
Dim x2 As Double 'минус (x в квадрате)
Dim n As Integer 'номер слагаемого
x = CDbl(Text1.Text)
y = x : r = x : x2 = –x ^ 2 : n = 2
Do
r = r * x2 / ((2 * n + 1) * (2 * n))
y = y + r
n = n + 1
Loop Until Abs(r) < eps
Label1.Caption = CStr(y)
End Sub
Контрольные вопросы
1. Операторы цикла c пред- и постусловием.
2. Операции над переменными логического типа.
3. Понятие факториала и программная реализация его вычисления.
4. Понятие рекуррентной формулы.
5. Отличие цикла Do While от Do Until.
Приложение