Выбрать главу

Разница между вариантами операторов Do

Разницы две:

Между While и Until. Здесь соображения удобства. Что вам удобнее, указывать компьютеру, когда цикл нужно продолжать (f <= 9) или когда его нужно заканчивать (f > 9)?

В том, куда поставить условие — после Do или после Loop. В первом случае можно придумать такое условие, когда тело цикла не выполнится ни разу. Напри-

f = 3

Do Until f > 0

Debug.Print f;

f = f + 2

Loop

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

Часто эти отличия для начинающих малосущественны, поэтому пока выбирайте оператор по вкусу.

Оператор Exit Do

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

Private Sub Command2_Click()

   Debug.Print "Начало счета";

   f = 3

   Do

   Debug.Print f;

   Exit Do

   f = f + 2

   Loop While f <= 9

   Debug.Print "Конец счета"

End Sub

Вот результат работы этой программы:

Начало счета 3 Конец счета

Толк от Exit Do будет тогда, когда его поместят внутрь оператора ветвления:

Private Sub Command1_Click()

   Debug.Print "Начало счета";

   f = 3

   Do

   Debug.Print f;

   If f >= 9 Then Exit Do

   f = f + 2

   Loop

Debug.Print "Конец счета"

End Sub

Вот результат работы этой программы:

Начало счета 3 5 7 9 Конец счета Устаревший оператор цикла

Имеется оператор цикла While Wend, доставшийся от старых версий Бэйсика.

На тот случай, если вам придется запускать чьи-то старые программы, вот вам его синтаксис:

While условие продолжения работы цикла операторы операторы

операторы

операторы

…………..

Wend

А смысл — тот же, что и у Do While…. Loop

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

Я говорил, что имеются две разновидности оператора For. Здесь я рассмотрю только одну.

Мы знаем, что выполняя программу печати чисел 3 5 7 9, оператор Do выполнил цикл 4 раза. Обычно, когда мы пишем операторы Do, нам совсем не интересно знать, сколько раз они выполнят цикл. Тем не менее, существует много задач, для решения которых цикл нужно выполнить именно определенное количество раз. В этом случае удобно использовать оператор цикла For.

Задача: 200 раз напечатать слово ФУТБОЛ.

Попробуем сначала решить задачу при помощи оператора GoTo. Начнем с такого фрагмента:

metka: Print "ФУТБОЛ"

GoTo metka

Но здесь цикл будет повторяться бесконечно, а нам нужно только 200 раз. Мы уже видели, что для выхода из цикла оператор GoTo нужно включить в состав оператора If. Кроме этого нужна переменная, меняющая свое значение от одного выполнения цикла к следующему. Придумаем этой величине какое-нибудь имя, скажем i. Проще всего задачу решает такая процедура:

Private Sub Command1_Click()

   i = 1

   metka: Debug.Print "ФУТБОЛ"

   i = i + 1 'увеличение i на 1

   If i <= 200 Then GoTo metka

End Sub

Здесь i вначале равно 1, но к каждому следующему выполнению цикла оно увеличивается на 1. В первый раз выполняя оператор If, компьютер проверяет условие 2<=200 и найдя его истинным, выполняет оператор GoTo metka. Во второй раз проверяется условие 3<=200 и т. д. В 199-й раз компьютер проверяет условие 200<=200 и найдя его истинным, выполняет оператор GoTo metka. В 200-й раз компьютер проверяет условие 201<=200 и найдя его ложным, выходит из цикла.

В нашем фрагменте "полезную" работу выполняет только одна строка из четырех — Print "ФУТБОЛ". Остальные три строки заняты тем, что обеспечивают выполнение "полезной" строки ровно 200 раз. Нам пришлось организовать специальную переменную i, значение которой в каждый момент выполнения программы говорит о том, в какой раз выполняется цикл. Переменная с таким свойством называется счетчиком циклов.

А теперь перепишем программу так, чтобы логика ее выполнения более менее соответствовала логике выполнения программы с оператором For, которую я привожу параллельно и поясняю немедленно.

Прогоните правый вариант программы в пошаговом режиме, заменив для удобства число 200 числом 5 и следя за значением переменной i.

Слово For переводится "для". Слово То переводится "до". Конструкция For i=1 То 200 понимается так: Для i, изменяющегося от 1 до 200, выполняй операторы, стоящие ниже вплоть до слова Next. Слово Next говорит о том, что надо увеличивать i на 1 и возвращаться к началу цикла. При первом выполнении цикла i будет равно 1, при втором — 2, и так далее. При последнем — 200. Переменная i называется переменной цикла,