- •Приемы и методы программирования
- •Итерационные методы
- •7.2. Вычисление функции разложением в ряд
- •7.3. Рекуррентные формулы
- •7.4. Организация надежного ввода.
- •Структурирование циклов в основе метода структурирования цикла заложено требование, чтобы цикл, как и
- •Интерфейс программы
- •Текстовые файлы
- •7.8. Спецификация задачи
- •Кроме описанных правил добавляется возможность отсутствия текста:
- •В форме а) предусматривается возможность отсутствия составляющей, а в форме б) –
- •7.9. Предупреждение ошибок и отладка программы
- •7.10. Модули
- •Главный алгоритм
- •Раздел описаний
- •Алгоритм
- •Поиск экстремума в файле
- •Задача. Найти максимальный элемент в последовательности чисел, размещенных в файле.
Приемы и методы программирования
Итерационные методы
Итерация результат многократного выполнения какого-либо действия. Итерационные процессы лежат в основе метода последовательных приближений, который дает приближенное решение математических задач. На каждом шаге итерации получается решение более близкое к точному, чем на предыдущем шаге. Применяется метод в том случае, если точное решение задачи получить невозможно.
Постановка задачи
Пусть S0, S1, … , Sn, … - последовательность, которая сходится к пределу S.
Требуется вычислить приближенно S с точностью .
Математический метод
Задаем начальное значение S0 = <нач>.
Вычисляем Si для i =1,2,… до Si - Si-1 < .
Алгоритм
С точки зрения программы, переменная – это поименованная область памяти, которая хранит значение определенного типа.
Snew:=<нач> повторить Sold
:=Snew
до
Snew - Sold <
Для
поиска предела S
достаточно хранить только два элемента
последовательности: текущее значение
Si
, которое вычисляем (обозначим его
через Snew)
и предыдущее значение Si-1
(обозначим его через Sold).
При
переходе к следующему элементу Sold
заменяется на Snew.
Вычислить
Snew
7.2. Вычисление функции разложением в ряд
Если функцию f(x) невозможно вычислить точно (по формуле), то существует способ приближенного вычисления путем разложения ее в функциональный ряд:
, где - k-й член ряда, k = 1, 2, …
Частичной суммой ряда называется сумма k его членов:
где k = 1, 2,……
Р яд сходится на отрезке [p, q] к функции f(x), если стремится к f(x) при k стремящемся к бесконечности для p x q.
Необходимым условием сходимости является стремление члена ряда
к нулю, когда k стремится к бесконечности для p x q.
Если ограничиться k членами ряда, то погрешность вычисления будет равна
Использовать эти формулы для оценки погрешности мы не можем, так как с одной стороны, невозможно вычислить f(x) по предположению, а с другой стороны, невозможно просуммировать бесконечное число членов ряда. Поэтому в дальнейшем, при приближенном вычислении суммы ряда с заданной точностью мы будем допускать, что точность вычисления равна первому отбрасываемому члену, считая
.
Для знакопеременных рядов, в которых знаки членов ряда чередуются, такое допущение о точности является верным.
7.3. Рекуррентные формулы
Рассмотрим задачу суммирования степенных рядов, члены которых можно выразить через степень аргумента х и.
Пример 1.
Пример 2.
Для получения каждого k-го члена ряда требуется вычисление факториала : (2k-1)! (в примере 1) и k! (в примере 2), а также возведение аргумента х соответственно в степень: (2k-1)-ю и k-ю соответственно. С ростом k количество вычислений возрастает.
Количество вычислений можно значительно сократить, если обратить внимание на то, каждый член ряда можно не вычислять заново, а использовать результаты вычисления предыдущего члена.
Так , для приведенных примеров при переходе от (k-1)-го и k-му члену ряда в происходит накопление факториала умножением на k (в примере 1) и на (2k-1) (в примере 2), и накопление степени аргумента х умножением на х*х (в примере 1) и на х (в примере 2).
Поэтому для экономии вычислений используем рекуррентную формулу, которая выражает каждый член ряда через предыдущий.
Рассмотрим два способа получения рекуррентной формулы.
Способ 1
Для примера 1 рекуррентная формула может быть получена в виде:
ak = ak-1 (x,k)
Для того, чтобы найти (x,k) , делим k-й член на (k-1)-й:
, , k = 2, 3, …
Способ 2
В примере 2 рекуррентная формула не может быть получена способом 1, то есть в виде простого деления k-го члена от (k-1)-го. В этом случае из члена ряда выделяются части, для которых можно применить рекуррентную формулу. Это те части, где происходит накопление результата:
аргументная часть, обозначим эту часть через R1;
факториал, обозначим эту часть через R2.
Алгоритм имеет вид:
R1
= 1 R2 = 1 R1
= R1
x
R2
= R2
k a
k
=
R1
(1/k +1/R2)
для вычисления a1
Повторение для k = 1, 2, 3 …