лучшим средством для понимания является отладочный режим. Попробуйте ошибочный вариант программы с While f<9 выполнить в пошаговом режиме.
Задача: Компьютер предлагает человеку ввести слово, после чего распечатывает это слово, снабдив его восклицательным знаком. Затем снова предлагает ввести слово и так до тех пор, пока человек не введет слово "Хватит". Распечатав его с восклицательным знаком, компьютер отвечает "Хватит так хватит" и заканчивает работу.
Придумаем строковую переменную, в которую человек будет с клавиатуры вводить слово. Назовем ее Slovo. Выберем подходящий вариант оператора Do, это будет 2-й, и пишем программу:
Dim Slovo As String
Private Sub Command1_Click()
Do
Slovo = InputBox("Введите слово")
Debug.Print Slovo; "!"
Loop Until Slovo = "Хватит"
Debug.Print "Хватит так хватит"
End Sub
Задание 42: Усложним эту задачу. Пусть компьютер перед распечаткой каждого слова ставит его порядковый номер.
Задание 43–44: Выполнить с применением оператора Do задания 38 и 41 из предыдущего раздела.
Задание 45: Если камень бросить горизонтально со 100-метровой башни со скоростью v=20m/c, то его расстояние от башни по горизонтали s будет выражаться формулой s=vt, где t — время полета камня в секундах. Высота над землей h будет выражаться формулой h=100 — 9.81t2/2. Вычислять и печатать t, s и h для t = 0, 0.2, 0.4, 0.6 и так далее до тех пор, пока камень не упадет на землю.
Разница между вариантами операторов 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 называется переменной цикла,
В данном конкретном случае сами по себе значения i не важны,