Операторы цикла в VBA.
При решении многих задач из области информационных технологий часто возникает необходимость многократного повторения одного и того же оператора или группы операторов. Для этой цели в языке Visual Basic (как и в других языках программирования) предусмотрена такая структура, как цикл. В Visual Basic существует две основные циклические структуры: цикл с заранее известным числом повторений и цикл с заранее неопределенным числом повторений.
В данном разделе мы рассмотрим проект, в котором используется цикл с заранее известным числом повторений. Общий вид данного цикла в языке Visual Basic следующий:
For i=a To b
тело цикла
Next i
Первая строка в данном случае является строкой заголовка, который определяет количество повторений цикла. Переменная i называется переменной цикла. Данная переменная должна относиться к целому типу. Эта переменная имеет начальное значение a и конечное значение b, причем величина a должна быть меньше, чем величина b. Тело цикла представляет собой собственно тот оператор или группу операторов, которые многократно повторяются в ходе выполнения цикла. Команда Next i необходима для того, чтобы однозначно определить, где заканчивается цикл.
Механизм работы данного оператора следующий: вначале переменной цикла присваивается начальное значение a, после чего выполняется тело цикла. Затем значение переменной цикла i увеличивается на единицу. Далее вновь происходит выполнение тела цикла, и после этого значение переменной цикла увеличивается еще на единицу. Таким образом, увеличение значение данной переменной на единицу производится после каждого очередного выполнения тела цикла до тех пор, пока значение переменной i не станет равным конечной величине b. Когда это происходит, тело цикла выполняется в последний раз. На этом цикл завершает свою работу, и программа переходит к выполнению оператора, следующего за оператором цикла. Следовательно, количество повторений цикла можно заранее определить и оно будет равно b-a+1.
|
Говоря о цикле с заранее заданным количеством повторений, следует отметить еще два обстоятельства. Во-первых, начальное или конечное значения переменной цикла a и b могут быть как числовыми константами или переменными, так и выражениями, значения которых вычисляются и используются в данном операторе. Во-вторых, увеличение значения переменной цикла может происходить не только на единицу, но и на другую величину. Для того, чтобы задать эту величину, которая называется шагом изменения значения переменной цикла, следует в заголовке цикла добавить служебное слово Step и после него указать величину шага изменения переменной цикла. В этом случае в общем виде заголовок цикла будет выглядеть так:
For i=a to b Step k,
где k – шаг изменения переменной цикла.
Наряду с вышеуказанной формой цикла с заранее известным количеством повторений возможна и альтернативная форма цикла, в которой после каждого очередного выполнения тела цикла происходит не увеличение, а уменьшение значения переменной цикла.
В этом случае в заголовке цикла в обязательном порядке должно присутствовать служебное слово Step, и после него указывается шаг k, который должен быть отрицательной величиной. Тогда после каждого очередного выполнения тела цикла значение переменной цикла i будет уменьшаться на величину k. Понятно, что в таком случае для правильной работы цикла начальное значение переменной цикла a должно быть больше, чем конечное значение b.
|
Рассмотрим применение оператора цикла с заранее известным количеством повторений на следующем примере: необходимо вычислить факториал натурального числа n, введенного пользователем с клавиатуры. Понятие факториала применимо только к натуральным числам. Факториалом числа n называется произведение всех натуральных чисел от 1 до n. В математике факториал обозначается восклицательным знаком: n!. Например, факториал числа 5 обозначается как 5! и вычисляется следующим образом:
5! = 1*2*3*4*5 = 120.
В программе также следует предусмотреть защиту от ввода слишком больших значений числа n (условимся, что значение n не должно превышать 12). В том случае, если пользователь случайно введет большее число, программа должна выдавать сообщение об ошибке.
Пользовательский интерфейс данного приложения должен включать следующие элементы:
1. Два текстовых окна. Текстовое окно Textbox1 для ввода исходной величины n и окно Textbox2 для вывода искомого результата – факториала числа n.
2. Две надписи Label1 и Label2, поясняющие назначение текстовых окон, указанных в п. 1.
3. Четыре экранные кнопки (объекты CommandButton). Экранная кнопка «Подсчитать» (CommandButton1) либо вычисляет по введенному исходному значению величину факториала, либо выводит дополнительное диалоговое окно с сообщением об ошибке в случае неправильного ввода исходных данных. Кнопка «Сброс» (CommandButton2) очищает текстовые окна для того, чтобы подготовить их к новому вводу данных и расчету. Кнопка «Об авторе» (CommandButton3) выводит на экран диалоговое окно со сведениями об авторе данной программы. Кнопка «Выход» (CommandButton4) закрывает приложение.
|
Пользовательский интерфейс приложения «Вычисление факториала» приведен на рисунке.
Написание программного кода начнем с кнопки «Подсчитать». Вначале описываем используемые переменные. Это исходная величина n и искомый факториал f. Обе эти величины описываем как переменные «большого» целого типа – типа Long, который может оперировать целыми числами до 2 млрд. Затем определяем исходную величину n путем преобразования из строковой форму в числовую данных, введенных в окно Textbox1.
Дальнейший ход действий будет зависеть от имеющегося значения n. Выбор одного из двух возможных вариантов будет производиться с помощью условного оператора If. В этом операторе после служебного слова Then рассматривается случай некорректного ввода исходных данных, когда введенное значение n меньше 1 или больше 12 (объединяем оба этих случая с помощью операции Or – «логическое или»). В первом случае ввод данных будет неправильным, так как у отрицательных чисел или ноля факториал вообще отсутствует. Во втором случае значение вычисленного факториала превысит 2 миллиарда и выйдет за рамки типа Long, что приведет к искажению результата. Поэтому для любого неправильно введенного значения с помощью команды Msgbox выводится диалоговое окно, содержащее следующее сообщение: «Ошибка ввода. Число должно быть в диапазоне от 1 до 12».
В том случае, если ввод данных был произведен корректно, программа должна приступить к вычислению факториала f. Для этого вначале переменной f должно быть присвоено значение, равное 1. Это наименьшее возможное значение факториала. Дальнейшее вычисление значения факториала производится в цикле с заранее известным числом повторений. Вычисление факториала производится путем последовательного умножения его исходного значения на каждое целое число в диапазоне от 1 до n. Эти значения последовательно принимает переменная цикла i. Приведенный выше алгоритм вычисления факториала на языке Visual Basic может быть записан следующим образом:
f = 1
For i = 1 To n
f = f * i
Next i
После того, как значение факториала вычислено, его нужно преобразовать из целочисленной формы в строковую и вывести в текстовом окне Textbox2. Весь программный код для экранной кнопки «Расчет» будет выглядеть так: