38. Счетный оператор цикла или оператор цикла с параметром

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

Цикл с предпроверкой условия

Оператор цикла с предпроверкой условия  схематично представлен в виде  блок-схемы на рис.2 и имеет следующий формат:

While <условие> Do <оператор>

         Здесь While, Do — зарезервированные слова («Пока [выполняется условие]», «делать»);

<условие> — выражение логического типа;

<оператор> — произвольный оператор, составляющий тело цикла (включая случай расширенного оператора).

Если условие имеет значение «Истинно» (True), то выполняется<оператор>, после  чего проверка условия повторяется. Если условие имеет значение «Ложь» (False), то оператор While прекращает свою работу. 

Рис.5.2 Блок-схема цикла с предпроверкой условия

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

Пример.  Дан бесконечный ряд вида

Найти сумму данного бесконечного ряда с заданной точностью e=,т.е. продолжать процесс суммирования до тех пор, пока модуль разности между суммами для k-го и (k+1)-го шага не станет меньше e.

Оператор цикла FOR – язык программирования JSCRIPT

Как видим, ничего сложного нет… Для примера, допустим нам надо обработать массив, который состоит из 300 элементов. Делать это вручную просто глупо, поэтому, мы задаем начальный номер элемента и конечный, объявляем переменную, которой на каждой итерации будет присваиваться новое число (индекс), так мы с помощью одной строки программного кода сможем многократно выполнять нужную операцию.

Хорошо, давайте рассмотрим простой пример:

//************************************* // оператор цикла for js // Сложение чисел // jscript_ //************************************* var summ=; //Сложение чисел от 1 до 10 for (var i=1; i<=10; i++) { summ+=i; } WScript.Echo (summ); //55 summ=; //Сумма парных цифр от 2 до 10 for (var i=2; i<=10; i+=2) { summ+=i; } WScript.Echo (summ); //30

В данном сценарии JScript мы используем две конструкции for.

Оператор цикла FOR – язык программирования JSCRIPT

Первая – Вычисляет сумму чисел от 1 до 10, видим, что мы объявили локальную переменную i, в качестве начального значения (инициализация), мы указали 1, в качестве проверки мы задали условие i<10. В блоке обновления мы прописали i++ — это операция инкремента, аналогично, мы могли прописать i+=1 или i=i+1.

Вторая — Выполняет задачу аналогичную первому оператору for цикла, но тут мы вычисляем сумму всех парных чисел на отрезке от 2 до 10.

Хорошо, теперь давайте рассмотрим такую ситуацию, нужно решить уравнение, или просто, математическое выражение, в котором должна изменяться не одна переменная, а несколько, в таком случае, чтобы не использовать два цикла for js, JScript язык позволяет использовать символ «запятая», смотрим пример:

//************************************* // оператор цикла for // Сложение цифр // 1_jscript_ //************************************* var summ1=, summ2=; //Сумма цифр от 1 до 10 for (i=1, k=10; i<=10, k>=1; i++, k) { summ1+=i; summ2+=k } WScript.Echo ("от 1 до 10: " + summ1 + "\nот 10 до 1: " + summ2); //55

В данном примере, который работает под управлением сервера Windows Script Host, мы использовали один оператор for цикла js, как видим, он позволяет через запятую прописывать несколько условий. Фактически, тут вычисляется сумма дважды, в первом случае идет суммирование чисел от 1 до 10, а во втором случае идет суммирование в обратном порядке от 10 до 1. Данный пример не несет никакой практической пользы, и является лишь примером для лучшего понимания.

Давайте рассмотрим следующий пример на языке jscript:

//************************************* // оператор цикла for // Квадратное уравнение // 2_jscript_ //************************************* var res="", result=, a=-2, b=6, c=20; //ax2+bx+c=0 // решение: x1=-2, x2=5 //Сумма цифр от 1 до 10 for (var x=-10; x<=10; x+=0.5) { result=a*(x*x)+b*x+c; if (result==) {res+=x + "\n"} } WScript.Echo (res);

Оператор цикла FOR – язык программирования JSCRIPT

Данный пример показывает как можно с помощью оператора цикла for и JS сценария решить квадратное уравнение методом простого перебора. Используя цикл js for, мы задали начальное и конечное значение x, которое будет подставляться в квадратное уравнение, мы знаем, что квадратное уравнение, это уравнение вида ax2 +bx + c = 0. Подставляя x, мы проверяем результат решения, если результат равен нулю, то мы заносим значение x в res. В качестве обновления (итерации) мы увеличиваем значение x на 0,5. Конечно, я знал решение квадратного уравнения, и поэтому выбрал столь малые промежутки. Другое дело, если приёется решать кубическое уравнение с помощью оператора for цикла. Тут нам придётся указывать куда более большее начальное и конечное значение.

Скачать архив с примерами

