
- •Содержание
- •4. Программирование на vba…………………… ………………………...13
- •1. Цель и задачи курса
- •2. Общие рекомендации к выполнению и требования к оформлению контрольной работы
- •3. Темы заданий для выполнения контрольной работы
- •4. Программирование на vba for ms Excel
- •4.1. Создание программы
- •4.6. Типы данных в vba
- •4.7. Переменные в vba
- •4.8. Константы в vba
- •4.9. Операции и функции языка vba
- •4.14. Понятие алгоритма
- •4.15. Изображение алгоритма в виде блок-схемы
- •4.16. Ввод и вывод данных с использованием рабочего листа
- •4.17. Ввод и вывод данных с использованием встроенных функций
- •InputBox(сообщение [,заголовок[,значение]])
- •4.18. Условный оператор
- •4.19. Примеры программ
- •4.20. Операторы циклической структуры
- •4.20.1. Оператор цикла с предусловием
- •20.2. Оператор цикла с постусловием
- •4.20.3. Безусловный цикл
- •4.21. Решение задач с использованием циклов
- •4.22. Обработка массивов
- •4.22.1. Ввод-вывод элементов массива
- •4.22.2. Основные алгоритмы обработки массивов
- •4.23. Примеры программ
20.2. Оператор цикла с постусловием
Блок-схема алгоритма (рис.25): |
Оператор, реализующий алгоритм: |
Рис. 25. |
Do тело цикла Loop Until выражение |
Работает цикл так. Выполняется тело цикла. Вычисляется значение выражения. Если оно ложно, тело цикла выполняется еще раз. В противном случае цикл завершается, и управление передается оператору, следующему за циклом. Цикл с постусловием всегда будет выполнен хотя бы один раз, в отличие от цикла с предусловием, который может не выполниться ни разу.
Для досрочного выхода из условных циклов используют оператор
Exit Do.
4.20.3. Безусловный цикл
Безусловный циклический алгоритм или цикл с известным числом повторений обычно используется, если известно, сколько раз необходимо выполнить тело цикла.
Рис. 26.
Выполнение безусловного циклического алгоритма начинается с присвоения переменной 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.
4.21. Решение задач с использованием циклов
Задача 6. Вывести на экран таблицу значений функции y=esin(x)cos(x)
на отрезке [0;/2] с шагом 0.1.
|
Входные данные: начальн. значение аргумента – 0, конечн. значение аргумента – /2, шаг изменения аргумента – 0.1. |
Выходные данные: множество значений аргумента X и соответствующее им множество значений функции Y. |
|||
---|---|---|---|---|---|
Первый алгоритм (рис. 27) |
Программа: |
|
|||
Рис. 27 |
Sub prim6() Dim x As Single, 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 |
|
|||
Второй алгоритм (рис. 28) |
Программа: |
|
|||
Рис. 28. |
Sub prim8() Dim x As Single,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 |
|
Третий алгоритм представлен на рис. 29. Текст программы:
Sub prim7()
Dim x As Single, y As Single, 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 |
Рис. 29 |
ЗАДАЧА 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 |
Рис. 30. |
|
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 |
Результат работы программы:
Рис. 31 |
ЗАДАЧА
7.
Вычислить значения у,
соответствующие каждому значению х
по формуле
.
Известно xn – начальное значение x, xk – конечное значение x и шаг изменения – dx. Вычислить S–сумму положительных значений у, P–произведение ненулевых у, k–количество отрицательных у. Входные данные: xn, xk, dx. Выходные данные: множество значений у, S - сумма положительных у, P - произведение ненулевых у, k-количество отрицательных у. Для подсчета количества в переменную K помещается значение, которое не влияло бы на результат (K=0), далее происходит суммирование единиц K= K+1. |
Рис. 32 |
Текст программы:
Sub prim7()
Dim x As Single, y As Single
Dim i As Integer, k As Integer
Dim S As Single, 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
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" |
Рис. 33. |
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