Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Понятно о Visual Basic.NET. Самоучитель.Ч2.2005...docx
Скачиваний:
46
Добавлен:
25.11.2019
Размер:
4.02 Mб
Скачать
      1. Зацикливание

Теперь запустите эту программу обычным образом (не в пошаговом режиме). Через некоторое время перед вами должен встать жизненно важный вопрос – когда же она остановится? А никогда! Вы видите, что окно Output лихорадочно заполняется текстом, а белка в колесе и не думает уставать.

Вы обнаружите, что кнопки и другие элементы управления на форме не отзываются на нажатие мыши, и вообще, до программы «не докричишься». Любопытно, что так «глохнет» любая нормальная программа в процессе выполнения операторов кода. И все ваши прежние программы тоже так «глохли». Но вы этого не замечали по той простой причине, что весь код их процедур выполнялся очень быстро. Не успели вы нажать на кнопку, а все уже выполнилось и снова программа реагирует на ваши действия.

В нормальной программе, написанной без ошибок, исключены ситуации, когда код выполняется бесконечно или на протяжении слишком долгого времени. Если же вы допустили ошибку и в программе выполняется бесконечный цикл, то возникает как раз такая ситуация. Вы вечно будете смотреть на экран, по которому бесконечно бегут непонятные числа или слова или рисуются бесконечные вереницы графических фигур, а возможно и ничего не происходит – все зависит от характера программы. Говорят, что программа зациклилась.

Для прерывания работы программы, в том числе и зациклившейся, вы нажимаете кнопку Stop. Можно щелкнуть и по крестику на форме, но в этом случае VB подвергнет вас небольшому допросу.

      1. Примеры

Все нижеприведенные примеры прогоните в обычном и в пошаговом режиме.

Пример 1. Определите без компьютера, что напечатает фрагмент:

Dim a = 100

GoTo 8

a = a + 40

Dim k = 7

Debug.Write(a)

8: a = a + 2

k = k + 10

Debug.Write(a)

Этот фрагмент напечатает 102. Операторы выполняются в такой последовательности:

Dim a = 100

GoTo 8

a = a + 2

k = k + 10

Debug.Write(a)

А операторы

a = a + 40

Dim k = 7

Debug.Write(a)

выполнены не будут вообще, несмотря на то, что написаны. Цикла здесь нет.

Пример 2. Печатать числа 0, 1, 2, 3 . . . и так без конца.

Вот программа:

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click

Dim n As Long = 0

m1: Debug.Write(n & " ")

n = n + 1

GoTo m1

End Sub

Здесь в оператор Debug.Write(n & " ") вставлена печать пробела, чтобы как-то отделить друг от друга числа в одной строке.

Обратите внимание, что когда компьютер, скажем, в 24-й раз выполняет тело цикла, значение n как раз равно 24. Значит, зная в любой момент значение n, мы можем сказать, в какой раз выполняется тело цикла (еще говорят: какая итерация цикла выполняется). Переменная, обладающая таким свойством, называется счетчиком циклов.

Пример 3. Выводить числа 0, 1, 2, 3 . . . , но не на печать, а в элемент управления Label (что весьма приятно наблюдать).

Вот программа:

Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click

Dim n As Long = 0

m1: Label1.Text = n

Label1.Refresh()

n = n + 1

GoTo m1

End Sub

Здесь новостью для нас является оператор Label1.Refresh(), который можно перевести так – «перерисовать, обновить, освежить Label1». Без него вы не увидели бы в Label1 никаких новых чисел, информация в ней просто не обновлялась бы. Метод Refresh подходит в некоторых случаях и к другим элементам управления.

Пример 4. Печатать числа 200, 205, 210, 215 . . . и так без конца.

Вот программа:

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click

Dim n As Long = 200

m1: Debug.Write(n & " ")

n = n + 5

GoTo m1

End Sub

Определить без компьютера, что будет печатать программа:

Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click

Dim n As Integer = 10

Dim k As Integer = 0

Debug.WriteLine("Считаем зайцев")

met5: Debug.Write(n)

n = n + k

GoTo m1

n = n + 1

m1: Debug.WriteLine(" зайцев")

k = k + 1

GoTo met5

Debug.Write("Посчитали зайцев")

End Sub

Если не можете определить – посмотрите в пошаговом режиме.