- •Понятие алгоритма
- •Изображение алгоритма в виде блок-схемы
- •Программирование на языке
- •5. Представление вещественного числа
- •7. Переменные в vba
- •8. Константы в vba
- •9. Операции и функции языка vba
- •10. Структура программы
- •11. Правила записи операторов
- •14. Ввод и вывод данных с использованием рабочего листа ms Excel
- •17. Ввод и вывод данных с использованием встроенных функций vba
- •18. Условный оператор
- •20. Операторы циклической структуры
- •Оператор цикла с предусловием
- •Оператор цикла с постусловием
- •21. Решение задач с использованием циклов
- •22. Обработка массивов
- •23. Ввод-вывод элементов массива
20. Операторы циклической структуры
Циклический процесс (цикл) это повторение одних и тех же действий.
Последовательность действий, которые повторяются в цикле, называют телом цикла.
Один проход цикла называют шагом или итерацией.
Переменные, которые изменяются внутри цикла, и влияют на его окончание, называются параметрами цикла.
Оператор цикла с предусловием
Блок-схема алгоритма:
Оператор, реализующий этот алгоритм в VBA имеет вид:
Do While выражение
тело цикла
Loop
Работает цикл так:
Вычисляется значение выражения. Если оно истинно, выполняется тело цикла. В противном случае цикл заканчивается, и управление передается оператору, следующему циклом. Выражение вычисляется перед каждой итерацией цикла. Если при первой проверке выражение ложно, цикл не выполнится ни разу.
Оператор цикла с постусловием
Блок-схема:
В VBA цикл с постусловием реализован конструкцией
Do
тело цикла
Loop Until выражение
Работает цикл так:
Выполняется тело цикла. Вычисляется значение выражения. Если оно ложно, тело цикла выполняется еще раз. В противном случае цикл завершается, и управление передается оператору, следующему за циклом.
Цикл с постусловием всегда будет выполнен хотя бы один раз, в отличие от цикла с предусловием, который может не выполниться ни разу.
Для досрочного выхода из условных циклов используют оператор Exit Do.
Безусловный цикл
Безусловный циклический алгоритм или цикл с известным числом повторений обычно используется, если известно, сколько раз необходимо выполнить тело цикла.
Выполнение безусловного циклического алгоритма начинается с присвоения переменной i стартового значения in.
Затем следует проверка, не превосходит ли переменная i конечное значение iк.
Если превосходит, то цикл считается завершенным, и управление передается следующему за телом цикла оператору.
В противном случае выполняется тело цикла, и переменная i меняет свое значение в соответствии с указанным шагом di. Далее, снова производится проверка значения переменной i и алгоритм повторяется.
Переменную i называют параметром цикла, так как это переменная, которая изменяется внутри цикла по определенному закону и влияет на его окончание.
Безусловный цикл можно заменить любым условным:
Оператор безусловного цикла в VBA имеет вид:
For i=in to ik [Step di]
Тело цикла
Next [i]
Здесь i – параметр цикла,
in – нач. знач. параметра цикла,
ik – кон. знач. параметра цикла,
di – шаг изменения параметра цикла, если di=1, то оператор имеет вид:
For i=in to ik
Тело цикла
Next i
Для досрочного выхода из безусловного цикла используют оператор Exit For.
21. Решение задач с использованием циклов
Задача 6. Вывести на экран таблицу значений функции y=esin(x)cos(x)
на отрезке [0;/2] с шагом 0.1.
Входные данные:
начальн. значение аргумента – 0,
конечн. значение аргумента – /2,
шаг изменения аргумента – 0.1.
Выходные данные: множество значений аргумента X и соответствующее им множество значений функции Y.
Алгоритм (1) |
Программа (1) |
Sub prim6() Dim x As Single Dim y As Single Dim i As Integer Const pi = 3.14159 Cells(1, 1) = "N" Cells(1, 2) = "X" Cells(1, 3) = "Y" x = 0 i = 2 Do While x <= pi / 2 y = Exp(Sin(x)) * Cos(x) Cells(i, 1) = i Cells(i, 2) = x Cells(i, 3) = y x = x + 0.1 i = i + 1 Loop End Sub |
Алгоритм (2) |
Программа (2) | |
Sub prim8() Dim x As Single Dim y As Single Dim i As Integer Const pi = 3.14159 Cells(1, 1) = "N" Cells(1, 2) = "X" Cells(1, 3) = "Y" x = 0 i = 2 Do y = Exp(Sin(x)) * Cos(x) Cells(i, 1) = i Cells(i, 2) = x Cells(i, 3) = y x = x + 0.1 i = i + 1 Loop Until x > pi / 2 End Sub
|
Алгоритм (3)
Текст программы (3)
Sub prim7()
Dim x As Single
Dim y As Single
Dim i As Integer
Const pi = 3.14159
Cells(1, 1) = "N"
Cells(1, 2) = "X"
Cells(1, 3) = "Y"
i = 2
For x = 0 To pi / 2 Step 0.1
y = Exp(Sin(x)) * Cos(x)
Cells(i, 1) = i
Cells(i, 2) = x
Cells(i, 3) = y
i = i + 1
Next
End Sub
Результаты работы программ
ЗАДАЧА 7. Составить таблицу значений функции y = esin(x)cos(x) на отрезке [0;] с шагом 0.1. Найти сумму и произведение вычисленных значений функции.
Входные данные:
начальн. значение аргумента – 0,
конечн. значение аргумента – ,
шаг изменения аргумента – 0.1.
Выходные данные:
множество значений аргумента X и соответствующее им множество значений функции Y;
сумма S значений Y;
произведение P значений Y.
Для сложения нескольких чисел результат суммирования нужно накапливать в определенном участке памяти, например S.
Для выполнения первого оператора накапливания суммы из участка памяти необходимо взять такое число, которое не влияло бы на результат сложения, т.е. нуль
S=0
Далее, из переменной S считывается предыдущее значение суммы и к нему прибавляется следующее слагаемое
S = S + Y.
При умножении нескольких чисел произведение также накапливается в определенном участке памяти, например P.
Для выполнения первого оператора из участка памяти необходимо взять такое число, которое не влияло бы на результат умножения, т.е. единицу
P = 1
Далее, из переменной P считывается предыдущее значение и умножается наследующее
P = P * Y.
Алгоритм решения задачи
Текст программы
Sub prim7()
Dim x As Single
Dim y As Single
Dim i As Integer
Dim S As Single
Dim P As Single
Const pi = 3.14159
Cells(1, 1) = "N"
Cells(1, 2) = "X"
Cells(1, 3) = "Y"
i = 2
S = 0
P = 1
For x = 0 To pi / 2 Step 0.1
y = Exp(Sin(x)) * Cos(x)
Cells(i, 1) = i
Cells(i, 2) = x
Cells(i, 3) = y
S = S + y
P = P * y
i = i + 1
Next
MsgBox "S="&S&Chr(13)&"P="&P
End Sub
ЗАДАЧА 7. Вычислить значения у, соответствующие каждому значению х по формуле:
.
Известно xn – начальное значение x, xk – конечное значение x и шаг изменения – dx.
Вычислить
S–сумму положительных значений у,
P–произведение ненулевых у,
k–количество отрицательных у.
Входные данные: xn, xk, dx.
Выходные данные:
множество значений у,
S - сумма положительных у,
P - произведение ненулевых у, k-количество отрицательных у.
Для подсчета количества в переменную K помещается значение, которое не влияло бы на результат (K=0), далее происходит суммирование единиц
K= K+1.
Sub prim7()
Dim x As Single
Dim y As Single
Dim i As Integer
Dim S As Single
Dim P As Single
Dim k As Integer
Const pi = 3.14159
Cells(1, 1) = "N"
Cells(1, 2) = "X"
Cells(1, 3) = "Y"
i = 2
S = 0
P = 1
k = 0
For x = 0 To pi / 2 Step 0.1
y = Exp(Sin(x)) * Cos(x)
Cells(i, 1) = i
Cells(i, 2) = x
Cells(i, 3) = y
If y >= 0 Then
S = S + y
Else
k = k + 1
End If
If y <> 0 Then
P = P * y
End If
i = i + 1
Next
MsgBox "S=" & S & Chr(13) &
"P=" & P & Chr(13) &
"k=" & k
End Sub
ЗАДАЧА 8. Вычислить значения z, которые соответствуют каждому значению х (x=1; dx=0.5) по формуле:
.
Считать z до тех пор, пока подкоренное выражение больше или равно 0.02. Определить k — количество вычисленных z.
Входные данные: x, dx.
Выходные данные: множество значений z , k — количество z.
Текст программы:
Sub prim6()
Dim x As Single
Dim dx As Single
Dim z As Single
Dim i As Integer
Dim k As Integer
Cells(1, 1) = "N"
Cells(1, 2) = "X"
Cells(1, 3) = "Z"
k = 0
x=InputBox("X=","Ввод
начального значения",1)
dx=InputBox("dX=","Ввод
шага",0.2)
i = 2
Do While x/(x^3+1)>=0.02
z=Log(x)*(x/(x^3+1))^0.5
Cells(i, 1) = i
Cells(i, 2) = x
Cells(i, 3) = z
k = k + 1
x = x + dx
i = i + 1
Loop
MsgBox "k=" & k
End Sub