Изучение организации итерационных алгоритмов на примерах




Лабораторная работа № 6

Итерационные алгоритмы.

Цель:

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

Результат обучения: после успешного завершения занятия пользователь должен:

o уметь составлять схемы итерационных алгоритмов;

o знать, что такое рекуррентная формула и как она может быть использована в алгоритмах;

o уметь программировать итерационные алгоритмы на языке VBA;

 

Изучение организации итерационных алгоритмов на примерах

 

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

Пример 1.

Условие задачи:

Рассчитать экспоненту с точностью e путем разложения ее в ряд: + …

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

Для вычисления каждого слагаемого ряда требуется возведение в степень и вычисление факториала (это дополнительный цикл). Часто в задачах для вычисления очередного слагаемого удобно рекуррентно использовать предыдущее слагаемое, а не организовывать дополнительный (внутренний) цикл. В данной задаче каждое очередное слагаемое можно рекуррентно вычислить через предыдущее: , что требует всего двух операций. Такая форма записи, в которой каждый следующий элемент расчета может быть получен из предыдущего, называется рекуррентной формой.

При построении таких алгоритмов полезно подстраховаться от зацикливания («вечного цикла»). Зацикливания могут возникнуть из – за ошибок в программе или вследствие накопления погрешностей. Чтобы избежать зацикливания, достаточно поставить лимит числа повторений цикла.

При построении алгоритма примем следующие обозначения:

S — искомая сумма, U — текущее слагаемое получаемое рекуррентно, n — определяет число шагов и используется для расчета факториала в знаменателе слагаемого.

Схема алгоритма:

 

Форма Программа
Private Sub CommandButton1_Click() Dim x As Single, Exp As Single, S As Single, U As Single Dim n As Integer Const Limit = 100 'Пред. знач. шагов задано константой x = Val(TextBox1.Text) Eps = Val(TextBox2.Text) S = 1 'Частичная сумма U = 1 'Первое слагаемое n = 1 'Число шагов Do U = x / n * U: S = S + U: n = n + 1 Loop Until (Abs(U) <= Eps) Or (n >= Limit) If n >= Limit Then Label3.Caption = Str(n) + " шагов не хватило" Else Label3.Caption = Str(S) + " " + "n=" + Str(n) End If End Sub  

 

Если для организации цикла в этой задаче использовать оператор цикла For, то в этом случае необходимо организовать принудительный выход из цикла. Предельное значение параметра цикла будет определяться лимитом числа повторений тела цикла. Как только выполнится условие |U| £ e, следует выход из цикла.

 

Принудительный выход из цикла в программе на VBA можно организовать, используя оператор перехода Goto. Синтаксис оператора:

Goto <Метка>;

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

Программа решения задачи:

Форма Программа
Private Sub CommandButton1_Click() Dim x As Single, Exp As Single, S As Single, U As Single Dim n As Integer Const Limit = 100 x = Val(TextBox1.Text) Eps = Val(TextBox2.Text) S = 1: U = 1 For n = 1 To Limit U = x / n * U: S = S + U If (Abs(U) <= Eps) Then GoTo M1 'Выход из цикла Next n 'Цикл доработал до конца Label3.Caption = Str(n) + " Шагов не хватило": GoTo M2 M1: Label3.Caption="Расчетное знач=" + Str(S)+ "n="+ Str(n) M2: End Sub

В программе используются два оператора перехода. Первый оператор перехода Goto M1 организует принудительный выход из цикла. Следующим выполняемым оператором будет оператор, помеченный меткой М1. После идентификатора метки ставится двоеточие. Второй оператор перехода Goto M2 организует обход вывода, ненужного в данном случае.

Считается, что использование оператора Goto затрудняет чтение программы.

 

Самостоятельная работа

 

Составить схему алгоритма, написать и отладить программу в соответствии с вариантом.

Задача e
  Рассчитать сумму бесконечного ряда 10-5
  Рассчитать сумму бесконечного ряда 0.5 10-4
  Вычислить первое значение функции z = xk / k, большее а, если k = 1, 2, 3, …  
  Определить, имеются ли среди чисел Cos(i3)sin(I*n), i = 1,2, …,n, меньшие 0.0001. 0.5 10-4
  Рассчитать сумму бесконечного ряда 10-4
  Дано а. Найти среди чисел 1+1/2, 1+1/2+1/3, 1+1/2+1/3+1/4,… первое большее а.  
  Рассчитать сумму бесконечного ряда 0.5 10-3
  Рассчитать сумму бесконечного ряда 10-4
  Дано а. Найти такое наименьшее n, что 1+1/2+…+1/n > a.  
  Дано а и х (x<1). Найти номер слагаемого, при котором сумма 1/X+1/X2+1/X3+1/X4, … станет больше a.  
  Рассчитать сумму бесконечного ряда 10-4
  Последовательность задана формулой sin2(3k+5)-cos(k2-15), где k = 1, 2, 3, …100. Определить, сколько членов последовательности имеют значение меньшее 0,25.  
  Последовательность задана формулой , где i = 1, 2, 3, …n. Найти сумму всех положительных чисел.  
  Рассчитать сумму бесконечного ряда 10-4
  Вычислить Х = для заданного значения а, используя рекуррентное соотношение: ; Х0=а.  

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-04-27 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: