Информатика: Сборник лабораторных работ по программированию в среде Visual Basic for Applications, страница 20

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

На блок-схеме такой цикл реализуется следующей конструкцией:

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

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

Рассмотрим два варианта:

1) тело цикла будет выполняться до тех пор, пока значение условия истинно.

Do While <условие>

Loop

2) тело цикла будет выполняться до тех пор, пока значение условия ложно.

Do Until <условие>

Loop

Чтобы прервать цикл с предусловием до его завершения и передать управление первому оператору, следующему за Loop, используют оператор ExitDo.

Пример 1. Скопировать ячейки столбца В с Листа 1, начиная с ячейки В2 и до первой пустой ячейки, в аналогичные клетки на Лист 2.

Рис.12. Блок-схема к примеру 1

1 вариант программы с использованием конструкции DoWhile:

Sub Pr1_1()

Dim i As Integer

i=2

Do While IsEmpty(Sheets(”Лист1”).Cells(i,2)) = False

Sheets(”Лист2”).Cells(i,2)) = Sheets(”Лист1”).Cells(i,2))

i=i+1

Loop

2 вариант программы с использованием конструкции DoUntil:

Sub Pr1_2()

Dim i As Integer

i=2

Do Until IsEmpty(Sheets(”Лист1”).Cells(i,2))

Sheets(”Лист2”).Cells(i,2)) = Sheets(”Лист1”).Cells(i,2))

i=i+1

Loop

2. Цикл с постусловием

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

На блок схеме этот тип цикла изображается следующим образом:

Рис. 13. Блок-схема цикла с постусловием

Операторы циклов с постусловием

Рассмотрим также два варианта операторов цикла с постусловием:

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

Do

LoopWhile <условие>

2) тело цикла будет выполняться до тех пор, пока значение условия ложно

Do

LoopUntil <условие>

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

Пример 2. Скопировать ячейки столбца В с Листа 1, начиная с ячейки В2, в аналогичные клетки на Лист 2. Копировать клетки до тех пор, пока сумма значений скопированных клеток не станет больше 100. Если среди копируемых клеток встретится клетка, содержащая отрицательное число, выйти из цикла, не копируя эту клетку.

Рис.14. Блок-схема к примеру 2

1 вариант программы с использованием конструкции DoWhile:

Sub Pr2_1()

Dim I As Integer, S As Single

i=1: S=0

Do

i=i+1

If Sheets(”Лист1”).Cells(i,2))<0 Then Exit Do

Sheets(”Лист2”).Cells(i,2)) = Sheets(”Лист1”).Cells(i,2))

S=S + Sheets(”Лист1”).Cells(i,2)

Loop While S <= 100

2 вариант программы с использованием конструкции DoUntil:

Sub Pr2_2()

Dim I As Integer, S As Single

i=1: S=0

Do

i=i+1

If Sheets(”Лист1”).Cells(i,2))<0 Then Exit Do

Sheets(”Лист2”).Cells(i,2)) = Sheets(”Лист1”).Cells(i,2))

S=S + Sheets(”Лист1”).Cells(i,2)

Loop Until S > 100

3. Цикл For Each … Next

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

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

For Each <элемент> In <группа>

Next [<элемент>]

<Элемент> – это переменная, которая используется для представления элементов массива или семейства объектов. На каждом проходе переменная цикла (<элемент>) будет содержать в себе очередной элемент массива или объект семейства. Доступ к свойствам и методам объекта при этом становится возможным через имя переменной цикла (<элемента>).