Онлайн
библиотека книг
Книги онлайн » Разная литература » Интернет-журнал "Домашняя лаборатория", 2008 №7 - Журнал «Домашняя лаборатория»

Шрифт:

-
+

Закладка:

Сделать
1 ... 153 154 155 156 157 158 159 160 161 ... 192
Перейти на страницу:
тот же результат мы бы получили и с оператором 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

что означает

Ждал While или Until или конца строки

Visual Basic недостаточно умен, чтобы точно описать вам вашу ошибку, но он хотя бы говорит вам, что ему от вас нужно.

На стадии выполнения Visual Basic замечает такие ошибки, как Sqr(-25), то есть квадратный корень из -25. На нее он среагирует таким сообщением — >

что означает Неправильный вызов процедуры или неправильный параметр процедуры. В нашем случае это, конечно, недопустимое значение параметра (-25). Чтобы узнать, на какое место программы Visual Basic грешит, нажмите кнопку Debug. Visual Basic переходит в режим прерывания и подсвечивает ошибочную по его мнению строку.

К ошибкам, которые Visual Basic не обнаруживает, относятся смысловые ошибки. Так, если вы, желая увеличить число а на 1, вместо а=а+1 пишете а=а+2, то этого не заметит ни один язык в мире.

Отладка программы. Окна отладки. Режимы отладки.

Ранее я изложил пошаговый способ выполнения программы. Его вполне достаточно для отладки простейших программ. В более сложных случаях можно применять другие способы, с которыми мы сейчас познакомимся. Кстати, зачастую они и более удобны. Итак рассмотрим окна Locals, Watches, Quick Watch, Call Stack и новые способы использования окна Immediate.

На рисунке в окне кода вы видите некую процедуру Command1_Click в процессе отладки:

Выполнившись с начала до конца, эта процедура печатает в окне Immediate такую информацию:

Начало работы

20 3

18 4

16 5

14 6

12 7

10 8

Конец работы

Вообразим, что нас такая печать привела в недоумение, мы по своей бестолковости ожидали, что будет напечатано

Начало работы

20 3

18 4

Конец работы

Чтобы разобраться в случившемся, мы и затеяли отладку.

Окно Locals. Прежде всего при помощи View->Locals Window и View->Immediate Window мы вызвали на экран окна Locals и Immediate. Назначение окна Locals — показывать в режиме прерывания значения локальных переменных выполняемой процедуры. После этого клавишей F8 запустим пошаговый

1 ... 153 154 155 156 157 158 159 160 161 ... 192
Перейти на страницу: