Решение задач с циклическими вычислительными процессами
Циклы с параметром. Оператор FOR
Вычисление конечных сумм и произведений
Задача 1. Вычислить сумму . Значения величин A, B, m и n ввести с клавиатуры.
Алгоритм решения этой задачи очевиден, и наглядно описывается с приведенной на рис. 4.1 блок-схемой.
Код программы:
Sub pr1()
Dim A As Double, B As Double, S As Double
Dim n As Integer, m As Integer, i As Integer
A = InputBox(“A=“)
B = InputBox(“B=“)
m = InputBox(“m=“)
n = InputBox(“n=“)
For i = m To n
S = S + i ^ 2 / (n + i)
Next i
S = A + B * S
MsgBox(“S= “ & S)
EndSub
Рис. 4.1. Блок-схема алгоритма решения задачи 1
Задача 2. Найти сумму S всех целых чисел, кратных 3 на отрезке [M, N].
Эта задача похожа на предыдущую. Отличие состоит в том, что, просматривая все числа из интервала [M, N], мы должны проверить, делится ли число i без остатка на 3 прежде, чем его суммировать к S. Для проверки деления используется операция mod – деление с остатком целых чисел, в результате выполнения которой получаем остаток от деления в виде целого числа. Таким образом, условие деления числа i на 3 без остатка будет иметь вид: i mod 3 = 0.
Алгоритм решения этой задачи отличен от предыдущего наличием условия в теле арифметического цикла, и описан с помощью приведенной ниже блок-схемы (рис. 4.2).
Рис. 4.2. Блок-схема алгоритма решения задачи 2
Код программы:
Sub pr2()
Dim M As Double, N As Double, S As Double
Dim i As Integer
M = InputBox(“M=“)
N = InputBox(“N=“)
For i = M To N
If i Mod 3 = 0 Then S = S + i
Next i
MsgBox(“S= “ & S)
End Sub
Задача 3. Для заданного значения N найти .
Для вычисления Y, необходимо сделать следующие преобразование исходной формулы:
(1)
Блок-схема алгоритма представлена на рис. 3.
Рис. 3. Блок-схема алгоритма решения задачи 3
Код программы:
Sub pr3()
Dim Y As Double, i As Integer, N As Integer
N = InputBox(“Введите N“)
Y = 1
For i = 0 To (N – 1) \ 2
If N Mod 2 = 1 Then
Y = Y * (2 * i + 1)
Else
Y = Y * 2 * (i + 1)
End If
Next i
If N Mod 2 = 1 Then Y = - Y
MsgBox(“Y= “ & Y)
End Sub
Вложенный арифметический цикл
Под вложенным арифметическим циклом понимают такую алгоритмическую структуру, при которой в тело одного цикла с параметром включен другой цикл со своим параметром. Другими словами составная инструкция вида
FOR I = …
FOR J = …
FOR K = …
является признаком вложенного арифметического цикла.
Задача 4. Вычислить .
Блок-схема алгоритма решения задачи представлена на рис. 4.
Код программы:
Sub pr4()
Dim Y As Double, Pr As Double, k As Integer, p As Integer
k = InputBox(“Введите k=“)
p = InputBox(“Введите p=“)
For k = 1 To 10
Pr = 1
For p = 1 To 4
Pr = Pr * (k – p) ^ 2
Next p
Y = Y + k ^ 3 * Pr
Next k
MsgBox(“Y= “ &Y)
End Sub
Рис. 4. Блок-схема алгоритма решения задачи 4
Итерационные циклы
Итерационные циклы чаще всего используются для вычисления бесконечных сумм, бесконечных произведений и пределов функций и рядов.
Задача 5. Вычислить . Вычисления остановить при выполнении условия .
Для решения этой задачи удобно использовать оператор цикла с предусловием Do While.
Блок-схема алгоритма решения задачи представлена на рис. 4.
Код программы – процедура pr5.
Рис. 5 Блок-схема алгоритма решения задачи 5
Sub pr5()
Dim Y As Double, E As Double, i As Integer
E = InputBox(“Введите погрешность вычислений”)
i = 1: Y = 0
Do While i/2^i >= E
Y = Y + i /2^2
i = i + 1
Loop
MsgBox(“Y=” & Y)
End Sub
Рекуррентные формулы
Арифметический цикл с рекуррентной зависимостью
Многие циклические вычислительные процессы используют рекуррентные зависимости при решении различных математических задач. В общем виде формулу для рекуррентных вычислений можно представить так:
(2)
В этой рекуррентной формуле для вычисления i -го члена последовательности , где , используются k предыдущих членов последовательности . Для вычислений по формуле (2) нужно задать k первых членов последовательности - .
В ряде случаев рекуррентную формулу легко вывести. Например, для суммы ряда, описанной формулой S = , рекуррентная формула выводится из отношения текущего члена ряда к предыдущему.
(1)
Из (1) и находится рекуррентная формула:
(2)
Использование рекуррентных формул, как правило, сокращает текст программы и время выполнения на компьютере. Однако, в большинстве случаев, рекуррентную формулу нужно написать программисту, что в ряде случаев вызывает определенные трудности. Один из таких случаев рассмотрен в решении задачи 6.
Задача 6. Вычислить значение .
Знаменатель формулы для вычисления tgX представляет собой цепную дробь. Для вычисления такого знаменателя в цикле удобно использовать рекуррентную зависимость с памятью в один член последовательности . Для вывода рекуррентной формулы следует использовать табл. 1.
Таблица 1
Номер i | Член последовательности | Величина |
Из табл. 1 легко заметить, что рекуррентная формула принимает вид:
(3)
Блок-схема алгоритма решения задачи представлена на рис. 6.
Код программы представлен процедурой pr6.
Код программы:
Sub pr6()
Dim X As Double, A As Double; i As Integer
X=InputBox(“Введите X”)
A = 1
For i = 1 TO 5
A =11 - 2*i- X*X/A
Next i
MsgBox(“tg X = ” & Format(A, “fixed”))
End Sub
Рис. 6 Блок-схема алгоритма решения задачи 6
Задача 7. Пользуясь рекуррентной формулой, для заданного N вычислить , если известны , а вычисляется по формуле
(4)
Таблица имён
Математ.величина | Обозначениев программе | Содержательный смысл | Типпеременной |
i | i | Номер текущего члена последовательности | integer |
N | N | Номер последнего члена последовательности | integer |
Y3 | Член последовательности с номером i-3 | double | |
Y2 | Член последовательности с номером i-2 | double | |
Y1 | Член последовательности с номером i-1 | double | |
Y | Член последовательности с номером i | double | |
S | Искомая сумма | double |
Первым шагом в работе алгоритма является ввод данных Y0, Y1, Y2, N. При вводе трех первых значений последовательности нужно использовать рабочие ячейки Y3, Y2 и Y1, соответственно. На втором шаге требуется проанализировать значение N. Если N < 3, то рекуррентная формула для подсчета S суммы первых N членов не потребуется. Для определения S при условии N < 3, в алгоритме предусмотрен переключатель (оператор Select Case), имеющий три ветви: N = 0, N = 1, в противном случае (куда попадает и случай N = 2). Для каждой ветви подсчитывается соответствующая сумма S. Третий шаг выполняется только в том случае, если N > 2. На этом шаге для I от 3 до N по рекуррентной формуле вычисляются YI и подсчитывается их сумма S. Найденное значение S на последнем четвертом шаге выводится на экран.
Блок-схема алгоритма решения задачи представлена на рис. 7.
Код программы представлен процедурой pr7.
Sub pr7()
Dim Y3 As Double, Y2 As Double, Y1 As Double, Y As Double
Dim S As Double
Dim N As Integer, i As Integer
Y3=InputBox(“Введите Y0”)
Y2=InputBox(“Введите Y1”)
Y1=InputBox(“Введите Y2”)
N=InputBox(“Введите N”)
Select Case N
Case 0
S=Y3
Case 1
S=Y3+Y2
Case Else
S=Y3+Y2+Y1
End Select
If N>2 Then
For i=3 To N
Y=Log(Abs(Y1*Y1+Y3+1)
S=S+Y
Y3=Y2
Y2=Y1
Y1=Y
Next i
End If
MsgBox(“S = ” & Format(S, “fixed”))
End Sub
Рис. 7. Блок-схема алгоритма решения задачи 7