Тело цикла 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.

 

 


Приложение