русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Рекуррентные вычисления


Дата добавления: 2013-12-23; просмотров: 2573; Нарушение авторских прав


End;

End;

End;

Оператор;

V := Succ(V);

Begin

Оператор;

V := Temp1;

Begin

Begin

Оператор;

Рисунок 6 – Блок-схема цикла с параметром

 

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

Управляющая переменная (Ид_переменной) должна иметь порядковый тип.

Значения выражения1(начальное значение) и выражения2(конечное значения) определяются один раз. Эти значения сохраняются на протяжении всего выполнения оператора for.

В результате вычисления выражения1и выражения2должны быть получены значения, тип которых совместим по присваиванию с управляющей переменной.

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

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

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

Приведём эквивалентную схему оператора:

 

for V := Expr1 to Expr2 do Оператор;

 

из которой следуют все вышеприведённые замечания.

 

Temp1 := Expr1;

Temp2 := Expr2;

if Temp1 <= Temp2 then

while V <> Temp2 do

Следует обратить внимание на следующее:



Условием выхода из цикла является ложное значение выражения V <> Temp2,и если оператор, содержащийся в теле оператора for, изменяет значение управляющей переменной, то может возникнуть ситуация, когда значение переменной V никогда не станет равным значению Temp2, и цикл не сможет корректно завершиться.

 

Общая формулировка задач рекуррентного вычисления суммы или произведения конечного количества элементов выглядит следующим образом:

, или ,

где , т. е. последующее значение элемента А вычисляется на основе предыдущего его значения.

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

.

 

Общую методологию решения подобных задач рассмотрим на следующем примере. Необходимо вычислить значение :

(1)

Вначале, для упрощения рекуррентной формулы вычисления элемента суммы, разобьём его на несколько частей (рис. 7).

 

Рисунок 7 – Разбиение элемента суммы формулы 1

 

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

Затем сведём в таблицу значения каждой из частей формулы при разных значениях переменной n (см. таблицу 6).

 

 

Таблица 6 – Изменения частей элемента суммы формулы 1

n a b c
(x+1)4 3!=1*2*3
-1 (x+1)5 5!=1*2*3*4*5
(x+1)6 7!=1*2*3*4*5*6*7

 

Теперь, когда появилась возможность сравнить предыдущее значение части элемента суммы с его последующим значением, можно составить рекуррентные формулы:

 

 

Рассмотрим подробнее рекуррентное выражение для переменной с. Если обратиться к таблице 6, то можно заметить, что последующее значение переменной с получается домножением предыдущего значения на два числа. При n = 3 необходимо домножить на 4 и 5, при n = 4 необходимо домножить на 6 и 7.

Эти два числа определённым образом зависят от числа n. Второе из них соответствует формуле элемента суммы, связанного с переменной с - 2n-1 (см. рис. 7). Тогда первое число можно получить, отняв от числа 2n-1 единицу (поскольку это предыдущее целое число). Откуда и получаем значение 2n-2.

После составления рекуррентных формул можем перейти к составлению алгоритма и программы.

Следует обратить внимание на блок 3 (рис. 8), в котором инициализируются переменные a, b, c. В качестве начальных значений используем значения из первой строки таблицы 6 (при n = 2).

Теперь обратимся к блоку 4. Почему начальное и конечное значения цикла выбраны именно таким образом?

Дело в том, что в блоке 5 вначале выполняется вычисление следующего значения суммы (переменная S), а только затем, с помощью составленных ранее рекуррентных выражений, вычисляются следующие значения переменных a, b и c.

Новые значения переменных a, b и c должны вычисляться при n = 3 (следующее значение), а значение S при n = 2. И если цикл начнётся со значения n = 3, то следующие значения переменных a, b и c будут вычислены правильно, а выражение для вычисления S нужно будет изменить, уменьшив на единицу все вхождения в него переменной n (сравните формулы вычисления переменной S на рисунке 7 и в блоке 5 на рисунке 8).

 

 

 

Рисунок 8 – Блок-схема алгоритма вычисления

суммы конечного количества элементов

 

 

Кроме того, чтобы сохранить требуемое количество повторений тела цикла (k-2), увеличим конечное значение счетчика цикла на единицу. Таким образом, количество повторений будет равно: 3–(k+1) = k-2.

Теперь можно перейти к реализации алгоритма в исходном тексте программы на языке Pascal.

 



<== предыдущая лекция | следующая лекция ==>
Оператор цикла с параметром (For) | Вычисление бесконечных сумм


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.026 сек.