Циклические вычислительные процессы

Создание программ для реализации циклического вычислительного процесса с использованием операторов, позволяющим повторять группы инструкций. Построение руководств, алгоритмов и блок-схем, способы применения программы для решения арифметических задач.

Рубрика Программирование, компьютеры и кибернетика
Вид реферат
Язык русский
Дата добавления 12.03.2011
Размер файла 730,2 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Циклический вычислительный процесс

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

Для создания программ, реализующих циклический вычислительный процесс, используются операторы For … Next и Do … Loop, позволяющие повторять выполнение группы инструкций любое необходимое число раз.

1. Оператор цикла с конечным числом повторений (For Next)

Оператор цикла For … Next позволяет выполнить одни и те же действия заданное число раз.

Общий вид оператора:

For <параметр> = <N1> To <N2> [Step <N3>]

<инструкции>

Next <параметр>

где For, To, Step, Next - ключевые слова;

<параметр> _ идентификатор переменной, параметр цикла;

<инструкции> _ любые операторы VBA, составляющие тело цикла;

<N1> - начальное значение параметра цикла;

<N2> - конечное значение параметра цикла;

<N3> - шаг изменения параметра цикла.

Оператор цикла с конечным числом повторений представлен в виде блок-схемы на рис. 33.

Рис. 33. Представление оператора цикла с конечным числом повторений

Работа этой структуры в программе осуществляется следующим образом.

При первом проходе <параметру> цикла присваивается начальное значение <N1> (это действие выполняется только один раз). Если значение <параметра> не превышает <N2>, то выполняются <инструкции>, составляющие тело цикла. Затем значение <параметра> изменяется на величину шага <N3> и т.д. Если значение <параметра> превышает <N2>, то <инструкции> не выполняются и управление передается следующему за Next оператору программы.

Если значение <N3> равно 1, то часть структуры - Step <N3> - может быть опущена.

Приведем фрагмент программы, в котором шаг изменения параметра цикла равен 1.

For k = 1 To 10

Cells(k,1)=k

Next k

В этом фрагменте параметр цикла k принимает значения 1,2,…,10. Эти значения последовательно заносятся в диапазон A1:A10 на лист Excel. Кроме того, параметр k используется в качестве номера строки ячейки Excel.

Шаг <N3> может быть любым действительным числом, как целым, так и дробным, как положительным, так и отрицательным. Если шаг <N3> положительный, то <N1> должно быть меньше <N2>. Если шаг <N3> отрицательный, то <N1> должно быть больше <N2>. В противном случае цикл не выполнится ни разу.

Приведем фрагмент программы, в котором шаг изменения параметра цикла равен 2.

i=1

For k = 1 To 10 Step 2

Cells(i,1)=k

i=i+1

Next k

В этом фрагменте параметр цикла k принимает значения 1,3,5,7,9 (то есть нечетные). Эти значения последовательно заносятся в диапазон A1:A5 на лист Excel. В отличии от предыдущего фрагмента, для номера строки ячейки Excel используется новая переменная i. Ее начальное значение задается до цикла, а ее изменение на 1 происходит в теле цикла.

Этот же прием можно использовать для получения четных значений параметра цикла k. В этом случае начальное значение для k должно быть равно 2. Приведем фрагмент программы, в котором шаг изменения параметра цикла отрицателен.

i=1

For k = 10 To 1 Step -1

Cells(i,1)=k

i=i+1

Next k

В этом фрагменте параметр цикла k принимает значения 10,9,…,1 (то есть в обратном порядке). Эти значения последовательно заносятся в диапазон A1:A10 на лист Excel. Так же как и в предыдущем фрагменте, для номера строки ячейки Excel используется новая переменная i. Ее начальное значение задается до цикла, а ее изменение на 1 происходит в теле цикла.

Типовые циклические алгоритмы

К типовым циклическим алгоритмам относятся:

1. Накопление суммы;

2. Накопление произведения;

3. Подсчет количества;

4. Табулирование (вычисление таблицы значений) функции одной переменной;

Приведем пример, демонстрирующий накопление суммы.

