Типовые задачи с использованием циклов
Табулирование функции
Задача табулирования некоторой функции y = f(x) сводится к вычислению значений этой функции при параметре цикла х, изменяющемся в заданных пределах с постоянным шагом. На печать при этом выводится множество пар значений аргумента х и функции у с помощью оператора печати, расположенного внутри тела цикла.
В рассмотренных выше примерах тело цикла реализовывалось одним или несколькими простыми операторами (присвоения, печати). Однако в общем случае внутри цикла могут использоваться любые операторы, в том числе и другие операторы цикла, условные операторы, операторы безусловного перехода.
Вычисление суммы
Вычисление конечной суммы сводится к нахождению суммы заданного количества слагаемых:
,
где i – номер слагаемого; f(i) – слагаемое с номером i.
Вычисление организуется в виде циклического алгоритма, когда при каждом прохождении цикла номер слагаемого i увеличивается на 1, а сумма изменяется на величину i-го слагаемого:
.
Цикл повторяется до тех пор, пока не будут просуммированы все n слагаемых. Для того, чтобы начальное содержимое ячейки суммы не исказило результат, сумма предварительно должна быть обнулена ( ). Вывод результата, поскольку он является единственным, осуществляется после окончания работы цикла.
Алгоритм нахождения суммы представлен на рис. 2.
Рис. 2. Вычисление суммы
Рис. 3. Вычисление произведения
Пример. Вычислить сумму ряда N натуральных чисел.
Sub Demo_Summa()
Dim i As Integer
Dim sStart, sEnd As Integer
Dim Sum As Long
sStart = 1
sEnd = InputBox("Введите длину ряда:", "Запрос программы")
Sum = 0
For i = sStart To sEnd
Sum = Sum + i
Next i
MsgBox "Сумма чисел от " & sStart & " до " & sEnd & " равна " & Sum, , "Решение задачи"
End Sub
Решим эту же задачу с использованием цикла Do…Loop.
Sub Demo_Summa()
Dim i As Integer
Dim sStart, sEnd As Integer
Dim Sum As Long
sEnd = InputBox("Введите длину ряда:", "Запрос программы")
sStart = 1
i = sStart
Sum = 0
Do
Sum = Sum + i
i = i + 1
Loop While i <= sEnd
MsgBox "Сумма чисел от " & sStart & " до " & sEnd & " равна " & Sum, , "Решение задачи"
End Sub
Пример. Вычислить сумму ряда натуральных чисел, кратных произвольно заданному числу М и подсчитать их количество.
Sub Demo_Summa()
Dim n, m, i, u As Integer
n = InputBox("Введите длину ряда ", "Запрос первого параметра")
m = InputBox("Введите число М ", "Запрос второго параметра")
summa = 0 'обнуление переменной суммы
j = 0 'обнуление счетчика количества чисел
For i = 1 To n
u = i
' Накапливаем сумму, если число кратно М
If i Mod m = 0 Then
summa = summa + u
' Подсчет количества чисел, кратных М
j = j + 1
End If
Next i
MsgBox "Сумма равна " & summa & ", " & "Количество элементов " & j, , "Решение задачи"
End Sub
В данном примере для выбора чисел, кратных М используется оператор Mod, который вычисляет остаток от деления. Если число кратно М, то остаток от деления на М равен нулю. Обратите также внимание на использование блочной формы оператора If.
Вычисление произведения
Вычисление конечного произведения представляет собой процесс нахождения произведения заданного количества сомножителей по формуле
.
Как и суммирование, вычисление произведения организуется с помощью циклического процесса по рекуррентному соотношению
.
В отличие от суммирования начальное значение произведения должно быть равно единице.
Алгоритм нахождения произведения представлен на рис. 3.
Пример. Вычислить факториал числа N.
Формула для вычисления факториала имеет вид:
.
Как видно из формулы, вычисление факториала числа N сводится к нахождению произведения n сомножителей.
Sub Demo_Proizvedenie()
Dim n, i, u As Integer
Dim p As Double
n = InputBox("Введите число n= ", "Запрос программы")
p = 1
For i = 1 To n
u = i
p = p * u
Next i
MsgBox "Факториал чисел от 1 до " & n & " равен " & p, , "Решение задачи"
End Sub