Цикл с конечным числом повторений FOR…NEXT

Страницы работы

Содержание работы

Цикл с конечным числом повторений FOR…NEXT

1.  Простые циклы

1.1.  Задача. Вычислить сумму конечного ряда

В задании кратко записана сумма конечного ряда:

Такие задачи обычно называются задачами с накапливающими суммами, т.к. здесь сумма вычисляется не сразу (в одном операторе), а накапливается постепенно в цикле.

Алгоритм решения:

1.  Объявить переменные: i – счетчик цикла , n – количество элементов в сумме и S – сумма элементов ряда;

2.  Обнулить переменную S, в которой будем хранить сумму;

3.  Организовать цикл, в котором к предыдущему состоянию суммы будет прибавляться очередной элемент ряда. Применение цикла позволит кратко записать обработку n элементов ряда. Переменная i – степень, в которую возводится число 2, изменяется от 1 до n с шагом 1, что позволит использовать ее в качестве счетчика цикла;

4.  Вывести значение суммы S.


Блок-схема:

В начале работы цикла переменная i получает начальное значение, т.е. 1.С этим значением выполняется тело цикла, т.е. оператор S=S+2^i. Затем к значению i прибавляется шаг (step 1) и новое значение счетчика цикла сравнивается с конечным значением n. Если значение переменной не превысило конечное значение n, то тело цикла выполняется еще раз. Если i>n, то цикл завершает свою работу. Другими словами, цикл работает, пока i<=n. После завершения работы цикла переменная-счетчик цикла больше конечного значения n на величину шага.

Шаг цикла необязательно должен быть равен 1. Он может быть отрицательным или дробным числом.

Благодаря тому, что мы сделали переменную i счетчиком цикла, изменяющимся от 1 до n с шагом 1, все элементы нашего ряда можно теперь записать в общем виде: 2^i .В приведенном примере тело цикла (оператор S=S+2^i) выполняется n раз, при этом на каждом проходе значение переменной i разное, отличающееся от предыдущего на 1.Другими словами мы проходим по всем элементам ряда, последовательно прибавляя их к сумме.

Подпись: Sub Сумма_конечного_ряда()
Dim n As Byte 'число элементов в сумме
Dim i As Byte 'счетчик цикла
Dim S As Single ' Сумма
n = InputBox("Введите n", "Ввод числа элементов", 10)
S = 0
For i = 1 To n Step 1
  S = S + 2 ^ i
Next i
MsgBox "Сумма ряда составляет " & S
End Sub

Программа:

! Распространенные ошибки

Подпись: Sub так_не_надо()
  For i = 1 To 6 Step 1
   i = i – 10
  Next i
  MsgBox "i=" & i
  
End Sub

В программах, использующих цикл с конечным числом повторений FOR…NEXT, нежелательно изменять переменную-счетчик цикла в теле цикла. Это может привести к зацикливанию. Например, в следующей программе i никогда не превысит n и программа зависнет.

Выход из зацикливания CTRL+BREAK.

2.  Обработка диапазона ячеек с использованием цикла FOR…NEXT

2.1.  Задача. Заполнить n ячеек, расположенных в первой строке рабочего листа случайными числами.

Обратиться к ячейке из программы можно несколькими способами, например, указав адрес ячейки (Range(“A2”)) или, указав номера строки и столбца, на пересечении которых находится ячейка (Cells(2,3)). Если из программы необходимо обработать одну ячейку, то можно воспользоваться первым способом, если несколько – то вторым.

Для присвоения ячейке случайного целого значения, пользуемся следующей формулой:.

Здесь функция Rnd() возвращает случайное вещественное число, с 15-ю знаками после запятой, в диапазоне от 0 до 1. Чтобы получить число большее 1, результат работы функции Rnd() домножаем на какой-нибудь коэффициент, не меньший 10. Чтобы из полученного значения вычленить целую часть, используем функцию Int.

Чтобы в полученном ряде случайных значений примерно половина чисел были отрицательными, формулу можно дополнить следующим образом:

Алгоритм решения:

1.  Объявить нужные переменные: n – количество ячеек, j –номер столбца, в котором расположена ячейка. Переменную, отвечающую за номер строки, объявлять не будем, т.к. все обрабатываемые ячейки, по условию задачи, располагаются в первой строке.

2.  Организовать цикл, в котором последовательно будут обрабатываться n ячеек.

Если в этой задаче не использовать цикл, то текст программы будет состоять из n однотипных операторов. Например, если необходимо присвоить случайные значения 25-и ячейкам первой строки, то придется набрать 25 операторов вида:

Cells(1,1).Value=Int(Rnd()*10)

Cells(1,2).Value=Int(Rnd()*10)

Cells(1,3).Value=Int(Rnd()*10)

Cells(1,4).Value=Int(Rnd()*10)

Cells(1,5).Value=Int(Rnd()*10)

…………………………………

Cells(1,25).Value=Int(Rnd()*10)


Как видим, эти операторы абсолютно одинаковые, за исключением номера столбца, в котором находится ячейка. Если этот номер заменить какой-либо переменной, изменяющейся от 1 до 25 с шагом 1, можно будет организовать цикл и текст программы будет гораздо короче.

Блок-схема:

Sub Заполнение_диапазона_ячеек__случайными_числами()

Dim n As Integer, j As Integer

'Почистим лист от результатов

'предыдущего выполнения программы

Cells.Select

Selection.Clear

Range("A1").Select

n = InputBox("Сколько ячеек нужно заволнить?", "Ввод n")

For j = 1 To n

Cells(1, j).Value = Int(Rnd() * 10)

Next j

End Sub

 
Программа:

2.2.  Комбинация цикла и ветвления

Задача. На листе дано 25 целых чисел, расположенных в столбце В. Найти среднее геометрическое отрицательных и четных.

Вспомним, что среднее геометрическое нескольких чисел можно вычислить, разделив произведение этих чисел на их количество.

Четное число – это такое число, которое делится на 2 без остатка.

В данной задаче необходимо последовательно пройти по каждой ячейке в столбце В, проверяя является ли значение очередной ячейки числом четным и отрицательным. Если да, то необходимо добавить это число в произведение и посчитать его. После того, как будут рассмотрены все 25 ячеек, вычисляется среднее геометрическое.

Похожие материалы

Информация о работе