Пример 10

Найти сумму чисел натурального ряда от 1 до N, где N - заданное натуральное число.

На первом этапе определимся, что является исходными данными и какие дополнительные переменные понадобятся для решения поставленной задачи. Исходным является заданное натуральное число N, которое будет вводиться с клавиатуры. Значениями параметра цикла k будут числа натурального ряда, так как они начинаются с 1 и каждое следующее значение получается из предыдущего добавлением к нему единицы. Эти числа будем последовательно суммировать в переменную S, начальное значение которой будет задано до цикла равным 0.

Алгоритм решения задачи представлен в виде блок-схемы на рис. 34.

Рис. 34. Блок-схема к примеру 10

Используя приведенную на рис. 34 блок-схему, составим программу для решения задачи.

Sub Primer_10()

`Объявление переменных

Dim k As Integer, S As Integer

Dim N As Integer

`Ввод исходных данных

N=InputBox("Введите N")

`Первоначально сумма равна нулю

S=0

`Накопление суммы

For k = 1 To N

S = S + k

Next k

`Вывод результата

MsgBox "Сумма чисел натурального ряда S=" & S

End Sub

Поясним технологию накопления суммы. Сумма - это одно число, для хранения которого в программе объявлена переменная S. Начальное значение переменной S равно 0 ("контейнер" пуст). Накопление суммы производится с помощью оператора присваивания S = S + k, составляющего тело цикла. По определению оператора присваивания сначала вычисляется выражение, стоящее в его правой части, то есть к значению переменной S прибавляется значение переменной k. Полученный результат записывается в переменную S. Таким образом, на каждом шаге цикла значение переменной S изменяется (промежуточная сумма). После выхода из цикла в переменной S - результирующая сумма.

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

Пример 11

Вычислить N! (факториал), то есть найти произведение чисел натурального ряда от 1 до N, где N - заданное натуральное число.

На первом этапе необходимо выяснить, что является исходными данными и какие дополнительные переменные понадобятся для решения поставленной задачи. Исходным является заданное натуральное число N, которое будет вводиться с клавиатуры. Значениями параметра цикла k будут числа натурального ряда, так как они начинаются с 1 и каждое следующее значение получается из предыдущего добавлением к нему единицы. Эти числа будем последовательно перемножать в переменную P, начальное значение которой будет задано до цикла равным 1.

Алгоритм решения задачи представлен в виде блок-схемы на рис. 35.

Рис. 35. Блок-схема к примеру 11

Используя приведенную на рис. 35 блок-схему, составим программу для решения задачи.

Sub Primer_11()

`Объявление переменных

Dim k As Integer, P As Double

Dim N As Integer

`Ввод исходных данных

N=InputBox("Введите N")

`Первоначально произведение равно единице

P=1

`Накопление произведения

For k = 1 To N

P = P * k

Next k

`Вывод результата

MsgBox "Факториал P=" & P

End Sub

Технология накопления произведения подобна накоплению суммы. Однако начальное значение переменной P не может быть равным 0, так как умножение на 0 всегда дает 0. Начальное значение должно быть таким, чтобы, при первом выполнении оператора присваивания P = P * k значение переменной P стало равным k. Следовательно, начальное значение переменной P должно быть задано до цикла равным 1. Накопление произведения производится с помощью оператора присваивания P = P * k, составляющего тело цикла. Таким образом, на каждом шаге цикла значение переменной P изменяется (промежуточное произведение). После выхода из цикла в переменной P - результирующее произведение. Обратите внимание на то, что для объявления переменной Р использован тип Double, так как результат может представлять собой большое число.

Приведем пример, демонстрирующий подсчет количества.

Пример 12

Пусть на листе Excel в столбце А заданы 20 целых чисел. Найти количество чисел кратных 3 и не кратных 5.

По условию задачи исходные числа расположены на листе Excel. Для нахождения количества необходимо наличие переменной K, начальное значение которой должно быть равным 0. Кроме того, введем переменную i, которая будет параметром цикла, изменяющимся от 1 до 20. Эта же переменная будет номером строки листа Excel.

