ТИПОВЫЕ ЗАДАЧИ С ИСПОЛЬЗОВАНИЕМ ЦИКЛОВ

Табулирование функции

 

Задача табулирования некоторой функции 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