Выполнение повторяющихся действий

Возможности компьютера лучше всего проявляются при многократном выполнении одних и тех же действий. Поскольку компьютер считает быстрее, чем человеческий мозг, на него следует возложить как можно больше повторяющейся, нетворческой работы.

Цикл For...Next

Основная форма циклов в Visual Basic — цикл For,..Next. Он используется для выполнения определенного количество итераций. Циклы For...Next обычно используются для работы со счетчиками и в других ситуациях, когда количество итераций известно заранее. Они имеют следующий синтаксис:

For Счетчик=НачальноеЗначение To КонечноеЗначение

Повторяющиеся действия

Next Счетчик

Несмотря на простоту этого фрагмента, обратите внимание на некоторые обстоятельства:

О Переменная Счетчик имеет числовой тип (Integer или Long) и указывается программистом (например, I).

О НачальноеЗначение определяет состояние переменной, с которого начинается отсчет.

О КонечноеЗначение определяет состояние переменной, в котором отсчет прекращается.

Например, чтобы переменная x в цикле принимала значения от 1 до 5, Счетчик заменяется на x, НачальноеЗначение — на 1, а КонечноеЗначение — на 5. В первой строке цикла For...Next может присутствовать ключевое слово Step. Оно позволяет изменить приращение счетчика (по умолчанию оно равно 1). Например, если значение счетчика каждый раз увеличивается на 3, строка For будет завершаться Step 3. Если счетчик увеличивается на 2, строка завершается Step 2. В следующем фрагменте счетчик изменяется от 10 до 100 с приращением 5:

For I = 10 To 100 Step 5

' Повторяющиеся действия

Next

После ключевого слово Next можно не указывать имя переменной-счетчика. В этом случае цикл For...Next просто завершается ключевым словом Next. Более того, тесты показали, что без указания имени переменной программа выполняется быстрее. Однако код должен быть структурирован, чтобы вы могли легко найти соответствие между различными For и Next.

ПОДСКАЗКАПо умолчанию в цикле For...Next приращение счетчика равно 1. Чтобы использовать другое приращение, следует указать ключевое слово Step, а после него — нужное значение.

Счетчик даже может изменяться в обратном направлении. Для этого следует задать начальное значение больше конечного и выбрать отрицательное приращение после ключевого слова Step. Например, в следующем фрагменте счетчик изменя-етсяот 10 до 1:

For I = 10 To 1 Step -1

Повторяющиеся действия

Next

А здесь счетчик изменяется от 100 до 0 с уменьшением на 10:

For I = 100 To 0 Step -10

' Повторяющиеся действия

Next

Чтобы выйти из цикла до того, как счетчик достигнет конечного значения, воспользуйтесь командой Exit For. Например:

For I = 1 To 100 Step 5

X = I * 10

If X > 100 Then

Exit For

End If

Next

Циклы For...Next встречаются во многих примерах этой книги. Столь же часто он будет использоваться и в вашей будущей работе.

Цикл Do...Loop

Другой тип циклов реализуется с помощью конструкции Do...Loop. Эта конструкция используется в тех ситуациях, когда точное количество повторений заранее неизвестно или вы хотите дождаться выполнения некоторого условия. Например, можно в цикле перебирать содержимое набора записей, полученного из базы данных. Скорее всего, точное количество записей будет неизвестно заранее, но зато можно определить, что вы достигли конца набора. Цикл Do...Loop прекрасно справляется с этой задачей.

Цикл Do...Loop может выполняться бесконечно:

Do

' Повторяющиеся действия

Loop

Цикл с условием завершения выглядит так:

Do While X < 10

X = X + 1

Loop

Он продолжает выполняться до тех пор, пока значение переменной остается меньше 10. Поскольку X не присваивалось конкретного значения, цикл будет выполняться 10 раз. Вместо ключевого слова While можно воспользоваться ключевым словом Until, но тогда вместо условия продолжения вычислений формулируется условие завершения. Наш фрагмент эквивалентен следующему:

Do Until X = 10

X = X + 1

Loop

Для выхода из цикла можно использовать практически любое логическое условие, сформулированное на Visual Basic. Оно может содержать логические операторы и операторы сравнения, а также логические переменные.

ПОДСКАЗКАДля выхода из цикла также применяется команда Exit Do. Oco-бенно часто она используется в сочетании с оператором If...Then.

Цикл While...Wend

