Занятие 8 Циклы в Visual Basic
В настоящем занятии слушатель знакомится с основными циклическими конструкциями языка циклом с известным числом повторений ForNext и условным циклом DoLoop.
1. Цикл ForNext в Visual Basic
Часто в программах требуется многократное выполнение одного или нескольких операторов. Для этого предназначены циклические конструкции или просто циклы. Когда программисту известно, какое число повторений данной группы операторов необходимо выполнить, можно воспользоваться циклической конструкцией ForNext.
Cинтаксис оператора ForNext следующий:
For Cчетчик=Начальное значение To Конечное значение [Step шаг]
Операторы блока S
Next [счетчик]
Операторы блока S называется телом цикла. Строка, начинающаяся с ключевого слова For, заголовком цикла, строка с ключевым словом Next концом цикла.
В начале выполнения цикла значение Счетчик устанавливается в Начальное значение. При каждом проходе цикла переменная Счетчик увеличивается на величину шага. Если она достигает Конечное значение, то цикл завершается и выполняются следующие за ним операторы.
Сделаем небольшой пример, чтобы на практике понять, как работает оператор ForNext.
На форму поместим одну командную кнопку cmdFor, а значение свойства Caption для нее зададим ForNext.
Составим код для командной кнопки cmdFor, включив в него цикл. В теле цикла поместим строку Print Visual Basic. Начальное значение счетчика зададим равное единице, конечное значение - 10, шаг 1.
Private Sub cmdFor_Click( )
For I = 1 To 10 Step 1
Изменим теперь строку кода, соответствующую заголовку цикла, следующим образом: не будем указывать шаг.
Если теперь запустить проект и щелкнуть на командной кнопке, результат не изменится. Если в цикле не указывать шаг, то подразумевается, что он равен единице.
Произведем следующие изменения в коде. Шаг сделаем 2. Заголовок цикла станет такой:
В результате работы измененной программы фраза Visual Basic распечатается на форме 5 раз.
Составьте три варианта цикла, чтобы фраза Visual Basic распечатывалась на форме 10 раз. Меняйте каждый раз начальное и конечное значения счетчика цикла и шаг. Проверьте их на компьютере.
Немного модифицируем наш проект следующим образом: не будем в коде задавать начальное и конечное значения счетчика цикла и его шаг, а будем запрашивать все эти значения с помощью функции InputBox.
Private Sub cmdFor_Click( )
Dim FinishZn As Single
Dim StepZn As Single
i = 0
BeginZn = 0
FinishZn = 0
StepZn = 0
BeginZn=InputBox(Число,Начальное значение счетчика)
FinishZn=InputBox(Число, Конечное значение счетчика)
StepZn = InputBox (Число, Значение шага)
For I = BeginZn To FinishZn Step StepZn
Print Visual Basic
Попробуем
сделать небольшой проект, в котором для введенного пользователем натурального
показателя степени
n
вычислялось бы
значение . Использовать при вычислении можно только действие умножение.
Начнем новый проект. На
форму
frmTwoPower
поместим
текстовое окно, в которое пользователь будет вводить значение показателя степени
и
метку с
указанием для
пользователя, что ему нужно сделать. Кроме этого пусть на форме будут две
командные
кнопки:
cmdExit
для выхода из проекта и
cmdPower для
вычисления степени.
Форма после описанных действий может выглядеть,
например, так:
Для вычислений организуем цикл ForNext. Будем умножать на 2 накопленное произведение (n-1) раз:
For i = 1 To n - 1
TwoPower = 2 * TwoPower
Next i
TwoPower это накопленное произведение, которое после завершения цикла и будет являться искомым значением, i переменная цикла.
Очевидно, для вычислений нам понадобятся переменные. Объявим в разделе General формы следующие переменные:
Dim TwoPower As Long
Dim i As Integer
Начальное значение переменной TwoPower (до цикла) примем равным 2. Распечатывать результат расчетов можно, например, с помощью метода Print на форме. Вот как может выглядеть форма после того, как были произведены соответствующие расчеты и распечатан результат:
Распечатку результата расчета сделаем в отдельной процедуре Printer( ), а в процедуре для cmdPower будем ее вызывать.
Допишите процедуру для расчетов:
Private Sub cmdPower_Click( )
Допишите процедуру, печатающую на форме результат расчетов.
Private Sub Printer( )
Опробуйте работу проекта на компьютере.
3. Вычисление факториала натурального числа
Известно, что факториал натурального числа можно вычислить последовательным перемножением всех натуральных чисел, начиная с единицы до данного натурального числа:
4. Условные циклы
Часто бывает так, что необходимо повторить операторы, выражающие совокупность действий, какое-то число раз, но сколько будет повторений заранее не известно. В жизни такого рода ситуации встречаются довольно часто. Например, вам необходимо дойти до двери комнаты, в которой вы находитесь, повторяя действие сделай один шаг. Сколько повторений вам придется сделать, заранее вы не знаете. Вы делаете повторения, пока не упретесь в дверь. В таких случаях количество повторений зависит от некоторого условия.
Условие выхода из цикла можно поставить в начале цикла, перед повторяющимися действиями. Такой цикл называется циклом с предусловием. Фрагмент блок-схемы, соответствующий этому типу цикла, выглядит следующим образом:
. . .
. . .
Условие B это условие выхода из цикла, блок S блок повторяющихся действий тело цикла.
Условие выхода из цикла можно поставить в конце цикла, после повторяющихся операторов. Такой цикл называется циклом с послеусловием. Фрагмент блок-схемы, соответствующий этому типу цикла, выглядит следующим образом:
. . .
. . .
5. Оператор цикла DOLOOP
С помощью оператора DoLoop на языке Visual Basic можно реализовать цикл с предусловием и цикл с послеусловием.
Формат цикла с предусловием следующий:
Do [{While/Until} условие]
[Операторы блока S]
Формат цикла с послеусловием следующий:
[Операторы блока S]
Цикл с предусловием никогда не выполняется в случае невыполнения условия. Цикл с послеусловием выполняется обязательно как минимум один раз, независимо от того, выполняется условие или нет.
Проверка условий выхода из цикла проводится с помощью ключевых слов While или Until. Эти слова придают одному и тому же условию противоположный смысл. Например, в цикле:
условие выхода можно трактовать следующим образом: пока A меньше 11. Фраза Visual Basic будет печататься, пока значение переменной A меньше одиннадцати (т. е. десять раз). А в цикле:
условие выхода можно трактовать так: пока значение переменной A не стало больше десяти. И в том, и в другом случае фраза Visual Basic будет распечатываться 10 раз.
6. Усложнение проекта prjCycles
Давайте дополним проект prjCycles, который вы делали для иллюстрации работы цикла ForNext, таким образом, чтобы в этом проекте была представлена работа оператора DoLoop для цикла с предусловием и для цикла с послеусловием. Дополним графический интерфейс пользователя еще двумя командными кнопками cmdAfter (значение свойства Caption С послеусловием) и cmdBefore (значение свойства Caption С предусловием) и меткой, комментирующей содержание этих командных кнопок.
Составьте код для cmdAfter. Пусть пользователь количество повторений печати на форме фразы Visual Basic задает с помощью функции InputBox и условие выхода из цикла формулируется с помощью слова While. Не забудьте объявить переменные. Сделайте их локальными.
Private Sub cmdAfter_Click( )
Составьте код для cmdBefore. Пусть пользователь количество повторений печати на форме фразы Visual Basic задает с помощью функции InputBox и условие выхода из цикла формулируется с помощью слова While. Не забудьте объявить переменные. Сделайте их локальными.
Private Sub cmdBefore_Click( )
Отладьте свой проект на компьютере и запишите на диск.
7. Арифметическая и геометрическая прогрессии
Известно, что арифметическая и геометрическая прогрессия это последовательность, каждый следующий элемент которой больше предыдущего.
Арифметическую прогрессию можно представить следующим образом:
Геометрическую прогрессию можно представить следующим образом:
8. Задания
а) Ответьте на вопросы
Как работает цикл, если конечное значение счетчика цикла меньше, чем начальное?
б) Сделайте проект, в котором вычисляется степень числа 2, описанный в пункте 2 занятия, с использованием цикла ForNext.
в) Сделайте проект , в котором вычисляется факториал натурального числа N!, описанный в пункте 3 занятия.
г) Выполните задание.
Придумайте два варианта цикла с предусловием с использованием цикла DoLoop, чтобы фраза Visual Basic распечатывалась 10 раз и запишите эти циклы на языке Visual Basic:
д) Сделайте фрагмент кода, в котором с помощью цикла Do Loop находились бы и распечатывались на форме все положительные члены арифметической прогрессии, если a = 18, d = -3. Составьте в тетради процедуру для вычисления соответствующих членов прогрессии. Проверьте ее на компьютере.
е) Сделайте фрагмент кода, в котором с помощью цикла DoLoop находились бы и распечатывались на форме все члены геометрической прогрессии, меньшие 500, если a = 4, d = 2. Составьте в тетради процедуру для вычисления соответствующих членов прогрессии. Проверьте ее на компьютере.