Алгоритм решения задачи представлен в виде блок-схемы на рис. 36.

Рис. 36. Блок-схема к примеру 12

Используя приведенную на рис. 36 блок-схему, составим программу для решения задачи. Для удобства пояснения пронумеруем строки в программе.

1. Sub Primer_12()

2. `Объявление переменных

3. Dim i As Integer, K As Integer

4. `Первоначально количество равно нулю

5. K=0

6. `Подсчет количества

7. For i = 1 To 20

8. If Cells(i,1) Mod 3 = 0 And Cells(i,1) Mod 5 <> 0 Then

9. K = K + 1

10. End If

11. Next i

12. `Вывод результата

13. MsgBox "Количество K=" & K

14. End Sub

Поясним приведенную программу. В строке 5 переменной K присваивается начальное значение. В строках с 7 по 11 описывается механизм подсчета количества. В строке 8 в соответствии со значением параметра цикла i выбирается число из ячейки листа Excel и проверяется на кратность с помощью операции Mod. При истинности логического выражения выполняется подсчет количества с помощью оператора присваивания K = K + 1 в строке 9. Технология подсчета количества подобна накоплению суммы, но в правой части оператора присваивания вместо значения элемента добавляется 1.

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

Пример 13

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

На первом этапе определимся, что является исходными данными и какие дополнительные переменные понадобятся для решения поставленной задачи. В задаче исходными данными являются: N - количество значений аргумента ; А и В - соответственно нижняя и верхняя границы изменения аргумента . Кроме того, для хранения результатов промежуточных вычислений используем переменные X и Y. Для обозначения номера строки листа Excel введем переменную i, которая будет изменяться от 1 до N. Для вычисления каждого следующего значения X необходимо определить значение шага H изменения аргумента. N значений аргумента делят отрезок на N-1 равных частей, поэтому шаг H будет вычислен по формуле

.

Данную задачу можно реализовать двумя способами:

· В качестве параметра цикла используется переменная i - номер строки листа Excel;

· В качестве параметра цикла используется переменная X - значение аргумента функции.

Алгоритм решения задачи первым способом представлен в виде блок-схемы на рис. 37.

Используя приведенную на рис. 37 блок-схему, составим программу для решения задачи.

1. Sub Primer_13()

2. `Объявление переменных

3. Dim i As Integer, N As Integer

4. Dim X As Single, Y As Single, H As Single

5. Dim A As Single, B As Single

6. `Подпишем столбцы листа Excel

7. Cells(1,1)="X"

8. Cells(1,2)="Y"

9. `Ввод исходных данных

10. N=InputBox("Введите N")

11. A=InputBox("Введите A")

12. B=InputBox("Введите B")

13. `Присвоение переменной X начального значения

14. X=A

15. `Вычисление шага изменения X

16. H=(B-A)/(N-1)

17. For i = 2 To N+1

18. Y=Sin(X)

19. `Запись полученных значений на лист Excel

20. Cells(i,1)=X

21. Cells(i,2)=Y

22. `Вычисление очередного значения X

23. X=X+H

24. Next i

25. End Sub

Рис. 37. Блок-схема к примеру 13

Поясним приведенную программу. В строке 14 задано начальное значение аргумента X. Табулирование функции осуществляется в цикле (строки с 17 по 24). Для повторения вычислений в цикле вместе с изменением параметра цикла i (строка 24) изменяется значение аргумента X на величину H (строка 23). Обратите внимание на то, что параметр цикла i изменяется от 2 до N+1, так как в первую строку листа Excel введены названия столбцов (строки 7 и 8).

Алгоритм решения задачи вторым способом представлен в виде блок-схемы на рис. 38.

Рис. 38. Блок-схема к примеру 13

Используя приведенную на рис. 38 блок-схему, составим программу для решения задачи.

1. Sub Primer_13()

2. `Объявление переменных

3. Dim i As Integer, N As Integer

4. Dim X As Single, Y As Single, H As Single

5. Dim A As Single, B As Single

