Язык программирования Pascal. Процедуры и функции. Рекурсия. Васильев В.В - 12 стр.

UptoLike

12
readkey
End.{Tochnost}
Полученный ответ зависит от типа ПК и приблизительно равен 10
-13
. Если
переменная , хранящая очередной член ряда, будет иметь тип real, то мы можем
получить число
e
с точностью до 13-го знака после запятой .
Для того чтобы найти число
e
с точностью до 50-го знака после запятой ,
цифры числа
e
сохраним в массиве следующего типа:
const t=50;
type vector = array [0..t] of [0..9];
Заметим, что для получения
e
с большей точностью достаточно будет в
программе изменить значение константы t (точность).
Первый элемент массива цифр числа
e
, имеющий индекс 0, содержит це-
лую часть числа
e
. Дробная часть начинается с элемента, индекс которого ра-
вен 1 .
Проведем декомпозицию поставленной задачи .
1. Начальное заполнение массива e (с цифрами числа
e
) и массива i (с цифра-
ми n-го члена ряда).
2. Сложение чисел, цифры которых хранятся в массивах e и i , и запись резуль -
тата в массив e.
3. Получение следующего члена ряда в массиве i .
4. Повторение пунктов 2 , 3 до достижения желаемой точности.
5. Печать числа
e
(цифр , хранящихся в массиве e ).
Разберем более детально каждую из перечисленных выше простых задач.
1. Первые два слагаемых в последовательности, выражающей число
e
, равны
единице. Первую единицу будем считать начальным значением , записывае-
мым в массив e. Вторую единицу запишем как начальное значение массива i
( n=1). Для начального заполнения массивов составим процедуру one(var
a:vector), которая элементу массива a (формальный параметр ) с индек -
сом 0 (целая часть числа ) присваивает 1 , а все остальные элементы (дробная
часть) заполняет нулями.
2. Складывать числа , цифры которых хранятся в массивах e и i , будем , исполь -
зуя способ сложения “в столбик” . Напишем процедуру add(var e,i:
vector). Введем локальную переменную v_ume (в уме). Найдем сумму s
элементов e[k] и i[k], k = t, t-1,..., 0. Переменной v_ume присвоим частное от
целочисленного деления s на 10, а e[k] присвоим остаток от такого деления .
При k=0 (целая часть числа ) мы не перейдем границу 10, потому что склады -
ваются члены последовательности, выражающей число
e
.
3. Для получения n-го члена ряда достаточно n-1-й член (цифры которого хра-
нятся в массиве i ) разделить на n . Составим процедуру division(var
i:vector; n:integer), в которой число из массива i делится столбиком
на число n . Введем локальные переменные r для остатка и a для делимого.
Первоначальное значение r равно нулю . a получается как остаток , увеличен-
ный в 10 раз и сложенный с очередной цифрой делимого i[k] (k = 0, 1, ..., t).