Национальный исследовательский университет "Высшая Школа Экономики"
Опубликован: 01.04.2010 | Доступ: свободный | Студентов: 4353 / 899 | Оценка: 4.45 / 4.06 | Длительность: 08:48:00
ISBN: 978-5-9556-0119-9
Специальности: Программист
Лекция 6:

Операторы управления

< Лекция 5 || Лекция 6: 1234 || Лекция 7 >

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

Повтор действий в процедурах достигается при помощи организации циклов. Цикл - это многократно повторяемая последовательность операторов.

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

В языке 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 - оператор окончания цикла.

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

Внимание:
  • counter - числовая переменная. Счетчик цикла обычно участвует в вычислениях внутри цикла.
  • Параметры цикла start, end, step могут быть заданы числами, числовыми переменными или числовыми выражениями.
  • Параметры цикла вычисляются при входе в цикл и не изменяются во время выполнения цикла, даже если меняются переменные, влияющие на эти значения.
  • Параметры цикла могут иметь положительные и отрицательные значения.
  • Внутри тела цикла не рекомендуется присваивать новые значения переменной цикла, т.к. это может вызвать зацикливание.
  • Счетчик цикла можно использовать и по завершении цикла. По окончании цикла значение счетчика цикла равно конечному значению плюс шаг.
  • Рекомендуется указывать в операторе Next идентификатор счетчика цикла, так как в случае использования вложенных циклов часто трудно определить, где кончается тот или иной цикл.
  • Оператор Exit For осуществляет немедленный выход из цикла независимо от значения счетчика цикла.

Примеры

  1. Распечатать в окне Immediate первые пять целых чисел ( рис. 6.5).

    Переменная i (счетчик цикла) в процессе выполнения цикла меняет значение от 1 (устанавливается выражением i=1 ) до значения 5, заданного выражением To 5. Шаг изменения значений переменной i по умолчанию 1.

    Распечатка в окне Immediate первых пяти целых чисел

    Рис. 6.5. Распечатка в окне Immediate первых пяти целых чисел
    Можно было бы записать все операторы на одной строке, используя двоеточие как разделитель между операторами
    For i=1 To 5: Debug.Print i : Next i.
  2. Подсчитать сумму чисел от 1 до 1000 ( рис. 6.6).

    В процедуре используются два оператора присваивания: s=0, s=s+n. Первый оператор устанавливает начальное значение для суммы чисел, а второй наращивает эту сумму в процессе вычислений.

    Пример суммирования  чисел от 1 до 1000

    Рис. 6.6. Пример суммирования чисел от 1 до 1000

Цикл 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.

Примеры

  1. Просуммировать элементы массива.

    В вычисляемом цикле значения элементов массива устанавливаются равными номеру элемента массива.

    В цикле объектного типа подсчитывается сумма элементов массива: переменная цикла i принимает значения элементов массива.

    Суммирование элементов массива

    Рис. 6.7. Суммирование элементов массива
  2. Заполнить интервал ячеек последовательными натуральными числами.

    Переменная Obj_range объявлена как объект Range и ее значение устанавливается оператором Set как ссылка на интервал ячеек A1:B6.

    Переменная p (переменная цикла объектного типа) перебирает все ячейки интервала Obj_range, устанавливая их значения в номер элемента.

    Заполнение интервала ячеек последовательными натуральными числами

    увеличить изображение
    Рис. 6.8. Заполнение интервала ячеек последовательными натуральными числами
< Лекция 5 || Лекция 6: 1234 || Лекция 7 >
Дмитрий Денисов
Дмитрий Денисов

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

Дмитрий Денисов
Дмитрий Денисов

Как записаться на курс, оплатить, не ориентируюсь в программе.

Ранее у Вас учился.

Работаю преподавателем, есть справка. Как получить скидку, т.е. оплата 2000