Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Сборник по VBA.doc
Скачиваний:
3
Добавлен:
01.05.2025
Размер:
6 Мб
Скачать
☆

Лабораторная работа № 5. Циклы с условием

Циклы с неизвестным числом повторений

Рассматриваемые в данной лабораторной работе циклы (циклы с предусловием, циклы с постусловием, цикл For Each…Next) используют тогда, когда неизвестно число повторений цикла.

1. Циклы с предусловием

Циклы с предусловием – это такие циклы, в которых до начала выполнения тела цикла проверяется условие выполнения следующего шага цикла. Если значение этого условия истинно (т.е. условие выполняется), то выполняется тело цикла. В теле цикла должно изменяться значение, по крайней мере, одной переменной, которая влияет на значение условия (иначе произойдет «зацикливание»). Далее опять проверяется условие выполнения цикла, и если значение условия ложно, то осуществляется выход из цикла.

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

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

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

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

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

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

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

Do While <условие>

Loop

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

Do Until <условие>

Loop

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

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

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

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

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 вариант программы с использованием конструкции Do Until:

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

Loop While <условие>

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

Do

Loop Until <условие>

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

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

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

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

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 вариант программы с использованием конструкции Do Until:

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