6. `Подпишем столбцы листа Excel

7. Cells(1,1)="X"

8. Cells(1,2)="Y"

9. `Ввод исходных данных

10. N=InputBox("Введите N")

11. A=InputBox("Введите A")

12. B=InputBox("Введите B")

13. `Присвоение переменной X начального значения

14. i=2

15. `Вычисление шага изменения X

16. H=(B-A)/(N-1)

17. For X = A To B Step H

18. Y=Sin(X)

19. `Запись полученных значений на лист Excel

20. Cells(i,1)=X

21. Cells(i,2)=Y

22. `Вычисление очередного значения X

23. i=i+1

24. Next X

25. End Sub

В приведенной программе в качестве параметра цикла используется значение аргумента X. Поэтому изменения в программе, выполненной способом 2, произведены в строках 14, 17, 23, 24.

Результаты решения задачи при N=11, A=2, B=5 приведены на рис. 39.

Рис. 39. Табулирование функции одной переменной

2. Оператор цикла с условием (Do Loop)

В цикле For … Next заранее известно, сколько раз необходимо выполнить инструкции, составляющие тело цикла. Однако, не всякая задача может быть решена при таком жестком ограничении. Более универсальными в VBA являются структуры Do … Loop, которые могут организовать повторяющиеся вычисления в соответствии с выполнением определенных условий. Таким образом, цикл For … Next является частным случаем цикла Do … Loop. В VBA используются две синтаксические структуры оператора цикла Do … Loop: с предварительной проверкой условия и с постусловием.

Циклы с предварительной проверкой условия

Общий вид оператора:

Do {While | Until} <условие>

< инструкции >

Loop

Где Do, While, Until, Loop - ключевые слова; <условие> _ логическое выражение, в которое обязательно входит изменяемая в теле цикла величина (параметр цикла); < инструкции> _ любые операторы VBA, составляющие тело цикла. В структуре Do … Loop после ключевого слова Do может использоваться одно из ключевых слов While или Until. Ключевое слово While используется в том случае, когда в качестве логического выражения (<условие>) поставлено условие продолжения цикла. Оператор цикла с предварительной проверкой условия, использующий ключевое слово While, представлен в виде блок-схемы на рис. 40.

Рис. 40. Представление оператора цикла с предварительной проверкой условия, использующего ключевое слово While

Работа этой структуры в программе заключается в вычислении логического выражения и его анализе. Если значение выражения - истинно, то выполняются инструкции, составляющие тело цикла. Если же значение выражения ложно, то осуществляется выход из цикла. В отличие от предыдущей структуры ключевое слово Until используется в том случае, когда в качестве логического выражения (<условие>) поставлено условие выхода из цикла. Если значение выражения - ложно, то выполняются инструкции, составляющие тело цикла. Если же значение выражения истинно, то осуществляется выход из цикла. Оператор цикла с предварительной проверкой условия, использующий ключевое слово Until, представлен в виде блок-схемы на рис. 41.

Рис. 41. Представление оператора цикла с предварительной проверкой условия, использующего ключевое слово Until

Представление оператора цикла с предварительной проверкой условия, использующего ключевое слово Until

Таким образом, обе структуры работают в программе одинаково. Различие заключается только в задании логического выражения в качестве условия.

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

Циклы с постусловием

Общий вид оператора:

Do

< инструкции >

Loop {While | Until} <условие>

Где Do, While, Until, Loop - ключевые слова;

<условие> _ логическое выражение, в которое обязательно входит изменяемая в теле цикла величина (параметр цикла);

< инструкции> _ любые операторы VBA, составляющие тело цикла.

В структуре Do … Loop после ключевого слова Loop может использоваться одно из ключевых слов While или Until.

Ключевое слово While используется в том случае, когда в качестве логического выражения (<условие>) поставлено условие продолжения цикла. Оператор цикла с постусловием, использующий ключевое слово While, представлен в виде блок-схемы на рис. 42.

Рис. 42. Представление оператора цикла с постусловием, использующего ключевое слово While

