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

В данном конкретном случае сами по себе значения 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