Лабораторная работа №4. Циклы
Цель: научиться использовать в программном коде операторы для организации циклических вычислительных процессов For…Next, For Each…Next, Do…Loop и While…Wend.
Литература: при подготовке к лабораторной работе рекомендуется изучить ХХХ главу учебного пособия «Программирование на VBA в MS Excel 2013».
В циклическом вычислительном процессе многократно выполняется группа операторов, составляющих тело цикла. Различают две разновидности циклов – арифметические и итерационные. Для арифметического цикла заранее известно сколько раз он будет выполнен, количество итераций в итерационном цикле заранее не известно – это зависит от некоторых условий.
Оператор For… Next
Это оператор арифметического цикла с предусловием. Иначе этот цикл называется циклом с параметром или циклом со счётчиком.
Формат оператора:
For счетчик = начальное значение То конечное значение [Step шаг]
[операторы_1]
[Exit For]
[операторы_2]
Next [счётчик]
Здесь счётчик – обязательный параметр. Числовая переменная, используемая в качестве параметра цикла (счётчика);
начальное значение и конечное значение – соответственно начальное и конечное значение параметра цикла, обязательные параметры;
шаг – шаг изменения значения счетчик после каждой итерации, параметр не является обязательным, по умолчанию используется значение 1;
операторы – один или более операторов, выполняемых определённое число раз, параметр необязательный.
Первая строка оператора представляет оглавление цикла, а совокупность операторов операторы – тело цикла. Из любого места тела цикла предусмотрен выход из цикла по инструкции Exit For, что позволяет в случае необходимости прервать цикл, не достигнув конечного значения параметра цикла.
Процедура TestFor выводит целые числа от 1 в диапазон A1:J10 листа Excel по столбцам. В этой процедуре используются два цикла: внешний цикл с параметром цикла i и вложенный цикл с параметром цикла j.
Option Explicit
_________________________________________________
Sub TestFor() ‘Заполнение последовательными целыми числами от 1 ‘диапазона A1:J10 по столбцам
Const m As Integer = 10 ‘ количество строк для заполнения
Const n As Integer = 10 ‘ количество столбцов для заполнения
Dim i As Integer ‘ параметр цикла – счётчик столбцов
Dim j As Integer ‘ параметр цикла – счётчик строк
For i = 0 To n - 1 ' цикл по столбцам
For j = 1 To m ' цикл по строкам
Cells(j,i+1) = 10*I + j
Next j
Next i
End Sub
Результат выполнения процедуры TestFor:
В приведённой ниже процедуре TestFor1 используются результаты выполнения процедуры TestFor и подсчитывается сумма нечётных чисел в диапазоне ячеек A1:J10 листа Excel. Ввиду специфики заполнения диапазона ячеек A1:J10 числами процедурой TestFor нечётные числа будут располагаться только в нечётных строках, поэтому суммирование производим только в них.
Sub TestFor1() ' Подсчёт суммы нечётных чисел в диапазоне ячеек
' A1:J10
Const m As Integer = 10 ' количество строк в диапазоне A1:J10
Const n As Integer = 10 ' количество столбцов в диапазоне A1:J10
Dim i As Integer ' параметр цикла – счётчик столбцов
Dim j As Integer ' параметр цикла – счётчик строк
Dim Sum As Double ' сумма нечётных чисел
For i = 1 To m Step 2 ' цикл по строкам
For j = 1 To n ' цикл по столбцам
Sum = Sum + Cells(i,j)
Next j
Next i
MsgBox ("Сумма нечётных членов равна ") & Sum
End Sub
Сделав небольшие изменения в процедуре TestFor1, можно подсчитать сумму нечётных чисел в произвольно заданном диапазоне в пределах ранее заполненной области A1:J10 листа Excel.
Sub TestFor2() ' Подсчёт суммы нечётных чисел в заданном диапазоне ' в пределах области A1:J10
Dim m As Integer ' количество строк для расчёта ≤10
Dim n As Integer ' количество столбцов для расчёта ≤10
Dim i As Integer ' параметр цикла – счётчик столбцов
Dim j As Integer ' параметр цикла – счётчик строк
Dim Sum As Double ' сумма нечётных чисел
m = InputBox("Ведите количество строк для расчёта ")
n = InputBox("Ведите количество столбцов для расчёта ")
For i = 1 To m Step 2 ' цикл по строкам
For j = 1 To n ' цикл по столбцам
Sum = Sum + Cells(i,j)
Next j
Next i
MsgBox ("Сумма нечётных членов равна ") & Sum
End Sub
В процедуре TestFor3 подсчитывается сумма нечётных чисел в заданном диапазоне чисел, причём числа формируются в цикле с нарастанием на 2.
Option Explicit
_________________________________________________
Sub TestFor3() ‘Подсчёт суммы нечётных чисел в заданном диапазоне
Dim i As Integer ' параметр цикла
Dim m As Integer ' начальное значение диапазона
Dim n As Integer ' конечное значение диапазона
Dim Sum As Integer ' сумма нечётных чисел
m = InputBox("Введите начальное значение диапазона")
n = InputBox("Введите конечное значение диапазона")
Sum = 0 ' не обязательно, так как при определении
' переменной Sum она инициализируется нулём
If m Mod 2 = 0 Then m = m + 1 ' если ввели m чётное
For i = m To n Step 2 'сумма нечётных чисел от m до n
Sum = Sum + i
Next i
MsgBox Prompt:="Сумма нечётных чисел в диапазоне от " & m & _
" до " & n & " равна " & Sum, Buttons:=vbExclamation, _
Title:=" Сумма нечётных чисел"
End Sub
В процедуре TestFor4 реализован алгоритм ввода данных с клавиатуры в ячейки рабочего листа, причём заполнение производится построчно, и подсчёт суммы и количества нечётных чисел.
Sub TestFor4()
Dim i As Integer ' счётчик строк
Dim j As Integer ' счётчик столбцов
Dim m As Integer ' количество чисел в строке
Dim n As Integer ' количество чисел в столбце
Dim Sum As Long ' сумма нечётных чисел
Dim k As Integer ' количество нечётных чисел
n = InputBox("Введите количество чисел в строке ")
m = InputBox("Введите количество чисел в столбце ")
For i = 1 To m Step 1 ' цикл по строкам
For j = 1 To n Step 1 ' цикл по столбцам
Cells(i, j) = InputBox("Введите значение в ячейку " & _
Chr(j + 64) & i, _
"Ввод данных в таблицу")
If Abs(Cells(i, j)) Mod 2 = 1 Then ' число нечётное
Sum = Sum + Cells(i, j)
k = k + 1
End If
Next j
Next i
MsgBox ("Сумма нечётных чисел = " & Sum & vbNewLine & _
"Число нечётных чисел= " & k)
End Sub