Работа этой структуры в программе заключается в следующем. Сначала выполняются инструкции, составляющие тело цикла. Затем производится вычисление логического выражения и его анализ. Если значение выражения - истинно, то осуществляется возврат на выполнение инструкций, составляющих тело цикла. Если же значение выражения ложно, то осуществляется выход из цикла.

В отличие от предыдущей структуры ключевое слово Until используется в том случае, когда в качестве логического выражения (<условие>) поставлено условие выхода из цикла. Если значение выражения - ложно, то осуществляется возврат на выполнение инструкций, составляющих тело цикла. Если же значение выражения истинно, то осуществляется выход из цикла.

Оператор цикла с постусловием, использующий ключевое слово Until, представлен в виде блок-схемы на рис. 43.

Рис. 43. Представление оператора цикла с постусловием, использующего ключевое слово Until

Как и в предыдущем случае, обе структуры работают в программе одинаково. Различие заключается лишь в задании логического выражения в качестве условия.

Циклы с постусловием всегда выполняются хотя бы один раз.

В заключении отметим основные принципы построения и использования цикла Do … Loop:

1. начальное значение параметра цикла всегда задается до ключевого слова Do;

2. изменение значения параметра цикла осуществляется в теле цикла;

3. после выхода из цикла значение параметра цикла равно последнему, присвоенному ему значению в теле цикла.

Рассмотрим использование циклов Do … Loop на конкретных примерах.

Пример 14

Дано целое число m>1. Получить наибольшее целое k, при котором . На первом этапе определимся, что является исходными данными и какие дополнительные переменные понадобятся для решения поставленной задачи. По условию задачи m - заданное целое число, k - результат решения задачи. Дополнительных переменных в данном случае не требуется. По условию задачи m>1, поэтому необходимо обеспечить корректный ввод, используя цикл Do … Loop с постусловием (сначала вводим значение, а затем проверяем). Решение задачи сводится к подбору целого наибольшего значения k (), при котором . При этом использование цикла For … Next не возможно, так как не известно предельное значение k. Следовательно, для решения задачи используем цикл Do … Loop с параметром цикла k. Так как выбирается наибольшее значение k, то условие является условием продолжения цикла (Do While … Loop). Выход из цикла в данном случае произойдет, если указанное условие ложно, при этом значение k будет на единицу больше, чем искомое. Алгоритм решения задачи представлен в виде блок-схемы на рис. 44. Используя приведенную на рис. 44 блок-схему, составим программу для решения задачи.

1. Sub Primer_14()

2. `Объявление переменных

3. Dim m As Integer, k As Integer

4. Ввод исходных данных

5. Do

6. m=InputBox("Введите m")

7. Loop Until m>1

8. `Присвоение переменной k начального значения

9. k=0

10. `Вычисление значения k

11. Do While 4^k<m

12. k=k+1

13. Loop

14. `Вывод результата

15. MsgBox "Наибольшее k, при котором _ выполняется условие 4^k<m равно " & (k-1)

16. End Sub

Рис. 44. Блок-схема к примеру 14

Поясним приведенную программу. Ввод исходного значения m, соответствующего условию m>1, осуществляется в цикле (строки с 5 по 7). В строке 9 задано начальное значение параметра цикла k. Для повторения вычислений в цикле параметр k изменяется на 1 в строке 12. Обратите внимание на то, что, так как параметр цикла k при выходе из цикла имеет значение на единицу больше, то результат будет равен k-1 (строка 15).

Пример 15

Пусть на листе Excel в столбце А задана последовательность целых чисел. Найти номер первого положительного элемента.

По условию задачи заданная последовательность целых чисел находится в столбце А на листе Excel, причем количество чисел не известно. Решение задачи сводится к перебору элементов последовательности и проверке каждого на знак. Как только встретится первый положительный элемент, вычислительный процесс нужно закончить, то есть выход из цикла осуществляется по условию. Следовательно, для реализации такого алгоритма используем цикл с предусловием, в котором параметром цикла будет номер строки i. Необходимо также предусмотреть тот случай, когда в последовательности нет положительных элементов. Результатом решения задачи будет либо номер строки I, в которой встретится первый положительный элемент, либо сообщение об отсутствии такового.

