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
Обработка слов предложения