
Циклический алгоритм. Простой цикл.
Повторение предыдущего материала по теме "Ветвление"
Пример
Даны три числа. Большее из них вывести на экран.
Вариант 1 |
Вариант 2 |
Sub pp1()
Dim a As Integer, b As Integer, c As Integer a = InputBox("a=") b = InputBox("b=") c = InputBox("c=") If a > b Then If a > c Then MsgBox ("Наибольшее число a=" & a) End If Else If b > c Then MsgBox ("Наибольшее число b=" & b) Else MsgBox ("Наибольшее число c=" & c) End If End If End Sub
|
If a> b and a> c then MsgBox ("Наибольшее число a=" & a) Else If b > a and b > c then MsgBox ("Наибольшее число b=" & b) Else MsgBox ("Наибольшее число c=" & c) End IF End IF
|
ЦИКЛ
Циклическая структура процесса вычислений предполагает, что для получения результата некоторые действия необходимо выполнить несколько раз.
Например, чтобы получить значение функции на заданном интервале изменения аргумента с заданным шагом, необходимо соответствующее количество раз определить следующее значение аргумента и подсчитать для него значение функции.
Процессы вычислительной структуры можно разделить на две группы:
1) счетные циклы или циклы с заданным количеством повторений (простой цикл)
– количество повторений известно; Цикл повторяется, пока переменная (параметр) цикла принимает значения в заданном диапазоне с определенным шагом.
2) Циклы с неявно заданным числом повторений
- это такие циклы, число повторений которых заранее не известно. Выход из них происходит при достижении определенного условия, а на каком шаге это произойдет заранее сказать невозможно.
В зависимости от того, когда состоится проверка условия на прекращение многократного выполнения действий, различают два вида циклов:
a) с предусловием (цикл – пока)
Условие проверяется на входе. Затем цикл либо выполняется, либо происходит выход из цикла.
б) цикл с постусловием (цикл-до)
Операторы тела цикла повторяются до выполнения условия, условие проверяется на выходе, т.е. тело цикла всегда проверяется хотя бы один раз.
Основными элементами циклического алгоритма являются:
настройка цикла
тело цикла
Настройка цикла – это присваивание первоначальных значений переменным, участвующим в работе цикла.
Тело цикла – последовательность действий, выполняемых многократно.
Для правильной работы циклического алгоритма необходимо соблюдать следующее:
настройка цикла должна предшествовать телу цикла и исполняться только один раз;
в теле цикла необходимо обновлять данные;
для своевременного выхода из цикла следует делать проверку условия повторения действий.
Циклы с явно заданным числом повторений
В дальнейшем будем называть такие циклы простыми, а переменную, контролирующую число его повторений, параметром цикла (управляющей переменной).
В Visual Basic для реализации простых циклов можно использовать операторы
For …Next или Do … Loop.
При организации простых циклов чаще используют оператор For … Next.
Оператор Do … Loop и его разновидности более удобен для реализации циклов с неявно заданным числом повторений
Оператор For …Next
Расчет количества шагов выполняется по формуле
где a,b – нижняя и верхняя границы изменения аргумента;
h – шаг изменения аргумента.
Пример 1.
,
шаг 0,1.
Синтаксис оператора For:
For переменная = выражение1 To выражение2 [Step выражение3]
операторы
операторы
.........
Next [переменная]
Здесь:
переменная – параметр цикла.
выражение1 - начальное значение параметра цикла.
выражение2 - конечное значение параметра цикла.
выражение3 - шаг изменения параметра цикла (при шаге равном 1 его можно не задавать)
Переменная (параметр цикла) должна иметь числовой тип.
Пример записи:
For j = a+b To 2*s Step k*10
Если шаг не указан, он считается равным 1, то есть переменная на каждом выполнении цикла увеличивается на 1. Для уменьшения ее на 1 нужно явно указать Step -1.
Порядок работы оператора For:
1. Прежде всего вычисляется выражение1 и параметру цикла присваивается его значение.
2. Затем вычисляется выражение2 и сравнивается с параметром цикла.
Если значение параметра цикла больше (или меньше при отрицательном значении шага) выражения2, то оператор For завершает свою работу, так ничего и не сделав.
В противном случае выполняются операторы, стоящие между строками For и Next.
3. После выполнения операторов, составляющих тело цикла, значение параметра цикла увеличивается на значение выражения3 (или при его отсутствии на 1).
4. Полученное значение параметра цикла снова сравнивается с выражением2. Если условие выхода из цикла достигнуто, цикл работу прекращает. В противном случае действия повторяются, начиная с пункта 3).
Пример 2
Вывести ряд чисел 1; 4; 7; 10; 13; 16; 19 на рабочий лист.
Должно получиться
Option Explicit Sub pp1() Dim k As Integer, i As Integer k = 1 'номер первой строки для вывода числа For i = 1 To 19 Step 3 Sheets("Лист1").Cells(k, 1) = i k = k + 1 'смена номера строки Next i End Sub
|
|
Пример 3
Какое значение I будет выведено на экран после выполнения программы?
Sub pp1()
Dim i As Integer
For i = 1 To 10
Next i
MsgBox (i)
End Sub
Ответ: 11, т.к. в конце 10 цикла параметр I принимает значение 11, затем на входе в цикл это значение параметра сравнивается со значением выражения 2 и после этого происходит выход из цикла.
Пример 4
Вывести 10 фамилий через InputBox на лист2 номер по порядку и фамилии
|
A |
B |
1 |
|
|
2 |
№ п/п |
ФИО |
3 |
|
|
|
начало
объявление данных
управление циклом
ввод ФИО через InputBox
вывод данных на лист
конец цикла
конец программы |
Sub prog1()
Dim ФИО As String, i As Byte
For i = 1 To 10
ФИО = InputBox("Введите ФИО")
Sheets("Лист2").Cells(i + 2, 1) = i Sheets("Лист2").Cells(i + 2, 2) = ФИО Next i
End Sub |
Пример 5
Рассчитать сумму целых чисел от 1 до 100
Sub pp1()
Dim Сумма As Integer, i As Integer
Сумма = 0
For i = 1 To 100 Сумма = Сумма + i Next i MsgBox ("Сумма=" & Сумма)
End Sub |
|
Пример 6
|
Пример 7
|
Какое значение примет переменная S после выполнения фрагмента блок-схемы
|
Какое значение примет переменная Z после выполнения фрагмента блок-схемы |
|
|
S=-4
|
|
Пример 8
Какое значение примет переменная i после выполнения фрагмента программы
i = 0
For a = 1 To 40 Step 0.25
i = i + 1
Next a
Ответ: i = 157
Пример 9
Какое значение примет переменная b после выполнения фрагмента программы
i = 0 For a = 1 To 19 i = i + 1 Next a b = i / (a - 1)
|
После выхода из цикла переменные принимают следующие значения: a = 20 i=19 |
Ответ: b=1
|
|
Пример 10
у = а2 b + c x; 1 x 5, hx = 0,25
Рассчитать сумму у, вывести все значения x,y и сумму на рабочий лист.
|
A |
B |
C |
D |
E |
F |
1 |
Вычисление у |
|||||
2 |
a= |
b= |
c= |
x= |
y= |
S= |
3 |
|
|
|
|
|
|
|
объявление данных
настройка цикла (начальное значение сумы, номер строки для вывода значений)
ввод данных через InputBox
вывод данных на лист
управление циклом (начальное, конечное значения, шаг цикла)
расчет у
вывод x,y, на лист
формирование строки для вывода на следующем шаге цикла
расчет суммы
вывод суммы
конец программы |
Option Explicit
Sub prog2()
Dim a, b, c, x, y, s, i
s = 0
i = 3
a = InputBox("a=")
b = InputBox("b=")
c = InputBox("c=")
Sheets("Лист1").Cells(3, 1) = a
Sheets("Лист1").Cells(3, 2) = b
Sheets("Лист1").Cells(3, 3) = c
For x = 1 To 5 Step 0.5
y = a * a * b + c * x
Sheets("Лист1").Cells(i, 4) = x
Sheets("Лист1").Cells(i, 5) = y
i = i + 1
s = s + y
Next x
Sheets("Лист1").Cells(i, 6) = s
End Sub