Алгоритм решения задачи представлен в виде блок-схемы на рис. 45.

Используя приведенную на рис. 45 блок-схему, составим программу для решения задачи.

1. Sub Primer_15()

2. `Объявление переменных

3. Dim I As Integer

4. `Присвоение переменной I начального значения

5. i=1

6. Do While Cells(I,1)<=0 And Cells(I,1)<>""

7. i=i+1

8. Loop

9. `Вывод результата

10. If Cells(I,1)="" Then

11. MsgBox "Положительных чисел в_ последовательности нет "

12. Else

13. MsgBox "Номер положительного числа в последовательности:" & i

14. End Sub

Рис. 45. Блок-схема к примеру 15

Поясним приведенную программу. Исходные данные уже введены. В строке 5 задано начальное значение параметра цикла I, а в строке 7 - его изменение. Для реализации вычислительного процесса использован цикл Do While … Loop, который будет повторяться, пока текущий элемент отрицательный или равный нулю, и не встретится первая пустая ячейка (строка 6). Обратите внимание на то, что, так как логическое выражение в строке 6 сложное, то неизвестно, по какому из условий осуществлен выход из цикла. Поэтому при выводе результата необходимо удостовериться, что ячейка в строке I не пуста (строка 10).

Пример 16

Пусть на листе Excel в столбце А задана последовательность целых чисел. Найти значение последнего отрицательного элемента.

Условие данной задачи аналогично условию задачи в примере 15. Однако для поиска последнего отрицательного элемента последовательность нужно перебирать с конца. Поэтому предварительно необходимо посчитать количество заданных элементов в столбце А.

Алгоритм решения задачи представлен в виде блок-схемы на рис. 46.

Используя приведенную на рис. 46 блок-схему, составим программу для решения задачи.

1. Sub Primer_16()

2. `Объявление переменных

3. Dim I As Integer, n As Integer

4. Присвоение переменной I начального значения

5. i=1

6. `Определение количества элементов в столбце

7. Do Until Cells(I,1)=""

8. i=i+1

9. Loop

10. n=i-1

11. `Поиск последнего отрицательного элемента

12. i=n

13. Do While Cells(I,1)>=0 And i>=1

14. i=i-1

15. Loop

15. `Вывод результата

16. If i<1 Then

17. MsgBox "Отрицательных чисел нет "

18. Else

16. MsgBox "Последнее отрицательное _ число равно " & Cells(I,1)

17. End Sub

Рис. 46. Блок-схема к примеру 16

Поясним приведенную программу. В строках с 7 по 9 подсчитывается количество элементов в последовательности. Последнее значение параметра I идентифицирует номер строки первой пустой ячейки столбца А. Поэтому количество элементов в последовательности n=i-1 (строка 10). При выводе результата необходимо удостовериться, что полученное значение I не меньше 1 (строка 16).

Пример 17

Вычислить бесконечную сумму с заданной точностью

На первом этапе определимся, что является исходными данными и какие дополнительные переменные понадобятся для решения поставленной задачи. По условию задачи - заданное действительное число, S - результат решения задачи (искомая сумма), n - целая переменная, определяющая номер элемента суммы (n=1,2,…).

Считается, что требуемая точность достигнута, если вычислена сумма нескольких первых слагаемых и очередное слагаемое оказалось по модулю меньше чем , - это и все последующие слагаемые можно уже не учитывать. Поэтому прежде чем просуммировать очередное слагаемое, необходимо его вычислить и сравнить с . Для этого используем цикл с предусловием.

Алгоритм решения задачи представлен в виде блок-схемы на рис. 47.

Используя приведенную на рис. 47 блок-схему, составим программу для решения задачи.

Sub Primer_17()

Dim n As Integer, S As Single, Eps As Single

`Ввод исходных данных

Eps=InputBox("Введите Eps ")

`Присвоение начальных значений переменным

n=1

S=0

`Вычисление суммы

Do While Abs(1/n) >= Eps

S=S+1/n

n=n+1

Loop

