Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
VBA_04_Массивы и циклы.doc
Скачиваний:
4
Добавлен:
15.08.2019
Размер:
82.43 Кб
Скачать

4.2.3. Циклы с условиями

Оператор While … Wend

While условие

группа_операторов

Wend

Оператор цикла While … Wend работает не заданное количество раз, а пока выполняется условие. Например:

Function Summing()

Dim i As Integer

Dim Sum As Integer

Sum = 0

While i < 50

i = i + 1

Sum = Sum + i

Wend

MsgBox "Сумма чисел от 1 до 50 равна " & CStr(Sum)

End Function

В рассмотренной программе группа операторов внутри цикла выполняется до тех пор, пока переменная i не станет равной 50.

Оператор цикла Do

Может иметь одну из нескольких разновидностей:

Do While условие Do

группа_операторов группа_операторов

Loop Loop While условие

Do Until условие Do

группа_операторов группа_операторов

Loop Loop Until условие

Группа операторов внутри цикла выполняется (в случае While) до тех пор, пока условие истинно или (в случае Until) пока условие не станет истинным. В любом месте группы операторов может находиться оператор Exit Do, обеспечивающий выход из цикла Do…Loop и передающий управление оператору, следующему сразу за циклом. Операторы цикла, в которых проверка условий находится после выполняемых операторов, обязательно выполняются как минимум один раз.

Function DW()

Dim Sum As Single, x As Single

Dim i As Integer

i = 1

Sheets("Лист1").Cells(i, 1).Value = " Числа:"

Sheets("Лист1").Cells(i, 2).Value = " Сумма:"

Do

x = InputBox("Введите " & CStr(i) & " - ое число:")

Sum = Sum + x

If x > 5 Then Exit Do

Sheets("Лист1").Cells(i + 1, 1).Value = x

Sheets("Лист1").Cells(i + 1, 2).Value = Sum

i = i + 1

Loop While i < 20

MsgBox "Сумма " & CStr(i) & " введённых чисел равна: " & CStr(Sum)

End Function

В этом примере в диалоговые окна вводятся числа до тех пор, пока количество введённых чисел не достигнет 20 (выход из цикла по условию) или пока введённое число не окажется больше 5 (выход из цикла при помощи оператора Exit Do). Введённые числа суммируются, и результат выводится на экран в диалоговом окне.

В следующем примере создаётся массив с результатами бросания игральной кости. Игральная кость бросается до тех пор, пока не выпадет 6. Размерность массива после каждого броска корректируется с сохранением в нём ранее записанных результатов бросания кости, за счёт применения ключевого слова Preserve:

Sub Attempts()

Dim Result() As Integer ' объявляется динамический массив

Dim Attempt As Integer, Score As Integer

ReDim Result(0) ' начальный размер массива - одномерный, нулевой длины

Attempt = 0: Score = 0

Randomize

Do Until Score = 6 ' цикл выполняется до тех пор,

' пока переменная Score не станет равной 6

Attempt = Attempt + 1

Score = Int(6 * Rnd()) + 1

ReDim Preserve Result(Attempt) ' увеличиваем длину массива на

'еденицу, сохраняя предыдущие значения

Result(Attempt) = Score '

Sheets("Лист3").Cells(Attempt, 1).Value = Result(Attempt)

Loop

End Sub

Результаты бросков записываются на Лист3 в первый столбец.

Встроенная функция Rnd() возвращает случайное число в диапазоне от 0 до 1. Перед применением Rnd используется оператор Randomize, обеспечивающий несовпадение случайных чисел при каждом повторном вызове Rnd.

Выполните задание 3.