Оператор цикла с предусловием While – Wend
Оператор цикла While – Wend используется для организации цикла с неизвестным заранее числом повторений тела цикла. Общий вид цикла While – Wendвыглядит следующим образом:
While Условие
Блок операторов
Wend
Цикл While – Wend обеспечивает многократное выполнение блока операторов, пока условие принимает значение True (истина).
Задача 1. Вычислить и вывести значения функции Y при X,изменяющимся от –10 до 10 с шагом 2.
.
Программный код
Option Explicit
Sub PR9()
Dim X As Integer, Y As Double
X = –10
While X <= 10
If X <> 2 Then
Y = 1 / (X – 2) + X
MsgBox ("Y=" & Y)
Else
MsgBox ("Функция не определена")
End If
X = X + 2
Wend
End Sub
Задача 2. Задан натуральный ряд чисел. Вычислить сумму четных чисел данного ряда.
Программный код
Option Explicit
Sub PR10()
Dim N As Integer, I As Integer, S As Double
N = Val(InputBox("Введите N"))
I = 2
S = 0
While I <= N
S = S + I
I = I + 2
Wend
MsgBox (S)
End Sub
Задача 3. Вкладчик положил на счет 1000 рублей. Через сколько дней вклад достигнет 20000 рублей, если начисляемый процент 0,6 % в день.
Программный код
Option Explicit
Sub PR11()
Dim V As Double, Pr As Double, Kol As Integer
V = Val(InputBox("Введите начальный взнос"))
Kol = 0
While V <= 20000
Pr = V * 0.6 / 100
V = V + Pr
Kol = Kol + 1
Wend
MsgBox ("20000 руб. вклад достигнет за " & Kol & " дней")
End Sub
Оператор цикла Do – Loop
В VBA для организации циклов с неизвестным заранее числом повторений тела цикла используется и оператор цикла Do – Loop.
Существует четыре формы записи этого оператора. Их можно разбить на две группы: циклы с предусловием и циклы с постусловием.
I. Циклы с предусловием.
1.Do While Условие 2. Do Until Условие
Блок операторов Блок операторов
Loop Loop
II. Циклы с постусловием.
1. Do2. Do
Блок операторов Блок операторов
Loop While Условие Loop Until Условие
Оператор Do While – Loop обеспечивает многократное выполнение блока операторов до тех пор, пока условие истинно, а оператор Do Until – Loop – пока условие ложно.
Операторы Do – Loop While и Do – Loop Until отличаются от первых двух операторов тем, что сначала выполняется блок операторов, а затем проверяется условие. Таким образом, в этих циклах блок операторов, составляющих тело цикла, выполнится по крайней мере один раз.
Приведем примеры использования цикла Do – Loop While.
Задача 1. Составить программу, позволяющую вводить с клавиатуры целые числа до тех пор, пока не будет введено число, кратное 6, и вычислить количество введенных чисел (вместе с последним).
Программный код
Option Explicit
Sub PR12()
Dim x As Integer, k As Integer
k = 0
Do
x = Val(Inputbox(“Введите число”))
k = k+1
Loop While x mod 6<>0
MsgBox ("количество=" & k)
End Sub
Если использовать оператор Do – Loop Until, то основная часть программы выглядит следующим образом:
k = 0
Do
x = Val(Inputbox(“Введите число”))
k = k+1
Loop Until x mod 6=0
MsgBox ("количество=" & k)
Задача 2. Составить программу, вычисляющую сумму членов последовательности –1, 3, 7, … до тех пор, пока она (сумма) не превысит заданное число Х.
Задачу можно решить, используя различные формы записи цикла Do – Loop.
Программный код
1.
Option Explicit
Sub PR13()
Dim x As Integer, sum As Integer, a As Integer
x = Val(Inputbox(“Введите число”))
sum = 0
a = -1
Do
sum = sum + a
a = a + 4
Loop While sum<=x ‘ или Loop Until sum>x
MsgBox ("Сумма равна" & sum)
End Sub
2.
…
x = Val(Inputbox(“Введите число”))
sum = 0
a = -1
Do While sum<=x ‘ или Loop Until sum>x
sum = sum + a
a = a + 4
Loop
MsgBox ("Сумма равна" & sum)
Задача 3. Вычислить произведение и сумму цифр произвольного числа.
Option Explicit
Sub PR14()
Dim x As Integer, sum As Integer, pr As Long, c As Integer
x = Val(Inputbox(“Введите число”))
sum = 0
pr = 1
While x<>0
c = x mod 10 ‘ вычисляем последнюю цифру в числе
sum = sum + c ‘ вычисляем сумму цифр
pr = pr * c ‘ вычисляем произведение цифр
x = x \ 10 ‘ отбрасываем последнюю цифру числа
Wend
MsgBox ("Сумма = " & sum & ", произведение = " & pr)
End Sub
МАССИВЫ
Часто бывает необходимо работать с некоторым набором однотипных данных как с единым целым. В таких случаях используются массивы – структурированные боксы для хранения множеств элементов данных одинакового типа.
Массивы могут быть одномерными и многомерными.
Одномерные массивы
Одномерный массив – это набор однотипных элементов, расположенных друг за другом в одной строке или столбце.
Пример
1 –34 8 2 6
или
-5
Каждый элемент массива обозначается при помощи имени массива и индекса, заключенного в круглые скобки.
Индекс может быть:
· константой
Пример
P(1), C(5)
· переменной целого типа
Пример
A(i), B(j)
· арифметическим выражением (значение арифметического выражения должно быть целым)
Пример
A(i*2), Q(i^j)
Объявление массива
Как и обычные переменные, массивы должны быть объявлены. Для описания массива используется оператор Dim.
Dim Имя массива (Размерность массива) As Тип элементов
Пример
Dim A (100) As Integer
Dim B (50) As Byte
Dim С (40) As Double
При таком описании массива его элементы индексируются (т.е. нумеруются), начиная с нуля.
Если оператор описания будет выглядеть следующим образом:
Dim A (1 To 100) As Integer,
то элементы массива индексируются с единицы.
Ввод массива
Перед обработкой массива его необходимо заполнить (ввести).
Массив будем считывать с рабочего листа Excel, в который числа заносятся вручную или при помощи счетчика случайных чисел.
1 способ. На рабочем листе введем числа в ячейки электронной таблицы (рис. 4), откроем окно программного кода и запишем в него программу, которая считывает данный массив чисел.
Рис. 4. Исходный массив
Программный код
Option Explicit
Sub PR14()
Dim A(20) As Integer
Dim i As Integer
For i = 1 To 6
A(i) = Cells(1, i) ‘ массив заполняется
Next i ‘ числами с рабочего листа Excel
End Sub
2 способ. Массив можно заполнить при помощи счетчика случайных чисел. Для этого в программе после объявления переменных следует написать следующее:
Randomize
For i = 1 To 10
Cells(1, i) = Int(Rnd * 100 – 50)
A(i) = Cells(1, i) ‘ заполнение массива
Next i
Функция Rnd возвращает значение от 0 до 1. Перед вызовом функции Rnd используется инструкция Randomize без аргумента для инициализации генератора случайных чисел значением, возвращаемым системным таймером.
Cells(1, i) означает ячейку электронной таблицы, находящуюся в первой строке и столбце с номером i.
Вообще оператор Cells(i, j) служит для вывода информации в ячейку электронной таблицы или считывания информации из ячейки электронной таблицы Excel. В скобках через запятую указываются номер строки – i и номер столбца – j ячейки электронной таблицы.
Пример
Cells(1, 2) = x ‘в ячейку B1 записывается информация из переменной х
х = Cells(1, 2) ‘из ячейки В1 считывают информацию в переменную х
Вывод массива
Для распечатки полученного массива на рабочий лист Excel используется следующая конструкция:
For i = 1 To n
Cells(k, i) = A(i) ‘ вывод массива в ячейки электронной таблицы
Next i ‘ k – номер строки для заполнения ячеек.
Вместо переменной k можно использовать конкретное значение, например 3, тогда массив распечатается в третьей строке рабочего листа.
После заполнения ячеек их содержимое можно посмотреть, свернув окно программного кода при помощи кнопки “Свернуть” или переключившись в окно Excel с помощью соответствующей кнопки на панели задач.