`Вывод результата

MsgBox "сумма =" & S

End Sub

Рис. 47. Блок-схема к примеру 17

циклический вычислительный оператор программа

Поясним приведенную программу. Вычисление суммы производится в цикле Do While … Loop пока абсолютная величина элемента суммы больше . Это условие корректно, так как при увеличении n значение элемента суммы уменьшается.

Пример 18

Дано действительное число а (1<a<3). Найти среди чисел первое, большее а.

По условию задачи a - заданное действительное число в промежутке . Числа, среди которых осуществляется поиск, представляют собой суммы S дробей вида , изменяющиеся на каждом шаге цикла, где k - целая переменная, определяющая знаменатель элемента суммы (k=1,2,…). Для решения задачи дважды используем цикл с постусловием:

· для корректного ввода значения а;

· для нахождения первого значения S>a.

Алгоритм решения задачи представлен в виде блок-схемы на рис. 48.

Используя приведенную на рис. 48 блок-схему, составим программу для решения задачи.

1. Sub Primer_18()

2. `Объявление переменных

3. Dim a As Single, k As Integer, S As Single

4. Ввод исходных данных

5. Do

6. a=InputBox("Введите a")

7. Loop Until a>1 And a<3

8. `Присвоение начальных значений

9. S=0

10. k=0

11. `Нахождение результата

12. Do

13. k=k+1

14. S=S+1/k

15. Loop Until S>a

16. `Вывод результата

17. MsgBox "Первое число, большее чем заданное "& a &" равно " & S

18. End Sub

Рис. 48. Блок-схема к примеру 18

Обратите внимание на то, что эта задача может быть решена только с использованием цикла Do … Loop с постусловием, так как в обоих случаях сначала выполняются действия (ввод а в строке 6 или вычисление S в строке 14), а затем проверка условия. В примерах 14 - 18 мы не заостряли внимание на том, какую конструкцию цикла Do … Loop использовать; выбор был продиктован условиями задач. Рассмотрим пример, в котором можно использовать цикл Do … Loop, как с предусловием, так и с постусловием.

Пример 19

Даны положительные действительные числа a, x, . В последовательности , образованной по закону , , , найти первый член , для которого выполнено неравенство . По условию задачи a, x, . - заданные действительные числа. Вычисление элементов последовательности осуществляется по рекуррентной формуле , при заданном начальном значении . Для вычисления каждого следующего элемента необходимо знать значение только одного предыдущего элемента . Поэтому нет необходимости в сохранении всех элементов последовательности, достаточно иметь две переменные: last - для предыдущего элемента и prev - для следующего. На каждом шаге цикла будем проверять условие . Если условие истинно, то prev - искомое . В противном случае необходимо переслать значение переменной prev в last, определить новое значение prev и продолжить вычислительный процесс. Для решения поставленной задачи составим блок-схему, используя цикл Do … Loop с постусловием. Алгоритм решения задачи представлен на рис. 49.

Рис. 49. Блок-схема к примеру 19

Используя приведенную на рис. 49 блок-схему, составим программу для решения задачи.

1. Sub Primer_19()

2. Dim x As Single, a As Single, Eps As Single

3. Dim Del As Single, last As Single, prev As Single

4. `Ввод исходных данных

5. a=InputBox("Введите a ")

6. x=InputBox("Введите x ")

7. Eps=InputBox("Введите Eps ")

8. last=a

9. Do

10. prev=1/2*(last+x/last)

11. Del=Abs(prev^2-last^2)

12. `Подготовка к следующему шагу цикла

13. last=prev

14. Loop Until Del<Eps

15. MsgBox "prev =" & prev

16. End Sub

Поясним приведенную программу. В строке 8 переменной last присваивается начальное значение. В строке 11 в промежуточной переменной Del формируем выражение для проверки условия в строке 14. Необходимость использования переменной Del обусловлена тем, что значение last изменяется в строке 13, то есть до проверки условия.

Приведем блок-схему решения задачи, используя цикл Do … Loop с предусловием. Алгоритм решения задачи представлен на рис. 50.

Используя приведенную на рис. 50 блок-схему, составим программу для решения задачи.

1. Sub Primer_19()

2. Dim x As Single, a As Single, Eps As Single

3. Dim last As Single, prev As Single

4. `Ввод исходных данных