Другая форма цикла, похожая на конструкцию Do...Loop, — цикл While...Wend. В нем последовательность команд выполняется до тех пор, пока остается истинным указанное условие. Например, следующий цикл:

While X < 10

X = X + 1

Wend

выполняется до тех пор, пока значение X не достигнет 10. Поскольку цикл While-Wend эквивалентен конструкции Do...Loop, выбор между ними является делом вкуса.

Mny76

Перебор коллекций

В Visual Basic существует еще один тип циклов, предназначенный для переборов коллекций. Для этой цели используются циклы For Each...Next. Такой способ особенно полезен в ситуации, когда точное количество объектов в коллекции неизве-стпо заранее.

ПРИМЕЧАНИЕКоллекцией называется объект, который содержит другие, взаимосвязанные объекты.

Цикл для перебора всех объектов коллекции может выглядеть так:

Dim cmd As CommandButton

*

For Each cmd In Form1

With cmd

If .Index <> Index Then

MsgBox "Кнопка " & Trim$(Str$(.Index)) &_

не была нажата"

End If

End With

Next

В первой строке объявляется объект класса CommandButton. Bo второй строке Visual Basic перебирает все объекты CommandButton на форме Form1. Далее следует оператор With cmd, который сообщает о том, что операции блока With...End With выполняются с текущим объектом коллекции cmd.

Циклы по элементам коллекций используются во многих задачах, среди которых перебор элементов деревьев и табличных списков, дочерних форм приложений MDI и объектов, принадлежащих документам DHTML (см. урок 18, «Программирование для Интернета на Visual Basic»).

Пример использования циклов

Следующий пример наглядно показывает, как организуется совместная работа цик-лов, условий и логических операторов. В нем описанные ранее разновидности циклов используются для заполнения нескольких текстовых полей на форме. Хотя такая программа не обладает особой практической ценностью, она хорошо демонстрирует работу различных циклов.

1. Создайте новый проект командой File > New Project.

2. В диалоговом окне New Project выберите значок Standard EXE и нажмите кнопку ОК.

3. Задайте свойству Name формы Form1 значение frmMain, а свойству Caption — значение Циклы.

4. Откройте редактор меню клавишами Ctrl+E. 5. Создайте меню верхнего уровня, указывая в поле Caption значение &Цикл. Введите в поле Name значение mnuLoop.

6. Создайте новый объект меню (нажмите кнопку Next в редакторе меню).

7. Нажмите кнопку со стрелкой Выполнение повторяющихся действий - student2.ru , расположенную прямо над списком (рис. 6.7), чтобы снабдить созданный объект единичным отступом. При этом он становится командой меню верхнего уровня.

Выполнение повторяющихся действий - student2.ru

Рис. 6.7. Создание команды меню

8. Введите в поле Caption значение &For... Next, а в поле Name — значение mnuLoop ForNext.

9. Нажмите кнопку Next, чтобы создать следующую команду меню. Обратите внимание: она уже снабжена необходимым отступом, поэтому нажимать кнопку со стрелкой не нужно.

10. Введите в поле Caption значение &Do... Loop, а в поле Name — значение mnuLoopDo-Loop.

11. Нажмите кнопку Next, чтобы создать следующую команду меню. Введите в поле Caption значение &While... Wend, а в поле Name — значение mnuLoopWhileWend.

12. Нажмите кнопку Next, чтобы создать следующую команду меню. Введите в поле Caption значение «-» (дефис), а в поле Name — значение mnuLoopSep1.

ПОДСКАЗКА

Когда в поле Caption объекта меню вводится дефис (-), объект представляет собой разделитель, предназначенный для визуальной группировки команд меню. Более подробная информация о создании меню приведена в уроке 5, «Создание и использование меню и панелей инструментов».

13. Создайте следующую команду меню,введите в поле Caption значение&Очис-тить,а в поле Name — значение mnuLоорС1еаг.

14. Нажмите кнопку OK, чтобы закрыть редактор меню.

15. Сохраните проект командой File > Save Project.

ВНИМАНИЕПри выполнении длинных или сложных операций почаще сохра-няйте свою работу. Если система «зависнет», потери будут минимальными.

16. Создайте на форме frmMain текстовое поле, расположите его в левом верхнем углу формы и задайте его свойству Name значение txtTextBox. Удалите текущее содержимое свойства Text.

17. Активизируйте элемент, щелкнув на элементе txtTextBox в конструкторе форм.

