Циклические алгоритмы
Такие алгоритмические конструкции используются для выполнения в программе повторяющихся действий (эти повторяющиеся действия называют телом цикла). Использование циклов позволяет сократить число команд в программном коде проекта, облегчает чтение и отладку программ. Рассмотрим два основных типа циклов.
Цикл со счетчиком (for … next)
Такой цикл применяют, когда заранее известно, сколько раз должно выполняться тело цикла. В данном цикле вводится переменная-счетчик (обозначим ее I), которая определяет число повторений цикла. Для счетчика задаются значения параметров: начальное значение (N) – присваивается переменной-счетчику перед первым выполнением цикла; конечное значение (K); величина шага изменения счетчика (H) - на эту величину увеличивается значение счетчика после каждого прохода цикла. Перед каждым выполнением цикла значение счетчика сравнивается с конечным значением: если I K при H > 0 (I K при H < 0), то выполняются команды тела цикла. В противном случае цикл завершается, и управление передаются следующему после NEXT оператору.
FOR счетчик = нач.
значение TO кон.
значение STEP шаг
Тело цикла
Next счетчик
Ключевое слово Step можно
опустить. Тогда значение шага будет
равно единице.
Особенно часто циклы со счетчиком
используются при работе с массивами.
Пример: вычислить сумму первых ста натуральных чисел.
Программный код:
Sub Command1_Click()
For I = 1 TO 100
S = S + I
Next I
Label1.Caption = S
End Sub
С применением цикла со счетчиком кодируются рассмотренные в работе проекты «Авангард», «Порядок символов», «Меньше 10».
Условный цикл (do while … loop)
Используется, когда число повторений цикла зависит от некоторого условия.
С
Тело цикла выполняется до тех пор, пока
выполняется условие цикла.
Пока условие выполняется, повторять:
Действия (тело цикла)
Конец цикла.
Условие в начале цикла (цикл с предусловием):
Do while
условие
операторы тела цикла Loop
У
Do
операторы тела цикла
Loop while условие
словие в конце цикла (цикл с постусловием):
Иногда бывает необходимо прервать выполнение цикла. Тогда внутри тела цикла используют оператор EXIT FOR для цикла со счетчиком (EXIT DO для условного цикла).
Пример №1
Брокер получает процент от суммы сделки. Для сделок, сумма которых составляет меньше 150т.р. вознаграждение брокера составит 5%, если сумма договора составляет от 150 т.р. до 500 т.р. – 4,5%, а для сделок, сумма которых составляет больше 500 т.р. – 3,5%. Составить программу для расчёта вознаграждения брокера.
Таблица 2.
Элемент управления |
Свойства |
Значения |
UserForm |
Caption |
Программирование ветвлений |
Label1 |
Caption |
Вычисление вознаграждения брокера |
Label2 |
Caption |
Сумма сделки |
Label3 |
Caption |
Вознаграждение |
TextBox1 |
Name |
txtSummaSdelki |
TextBox2 |
Name |
txtNagrada |
CommadButton1 |
Name |
cmdRun |
|
Caption |
Расчёт |
CommadButton2 |
Name |
cmdClear |
|
Caption |
Очистка |
Код программы:
Private Sub cmdRun_Click()
Dim S As Single
Dim P As Single
S=Val(txtSummaSdelki.Text)
If S<= 150000 Then
P=S*0.05
ElseIf S>= 500000 Then
P=S*0.03
Else
P=S*0.04
End If
txtNagrada.Text = Str(P)
End Sub
В приведённой выше части кода программы использовалась функция InputBox. Данная функция предназначена для ввода данных в программу. Она имеет следующий синтаксис:
InputBox (Запрос [, Заголовок] [, По_умолчанию] [, Xpos] [ Ypos] [, Справка, Раздел])
Пример №2: по введенному числу определить день недели
Select Case x
Case 1
MsgBox ("Пон-ник")
Case 2
MsgBox ("Вторник")
Case 3
MsgBox ("Среда")
Case 4
MsgBox ("Четверг")
Case 5
MsgBox ("Пятница")
Case 6
MsgBox ("Суббота")
Case 7
MsgBox ("Воскресенье")
Case Else
MsgBox ("Такого дня не существует")
End Select
Пример №3: на форме строятся разноцветные окружности, произвольно расположенные, разного радиуса (от 50 до 150) до тех пор, пока значение радиуса не станет равно 100. Количество таких окружностей подсчитывается и выводится на экран.
Программный код:
Private Sub Command1_Click()
Dim r As Byte
Dim i As Integer ‘счетчик количества построенных окружностей
Randomize
Do
r = Rnd * 100 + 50
Circle (Rnd * Form1.Width, Rnd * Form1.Height), r, RGB(Rnd * 255, Rnd * 255, Rnd * 255)
i = i + 1
Loop While r <> 100 ‘цикл повторяется, пока радиус отличен от 100
Label1.Visible = True
Label1.Caption = i
End Sub
Пример №4
Найдите значения функции у=sin(x) на интервале [a;b].
К
од
программы:
Private Sub cmdSinus_Click()
а!=Val(txtA)
b!=Val(txtB)
For i%=a To b
y!=Sin(i)
txtSin = txtSin +”x=” + Str(i)+ “, y=”+Str(y) + vbCrlf
Next i
End Sub
Private Sub cmdCleaR_Click()
txtA = ""
txtB = ""
txtSin = ""
End Sub
Сделайте расчёты для разных а и b. Внимание a<b!!!
Добавьте в код программы строку в которой бы шла проверка на сравнение а и b. И если a>b, то программа завершала бы работу.