5. a=InputBox("Введите a ")

6. x=InputBox("Введите x ")

7. Eps=InputBox("Введите Eps ")

8. last=a

9. prev=1/2*(last+x/last)

10. Do While Abs(prev^2-last^2)>Eps

11. `Подготовка к следующему шагу цикла

12. last=prev

13. prev=1/2*(last+x/last)

14. Loop

15. MsgBox "prev =" & prev

16. End Sub

Рис. 50. Блок-схема к примеру 19

Поясним приведенную программу. В отличие от предыдущей программы нет необходимости в использовании переменной Del, так как при решении задачи используется цикл с предусловием и значения переменных last и prev (строки 8 и 9) должны быть вычислены до цикла.

В VBA существует возможность немедленного выхода из цикла, не выполняя оставшиеся в нем операторы:

· Инструкция Exit Do позволяет выйти из цикла Do … Loop.

· Инструкция Exit For позволяет выйти из цикла For…Next.

Инструкция Exit безусловно передает управление оператору, следующему за концом цикла. Данную инструкцию целесообразно использовать при отладочных действиях.

Размещено на Allbest.ru


Подобные документы

  • Решение задачи вычисления и вывода значений функций. Разветвляющиеся и циклические вычислительные процессы. Задача табулирования. Блок схема и код программы. Вычисления по рекуррентным формулам. Программирование вложенных циклов. Сумма элементов матрицы.

    контрольная работа [1,1 M], добавлен 10.12.2013

  • Способы организации вычислительного процесса в системах с несколькими процессорами. Разработка программы на основе алгоритмов мультипроцессорных систем при пакетной обработке задач. Вычисление основных показателей эффективности для каждого алгоритма.

    курсовая работа [102,3 K], добавлен 21.06.2013

  • Решение задач прикладного программирования. Оформление разработанных алгоритмов в виде графических схем. Написание программ с использованием подпрограмм, их отладка. Блок-схемы и листинг программ. Наборы тестов для отладки разработанных программ.

    курсовая работа [575,8 K], добавлен 06.12.2013

  • Создание схем алгоритмов и составление программы на языке Pascal для вычисления значений заданных функций. Сущность и порядок нахождения значения определенного интеграла. Анализ работы подпрограмм. Разработка тестов для проверки правильности алгоритмов.

    контрольная работа [831,0 K], добавлен 24.11.2013

  • Организация вычислительного процесса, при котором подпрограмма в ходе выполнения составляющих ее операторов обращается сама к себе. Способы программирования алгоритмов с использованием рекурсии. Преимущества и недостатки использования рекурсии.

    лабораторная работа [27,8 K], добавлен 28.05.2012

  • Выполнение арифметических операций с помощью вспомогательных переменных, которые позволяют вычислить искомую переменную. Использование оператора цикла с предусловием и полной формы условного оператора. Примеры решения задач на работу с двумерным массивом.

    курсовая работа [518,8 K], добавлен 07.03.2014

  • Программирование игр с использованием визуальных компонентов. Описание операторов, используемых при практической реализации разработанной программы. Работа над созданием программы "Морской бой", постановка задачи, алгоритм реализации работы, блок-схема.

    курсовая работа [175,9 K], добавлен 10.05.2010

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

    контрольная работа [819,0 K], добавлен 12.03.2014

  • Аналитический обзор существующих программ-редакторов схем (Microsoft Office Visio 2007, FCEditor, редактор блок-схем). Математическое описание программы и её интерпретатора. Описание системы и руководство пользователя, XML и текст редактора схем.

    дипломная работа [2,1 M], добавлен 07.07.2012

  • Построение базовой линейной структуры и организация ввода с формы переменной. Определение значения функции и построение блок-схемы базовой структуры "ветвление". Использование цикла со счетчиком. Рассмотрение особенностей работы с одномерными массивами.

    контрольная работа [1,4 M], добавлен 10.12.2021

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.