Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
книга1(полный конспект).docx
Скачиваний:
55
Добавлен:
23.12.2018
Размер:
49.16 Mб
Скачать

9.5. Циклы

Циклы позволяют выполнить одну или несколько строк кода несколько раз. Visual Basic поддерживает следующие циклы:

1. Do … Loop

2. For … Next

3. For Each … Next

9.5.1. Конструкция Do … Loop

Цикл Do … Loop применяется для выполнения блока операторов неограниченное число раз. Существует несколько разновидностей конструкции Do … Loop.

Do While condition

Statements

Loop

Выполняя этот цикл VBA сначала проверяется условие. Если условие ложно,он пропускает операторы тела цикла. Если условие истинно, VBA выполняет операторы тела цикла, затем возвращается в начало цикла и вновь проверяет условие.

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

1: Sub Count_OddNums()

2: Conts ocTitle = "Подсчет нечетных чисел"

3: Dim OddCount As Integer

4: Dim OddStr As String

5: Dim num

6: OddStr =  "”

7: OddCount = 0

8: Do While OddCount < 10

9: num = InputBox("Введите число:", ocTitle)

10: If (num Mod 2) <> 0 Then

11 OddCount = OddCount + 1

12: OddStr = OddStr & num &  " “

13: End If

14: Loop

15: MsgBox prompt:="Вы ввели такие нечетные числа: &   & Chr(13) & _OddStr, Title:=ocTitle

16: End Sub

В строке 1 объявлено имя макроса.

В строке 2 объявлена константа ocTitle. Константа – это такая величина в VBA – программе, которая никогда не меняется. Константы применяются, для того чтобы код программы был более понятным. Например, для геометрических расчетов удобнее, если в тексте встречается поименованная константа Pi, чем число 3,1415.

Const Pi = 3,14

Кроме того, использование констант облегчает модернизацию программ.

В строках 3 – 5 описаны переменные используемые программой.

В строках 6 – 7 значение строки для отображения нечетных числе и счетчик нечетных чисел инициализированы начальными значениями.

В строке 8 начинается цикл Do. Так как счетчик нечетных числе инициализирован нулем тело цикла будет выполнятся.

В строке 9 пользователь вводит число.

В 10 строке начинает работать инструкция If … Then, которая проверяет, какое число, ввел пользователь (четное или нечетное). В скобках оператором Mod  начинается деление по модулю на число 2 и возвращается остаток от деления. Если он неравен 0, то значит, введенное число было нечетным и оно записывается в строку OddStr (строка 12). Значение счетчика увеличивается на 1.

В строке 15 результат выводится на экран. Функция Chr(13) - означает перевод курсора на новую строку.

Другая разновидность конструкции Do … Loop сначала выполняет операторы тела цикла, а затем проверяет условие после каждого выполнения. Общий синтаксис таков:

Do

Statements

Loop While condition

В качестве примера приведем эту же программу. Результат ее выполнения такой:

Sub Count_OddNums()

Conts ocTitle = "Подсчет нечетных числе"

Dim OddCount As Integer

Dim OddStr As String

Dim num

OddStr =  "”

OddCount = 0

Do

Num = InputBox("Введите число:", ocTitle)

If num Mod 2) <> 0 Then

OddCount = OddCount + 1

OddStr = OddStr & num &

End If

Loop While OddCount < 10

MsgBox prompt:= "Вы ввели такие нечетные числа:" & Chr(13) &_OddStr, Title:=ocTitle

End Sub

Другие разновидности конструкции цикла аналогичны предыдущим, за исключением того, что цикл выполняется пока условие ложно.

Цикл не выполняется вообще или выполняется много раз: Do Until условие

Операторы

Loop

Цикл выполняется, по крайней мере, 1 раз:

Do

Операторы

Loop Until условие

Приведем пример программы подсчитывающий сумму углов в замкнутом полигоне и вычисляющей его невязку. Результат выводится в десятичных долях градусов. Цикл Do  выполняется до тех пор, пока пользователь не нажмет клавишу Enter, оставив поле ввода пустым, либо клавишу Cancel. В отличие от двух предыдущих циклов условие Until Angle =  "” можно ставить лишь в конце цикла, так как первоначально переменная Angle не содержит никаких данных и тело цикла не выполняется ни разу. Впрочем, это ограничение моно обойти, если до начала цикла Do проинициализировать переменную Angle нулем.

Sub Poligon ()

Dim Grad As Integer

Dim Min As Integer

Dim Sec As Integer

Dim Deg As Double

Dim Summ As Double

Dim Count As Integer

Count = 0

Sum = 0

Do

On Error GoTo Line

Angle =InputBox("Введите внутренний угол","Ввод данных")

Grad = Int(Angle)

Min = Int(Angle - Grad)*100)

Sec = Round(((Angle - Grad)*100 - Min)*100)

Deg = Grad + Min / 60 + Sec / 3600

Sum = Summ + Deg

Count = Count + 1

Loop Until Angle =  "”

Line

MsgBox "Сумма углов измеренных:" & Summ & Chr(13) &_ "Сумма углов теоретических:" & 180 * (Count - 2) &Chr(13) &_ "Невязка:" & Summ - 180 *(Count - 2)

End Sub