Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Основы программирования в VBA-2012.doc
Скачиваний:
36
Добавлен:
03.03.2016
Размер:
3.64 Mб
Скачать

20. Операторы циклической структуры

Циклический процесс (цикл) это повторение одних и тех же действий.

Последовательность действий, которые повторяются в цикле, называют телом цикла.

Один проход цикла называют шагом или итерацией.

Переменные, которые изменяются внутри цикла, и влияют на его окончание, называются параметрами цикла.

Оператор цикла с предусловием

Блок-схема алгоритма:

Оператор, реализующий этот алгоритм в VBA имеет вид:

Do While выражение

тело цикла

Loop

Работает цикл так:

Вычисляется значение выражения. Если оно истинно, выполняется тело цикла. В противном случае цикл заканчивается, и управление передается оператору, следующему циклом. Выражение вычисляется перед каждой итерацией цикла. Если при первой проверке выражение ложно, цикл не выполнится ни разу.

Оператор цикла с постусловием

Блок-схема:

В VBA цикл с постусловием реализован конструкцией

Do

тело цикла

Loop Until выражение

Работает цикл так:

Выполняется тело цикла. Вычисляется значение выражения. Если оно ложно, тело цикла выполняется еще раз. В противном случае цикл завершается, и управление передается оператору, следующему за циклом.

Цикл с постусловием всегда будет выполнен хотя бы один раз, в отличие от цикла с предусловием, который может не выполниться ни разу.

Для досрочного выхода из условных циклов используют оператор Exit Do.

Безусловный цикл

Безусловный циклический алгоритм или цикл с известным числом повторений обычно используется, если известно, сколько раз необходимо выполнить тело цикла.

Выполнение безусловного циклического алгоритма начинается с присвоения переменной i стартового значения in.

Затем следует проверка, не превосходит ли переменная 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