Next:4.5.3
Упражнения
Up:4.5
Обработка последовательности последовательностей
Previous:4.5.1
Обработка слов предложения
Решение. Введем следующие обозначения. Пусть
-- это функция, сопоставляющая вещественному числу
значения sin
и cos
, вычисленные с точностью до 10
,
а
-- та функция преобразования последовательности, которую должна реализовать
разрабатываемая программа. Тогда непосредственно из условия задачи получаем
Поэтому общая схема решения задачи может иметь вид, аналогичный схеме
решения программы Перекодировщик
из п. 4.2.1:
read(X);
while X > 0 do
(* Вычислить и
отпечатать значения sin(X) *)
(*Вычислить и
отпечатать значения cos(X) *)
read(X)
end;
Поскольку ряды, по которым вычисляются значения sin и cos, являются
знако-переменными, то заданная точность вычисления любого из них будет
достигнута, если последний из учтенных (или первый из отброшенных) членов
ряда будет по модулю меньше чем 10.
Суммирование ряда для заданного
можно осуществлять с помощью цикла, при каждом повторении которого вычисляется
и учитывается очередное значение, что было бы весьма нерационально. Для
получения более эффективной программы можно учесть зависимости между слагаемыми
в рядах, вид которых аналогичен зависимостям, положенным в основу программы
Основание2 (см. п. 4.3.2).
С учетом этих замечаний получаем следующую программу, в которой
и
используются для хранения значений
и
:
module Ряды;
const E = 0.0001;
var X,Y,Z,V,R : real; M : integer;
begin
(* {|Input2|>0, |Input1|=|Output|=0}
*)
read(X);
(* {Otput= Голова(Input), |Output|>0}
*)
while X> 0 do
(*Вычисение значений
cos(X) и
sin(X)*)
M:= 2; Y := X; Z := 1; V
:= X; R := - X;
repeat
V := V
R/M; Z := Z+V;
M := M+1; V := V
X/M;
Y := Y+V; M := M+1
until Abs(V)<
E;
writeln('SIN(' ,X,')= ',Y);
writeln('COS(', X,')= ',Z);
(* {Otput= РЯД(Input),
|Input2|>0} *)
read(X)
end
(* {Otput= РЯД(Input)} *)
end Ряды.
Next:4.5.3
Упражнения
Up:4.5
Обработка последовательности последовательностей
Previous:4.5.1
Обработка слов предложения