а) цикл с предусловием б) цикл с постусловием
Рис. 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.
Приложение