В теле самой конструкции for, JS языка, можно использовать дополнительно break и continue. BREAK производит выход из текущего блока цикла, а CONTINUE – пропускает текущую итерацию и переходит к следующей итерации. Использование break и continue я также рассмотрел в статье: «Конструкции while и do…while».

Цикл while

Цикл while является циклом с предусловием. В заголовке цикла находится логическое выражение. Если оно возвращает true, то тело цикла выполняется, если false – то нет.

Когда тело цикла было выполнено, то ход программы снова возвращается в заголовок цикла. Условие выполнения тела снова проверяется (находится значение логического выражения). Тело цикла выполнится столько раз, сколько раз логическое выражение вернет true. Поэтому очень важно в теле цикла предусмотреть изменение переменной, фигурирующей в заголовке цикла, таким образом, чтобы когда-нибудь обязательно наступала ситуация false. Иначе произойдет так называемое зацикливание, одна из самых неприятных ошибок в программировании.

var i, n: integer;   begin write (‘Количество знаков: ‘); readln (n);   i := 1; while i <= n do begin write (‘(*) ‘); i := i + 1 end;   readln end.

Примеры циклов For… Next

Вы можете скопировать примеры циклов в свой модуль VBA, последовательно запускать их на выполнение и смотреть результаты.

Простейший цикл

Заполняем десять первых ячеек первого столбца активного листа Excel цифрами от 1 до 10:

123456 Sub test1()Dim i As Long For i = 1 To 10 Cells(i, 1) = i NextEnd Sub

Простейший цикл с шагом

В предыдущий цикл добавлен оператор Step со значением 3, а результаты записываем во второй столбец:

123456 Sub test2()Dim i As Long For i = 1 To 10 Step 3 Cells(i, 2) = i NextEnd Sub

Цикл с отрицательными аргументами

Этот цикл заполняет десять первых ячеек третьего столбца в обратной последовательности:

123456 Sub test3()Dim i As Long For i = To 9 Step 1 Cells(i + 10, 3) = i + 10 NextEnd Sub

Увеличиваем размер шага до -3 и записываем результаты в четвертый столбец активного листа Excel:

123456 Sub test4()Dim i As Long For i = To 9 Step 3 Cells(i + 10, 4) = i + 10 NextEnd Sub

Вложенный цикл

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

12345678910 Sub test5()Dim i1 As Long, i2 As Long For i1 = 1 To 10‘Пятой ячейке в строке i1 присваиваем 0 Cells(i1, 5) = For i2 = 1 To 4 Cells(i1, 5) = Cells(i1, 5) + Cells(i1, i2) Next NextEnd Sub
Примеры циклов For… Next

Выход из цикла

В шестой столбец активного листа запишем названия десяти животных, конечно же, с помощью цикла For… Next:

1234567 Sub test6()Dim i As Long For i = 1 To 10 Cells(i, 6) = Choose(i, «Медведь», «Слон», «Жираф», «Антилопа», _ «Крокодил», «Зебра», «Тигр», «Ящерица», «Лев», «Бегемот») NextEnd Sub

Следующий цикл будет искать в шестом столбце крокодила, который съел галоши. В ячейку седьмого столбца цикл, пока не встретит крокодила, будет записывать строку «Здесь был цикл», а когда обнаружит крокодила, запишет «Он съел галоши» и прекратит работу, выполнив команду Exit For. Это будет видно по ячейкам рядом с названиями животных ниже крокодила, в которых не будет текста «Здесь был цикл».

1234567891011 Sub test7()Dim i As Long For i = 1 To 10 If Cells(i, 6) = «Крокодил» Then Cells(i, 7) = «Он съел галоши» Exit For Else Cells(i, 7) = «Здесь был цикл» End If NextEnd Sub

Результат работы циклов For… Next из примеров:

Результат работы циклов For… Next

Такие данные на активном листе Excel вы получите, если последовательно запустите на выполнение в редакторе VBA все семь подпрограмм из примеров, демонстрирующих работу циклов For… Next.

Цикл с дробными аргументами

Атрибуты start, end и step могут быть представлены числом, переменной или числовым выражением:

123 For i = 1 To 20 Step 2For i = a To b Step cFor i = a 3 To 2b + 1 Step c/2

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

1234 ‘Значения атрибутов до округленияFor i = 1.5 To 10.5 Step ‘Округленные значения атрибутовFor i = 2 To 10 Step 3

Старайтесь не допускать попадания в тело цикла For… Next неокругленных значений аргументов, чтобы не получить непредсказуемые результаты его выполнения. Если без дробных чисел не обойтись, а необходимо использовать обычное округление, применяйте в коде VBA функцию рабочего листа для округления числа перед использованием его в цикле For… Next.

Содержание рубрики VBA Excel по тематическим разделам со ссылками на все статьи.

Читайте также:  Как в Ubuntu войти как root-пользователь