18. Нажмите Ctrl+C, чтобы скопировать элемент в буфер обмена.

19. Щелкните на форме frmMain.

20. Нажмите Ctrl+V, чтобы вставить текстовое поле из буфера на форму. Появляется диалоговое окно (рис. 6.8), в котором вам предлагается создать массив элементов. Нажмите кнопку Yes.

Выполнение повторяющихся действий - student2.ru

Рис. 6.8. Создание массива элементов

21.Расположите новое текстовое поле справа от первого.

22. Снова щелкните на форме и нажмите Ctrl+V, чтобы вставить из буфера следующее текстовое поле. Расположите его справа от полей, созданных при выполнении шагов 20 и 21.

Мы создали ряд из трех текстовых полей. Продолжайте вставлять на форму копии текстового поля и расположите их в виде таблицы, состоящей из трех столбцов и пяти строк. Форма с 15 текстовыми элементами должна выглядеть так, как показано на рис. 6.9.

23. Выберите команду For...Next из меню Циклы формы frmMain. Открывается окно программы с процедурой события mnuLoopForNext_Click.

24. Вставьте в процедуру следующий фрагмент:

Private Sub mnuLoopForNext_Click()

Dim i As Integer

'Заполнить текстовые поля в цикле

For...Next For i = 0 to 14

txtTextBox(i).Text = "i = " & Trim$(Str$(i))

Next

End Sub

Выполнение повторяющихся действий - student2.ru

Рис. 6.9. Форма с массивом текстовых полей

25. Перейдите к процедуре события mnuDoLoop_Click и вставьте в нее следующий фрагмент:

Private Sub mnuDoLoop_Click()

Dim i As Integer

'Заполнить текстовые поля в цикле For...Next

i = 0

Do While i < 15

txtTextBox(i).Text = "i = " & Trim$.(Str$(i'))

i = i + 1

Loop

End Sub

26. Вставьте следующий фрагмент в процедуру события mnuWhileWend_Click:

Private Sub fnnuWhileWend_Click()

Dim i As Integer

'Заполнить текстовые поля в цикле For...Next

i = 0

While i < 15

txtTextBox(i).Text = "i = " & Trim$(Str$(i))

i = i + 1

Wend

End Sub

27. Вставьте следующий фрагмент в процедуру mnuLoopClear_Click:

Private Sub mnuWhileWend_Click()

Dim x As Control

' Перебрать все текстовые поля на форме

' и стереть их содержимое

For Each x In frmMain.Controls

If UCase$(Left$(x.Name, 3)) = "TXT" Then

x.Text = ""

End If

Next

End Sub

28.Coxpaните и запустите проект.

Выберите один из циклов, перечисленных в меню Циклы, и проследите за изменением текстовых полей. Все типы циклов дают одинаковый результат, но разными способами (рис. 6.10). Как вы вскоре убедитесь, одна и та же задача в программировании может решаться по-разному. Проследив за работой циклов, выберите из меню Циклы команду Очистить. Программа перебирает все объекты на форме и очищает свойство Text каждого текстового поля. Запомните этот прием, он пригодится вам при создании ваших собственных приложений.

ПОДСКАЗКАЕсли вы — начинающий программист или новичок в Visual Basic,

выделите немного времени на просмотр программ-примеров.

Запустите их, чтобы понять, что они делают, а затем просмотрите текст программы. Изучение программ, написанных другими, — лучший способ освоить язык программирования!

Выполнение повторяющихся действий - student2.ru

Рис. 6.10. Пример работы с циклами

Что нового мы узнали?

В этом уроке мы научились:

Выполнение повторяющихся действий - student2.ru Работать с двоичной логикой.

Выполнение повторяющихся действий - student2.ru Использовать логические операторы Visual Basic для обработки условий.

Выполнение повторяющихся действий - student2.ru Использовать условные операторы для принятия решений.

Выполнение повторяющихся действий - student2.ru Использовать различные типы циклов для выполнения повторяющихся действий.

Выполнение повторяющихся действий - student2.ru Создавать«мыслящие»приложения.

Урок 7

Выполнение повторяющихся действий - student2.ru Типы переменных

Выполнение повторяющихся действий - student2.ru Переменные

Выполнение повторяющихся действий - student2.ru Массивы

Выполнение повторяющихся действий - student2.ru Константы

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

Наши рекомендации