- •Министерство образования республики беларусь
- •Содержание
- •Глава 1. Основы алгоритмического языка Алфавит языка
- •Символы и константы
- •Специальные символы и зарезервированные слова
- •Идентификаторы
- •Неименованные константы-литералы
- •Комментарии
- •Подключаемые модули
- •Скалярные порядковые типы
- •Встроенные целочисленные типы
- •Встроенный булевский тип
- •Встроенный символьный тип
- •Пользовательский перечисляемый тип
- •Пользовательский тип «отрезок»
- •Константа_а..Константа_в
- •Вещественные типы
- •Переменные
- •Выражения
- •Операции
- •Стандартные подпрограммы
- •Функции преобразования значений
- •Арифметические функции
- •Совместимость типов в операциях
- •Именованные константы
- •Операторы
- •If лог_выражение then оператор1 [else оператор2];
- •Рекуррентные вычисления
- •Вычисление бесконечных сумм
- •Структурные типы
- •Массивы
- •Строковые типы
- •Алгоритмы обработки одномерных массивов
- •Алгоритмы обработки двумерных массивов
- •Блоки подпрограмм
- •Ид_парам1, Ид_парам2,...:тип_параметров;
- •Var Ид_парам11, Ид_парам12,...:тип_параметров;
- •Итоги главы
- •Глава 2. Численные методы
- •Решение нелинейных уравнений
- •Решение систем линейных уравнений
- •Численное интегрирование
- •Итоги главы
- •Рекомендуемая литература
- •Казаков Вадим Евгеньевич информатика. Программирование на алгоритмическом языке
Вычисление бесконечных сумм
Общая формулировка задач рекуррентного вычисления суммы бесконечного количества элементов:
,
где , т. е. последующее значение элемента А вычисляется на основе предыдущего его значения. Вычисление продолжается до тех пор, пока разница между предыдущим и последующим значением суммы не станет меньше, чем заданное пользователем значение точности:
.
В остальном постановка этой задачи аналогична постановке задачи нахождения суммы конечного количества элементов.
Общую методологию решения подобных задач рассмотрим на следующем примере:
Необходимо вычислить значение :
(2)
Вначале, как и в случае с задачей вычисления суммы конечного количества элементов, разобьём исходную формулу суммы на несколько частей (рис. 9).
b
Рисунок 9 – Разбиение элемента суммы формулы 2
Элемент n можно вычислить без использования рекуррентной формулы, поэтому для него отдельной переменной не выделено.
Затем сведём в таблицу значения каждой из частей формулы при разных значениях переменной n (см. таблицу 7).
Таблица 7 – Изменения частей элемента формулы 2
n |
a |
b |
c |
1 |
-1 |
x1 |
4! = 1*2*3*4 |
2 |
-1 |
x-1 |
5! = 1*2*3*4*5 |
3 |
-1 |
x-3 |
6! = 1*2*3*4*5*6 |
Из таблицы 7 видно, что значение переменной а неизменно, поэтому от её использования можно отказаться. Составим рекуррентные формулы для оставшихся переменных:
Рассмотрим подробнее рекуррентное выражение для переменной с. Если обратиться к таблице 7, то можно заметить, что последующее значение переменной с получается домножением предыдущего значения на одно число. При n = 2 необходимо домножить на 5, при n = 3 необходимо домножить на 6.
Это число зависит от числа n, оно соответствует формуле элемента суммы, связанного с переменной с – n+3 (см. рис. 9).
После составления рекуррентных формул можем перейти к составлению алгоритма и программы.
Рисунок 10 – Блок-схема алгоритма вычисления
суммы конечного количества элементов
Блок 3 (рис. 10) предназначен для инициализации переменных a и b. В качестве начальных значений используем значения из первой строки таблицы 7 (при n = 2). Затем в этом же блоке вычисляется и сохраняется в переменной s первый элемент суммы, вычисляемый при n = 1.
Цикл repeat не использует переменную счётчик, поэтому вводим её самостоятельно (переменная n). Инициализируется эта переменная также в блоке 3. Её начальное значение - 2, т. к. первый элемент суммы уже вычислен и сохранён до начала цикла.
В теле цикла (блок 4) сначала сохраняем значение переменной s в переменной sp, затем вычисляем новые значения переменных a и b, добавляем к переменной s новый элемент суммы и увеличиваем значение счётчика n.
Теперь в переменной s находится последующее значение суммы , а в переменнойsp – предыдущее.Заголовок циклаrepeat (блок 5) проверяет условие окончания цикла на основе этих значений и при истинности условия передаёт управление на блок вывода результатов 6.
Теперь можно перейти к реализации алгоритма в исходном тексте программы на языке Pascal.
program B_S;
var x,s,c,e,sp:real;
n,b:integer;
begin
writeln('введите x и точность');
readln(x, e);
b:=x;
c:=2*3*4;
s:=-b/c;
n:=2;
repeat
sp:=s;
b:=b*(1/(x*x));
c:=c*(n+3);
s:=s+-(n*b)/c;
n:=n+1;
until abs(sp-s)<e;
writeln('S=',s:8:5);
end.