В данном конкретном случае сами по себе значения i не важны, тот же результат мы бы получили и с оператором For i = 501 То 700
Задача: Распечатать пары чисел — 101 1000 102 990 103 980 104 970… 109 920 110 910
Здесь значения переменной цикла важны. Вот программа:
Private Sub Command1_Click()
For a = 101 To 110
Debug.Print a;
Debug.Print 1000 — 10 * (a — 101)
Next a
End Sub
До сих пор переменная цикла менялась с шагом 1. Шаг можно задавать любой и тогда оператор For очень удобно использовать вместо Do — программы получаются короче. Напишем, например, программу для вычисления таблиц Брадиса (задача 38 — напомню, что нужно печатать квадраты чисел от 0 до 1 с шагом 0.001):
Private Sub Command1_Click()
For a = 0 To 1.00001 Step 0.001
Debug.Print Format(a, "0.000"), Format(a * a, "0.000000")
Next a
End Sub
Здесь Step 0.001 означает "Шаг 0.001". Для более аккуратной печати я использовал форматирование. Почему вместо 1 я написал 1.00001, объяснено в ответе к задаче 38.
Если бы мы хотели посчитать таблицы Брадиса в обратном порядке — от 1 до 0, то оператор цикла нужно было бы записать так:
For а = 1 То 0 Step -0.001
Синтаксис оператора For:
For переменная = выражение1 То выражение2 [Step выражение3]
операторы
операторы
……….
Next [переменная]
Переменная здесь должна иметь числовой тип. После Next вы можете ее не писать, но в программах, где много For и Next, я рекомендую это делать для легкости чтения программы, чтобы вам удобней было разобраться, для какого For этот Next.
Пример записи: For j=a+b То 2*s Step k*10
Если шаг не указан, он считается равным 1, то есть переменная на каждом выполнении цикла увеличивается на 1. Если же мы хотим уменьшать ее на 1, нам придется явно указать Step -1.
Работа оператора For при положительном (или нулевом) шаге:
Прежде всего вычисляется выражение1, и переменной цикла (пусть это будет i) присваивается его значение. Затем вычисляется выражение2 и сравнивается с i. Если i > выражения2, то оператор For завершает свою работу, так ничего и не сделав. В противном случае выполняются операторы, стоящие между строками For и Next. После их выполнения значение i увеличивается на значение выражения3 (или при его отсутствии на 1) и снова сравнивается с выражением2. Если i > выражения2, то оператор For завершает свою работу, иначе снова выполняются операторы, снова i увеличивается и т. д.
Работа оператора For при отрицательном шаге:
Прежде всего вычисляется выражение1, и переменной цикла (пусть это будет i) присваивается его значение. Затем вычисляется выражение2 и сравнивается с i. Если i < выражения2, то оператор For завершает свою работу, так ничего и не сделав. В противном случае выполняются операторы, стоящие между строками For и Next. После их выполнения значение i уменьшается на значение модуля выраженияЗ и снова сравнивается с выражением2. Если i < выражения2, то оператор For завершает свою работу, иначе снова выполняются операторы, снова i уменьшается и т. д.
Оператор Exit For
Оператор Exit For — еще один способ выхода из цикла For. Применяется он совершенно аналогично оператору Exit Do, поэтому отсылаю вас туда.
Задание 46: Напечатать с помощью оператора For: Прямой счет: -5 -4 -3 -2 -1 0 1 2 3 4 5 Обратный счет: 5 4 3 2 1 0–1 -2 -3 Конец счета
Оглядимся вокруг
Итак, мы изучили три способа заставить компьютер многократно выполнять часть кода внутри процедуры:
Операторы Do… Loop
Операторы For
Устаревший оператор Goto
Существуют способы заставить многократно выполняться процедуру целиком, среди них:
Использование таймера.
Рекурсия.
Отладка программы
Мы уже добрались до программ, требующих для своей отладки более совершенных средств, чем простой пошаговый режим. Поговорим о них.
Типы ошибок. Сообщения об ошибках.
Сначала перечтите, пожалуйста, материал о сообщениях об ошибках.
Ошибки в программах делятся на те, которые Visual Basic замечает в процессе ввода программы, на те, что замечает в процессе выполнения программы, и на те, что не замечает и в принципе заметить не может.
К первым относятся все синтаксические погрешности. Например, если вы вместо строки Do Until а>0 введете Do Antil а>0 и попытаетесь перейти на следующую строку, Visual Basic выдаст сообщение об ошибке
Expected While or Until or end of statement