Опубликован: 19.11.2012 | Уровень: для всех | Доступ: платный | ВУЗ: Национальный исследовательский университет "Высшая Школа Экономики"
Лекция 16:

Основы программирования

< Лекция 15 || Лекция 16: 1234 || Лекция 17 >

16.4. Операторы цикла

Повтор действий в процедурах достигается при помощи организации циклов. Цикл – это многократно повторяемая последовательность операторов. Существуют различные способы организации циклов, но во всех способах есть:

  • строка, которая отмечает начало цикла, и строка, которая отмечает его конец;
  • условие выхода из цикла или продолжения выполнения цикла.

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

Нельзя передавать управление внутрь цикла и из цикла к оператору, расположенному вне цикла.

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

  • вычисляемые циклы повторяют набор команд определенное (вычисляемое) число раз;
  • объектные циклы выполняют набор команд для каждого объекта группы;
  • логически прерываемые циклы повторяют команды, пока условие имеет истинное значение или пока значение условия не станет таковым.

Цикл For…Next

Оператор используется для организации вычисляемого цикла (counted loop), который применяется, если известно или может быть вычислено количество повторений.

Синтаксис оператора:

For counter = start To end [Step step] 
[statements]
[Exit For] 
[statements] 
Next [counter]
  • counter – переменная цикла (счетчик цикла);
  • start – начальное значение переменной цикла;
  • end – конечное значение переменной цикла;
  • step – шаг цикла. Необязательное значение. По умолчанию шаг цикла равен единице;
  • Exit For – оператор немедленного выхода из цикла;
  • statements – набор повторяемых команд (тело цикла);
  • Next – оператор окончания цикла.

На рис.16.9 приведен пример оператора вычисляемого цикла, в котором подсчитывается сумма первых десяти натуральных чисел. При первом входе в цикл счетчик цикла устанавливается в начальное значение (start=1). При каждом повторе к счетчику цикла прибавляется шаг цикла (step, по умолчанию 1). Как только значение переменной цикла превысит конечное значение (end=10), цикл завершается. Можно подсчитать, сколько раз выполнится цикл. Например, если шаг цикла равен единице, то цикл выполняется end-start+1 раз и каждый раз с новым значением счетчика цикла.

Вычисляемый цикл

Рис. 16.9. Вычисляемый цикл

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

Параметры цикла start, end, step могут быть заданы числами, числовыми переменными или числовыми выражениями. Параметры цикла вычисляются при входе в цикл и не изменяются во время выполнения цикла, даже если меняются переменные, влияющие на эти значения. Параметры цикла могут иметь положительные и отрицательные значения.

Цикл For Each…Next

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

Синтаксис оператора:

For Each element In group
[statements] 
[Exit For] 
[statements] 
Next [element]
  • element – переменная, значения которой суть элементы из группы;
  • group – массив данных или коллекция объектов;
  • statements – последовательность операторов, выполняемая для каждого элемента;
  • Exit For – оператор, осуществляющий немедленный выход из цикла.

Если цикл выполняется для массива, то переменная element должна быть переменной типа Variant. Если цикл записан для коллекции объектов, то тип переменной element – Object, или должен совпадать с типом элементов коллекции объектов. Не рекомендуется внутри цикла изменять количество элементов массива или коллекции, так как команды тела цикла могут не обработать новый элемент. Цикл For Each для коллекции объектов более эффективен, чем цикл For Next.

На рис.16.10 в цикле суммируются ячейки интервала A1:B10.

Цикл объектного типа

Рис. 16.10. Цикл объектного типа

Цикл Do…Loop

Этот цикл является логически прерываемым циклом. Цикл повторяет набор инструкций, пока выполнено некоторое условие. Такую форму цикла чаще всего применяют в условиях неопределенности, когда нельзя заранее установить, сколько раз потребуется повторять действия, например, если заранее не известно, скольким сотрудникам следует рассчитать зарплату.

Синтаксис оператора:

Do [(While|Until) condition] 
[statements]
[Exit Do] 
[statements]
Loop [(While|Until) condition]
  • condition – тестируемое выражение со значением True или False;
  • While|Until – ключевые слова (используется одно из двух), которые определяют, до каких пор будут выполняться команды, составляющие тело цикла: While – повтор операторов, пока условие (condition) истинно; Until – повтор операторов, пока условие ложно (пока условие не станет истинным). Таким образом, циклы с ключевым словом While эквивалентны циклам Until, в которых перед условием стоит отрицание Not: While condition = Until Not condition;
  • Exit Do – оператор немедленного выхода из цикла;
  • statements – последовательность операторов, выполняемых в цикле.

По сути, оператор имеет пять вариантов синтаксиса: запись условия While|Untilперед входом в цикл (предусловие), запись условия While|Until1 в конце цикла (постусловие) и запись оператора без задания условия. В последнем случае в теле цикла должна осуществляться проверка условия выхода из цикла или продолжения цикла и должен присутствовать оператор немедленного выхода из цикла Exit Do (рис.16.11).

Если условие выполнения цикла нарушено при входе в цикл, то в случае предусловия тело цикла не выполнится ни разу, а в случае постусловия операторы тела цикла выполнятся один раз.

Возможно использование вложенных циклов, в том числе разных конструкций. Оператор Exit Do всегда завершает внутренний цикл.

Выход из цикла Do … Loop при помощи оператора Exit Do

Рис. 16.11. Выход из цикла Do … Loop при помощи оператора Exit Do

На рис.16.11 представлена процедура и результат расчета суммы социальных выплат. Предполагается, что данные о зарплате размещены в ячейках колонки A. Цикл выполняется, пока очередная ячейка не окажется пустой или нулевой.

Выход из цикла производится оператором Exit Do. Процедура на рис.16.12 выполняет те же действия, но в операторе цикла задано предусловие с ключевым словом While.

Цикл While…Wend

Этот способ организации цикла повторяет команды тела цикла, пока заданное условие верно. Он полностью эквивалентен циклу Do…Loop с условием While в первой строке оператора (сравни рис.16.12 и рис.16.13). При таком способе организации цикла не применяется оператор немедленного завершения цикла.

Оператор цикла Do…Loop с предусловием

Рис. 16.12. Оператор цикла Do…Loop с предусловием

Синтаксис оператора:

While condition
Statements
Wend
  • condition – тестируемое выражение со значением True или False;
  • statements – последовательность операторов, выполняемых в цикле.
Оператор цикла While…Wend

Рис. 16.13. Оператор цикла While…Wend
< Лекция 15 || Лекция 16: 1234 || Лекция 17 >
Аннна Миллер
Аннна Миллер
Екатерина Дмитриева
Екатерина Дмитриева
Далгат Мирзаев
Далгат Мирзаев
Россия, Буйнакск