Next:4.2.3
Упражнения
Up:4.2
Независимая обработка элементов последовательности
Previous:4.2.1
Перекодировщик
Решение. Для функции ,
которую должна реализовать разрабатываемая программа, не удается записать
соотношения, подобные тем, которые были сформулированы для функции
(см. п. 4.2.1). Однако если ввести в рассмотрение новую функцию Выбор
,
для которой
для всех чисел Х и последовательностей ,
то для нее справедливы соотношения:
где
и
-- функция, имеющая значением либо пустую строку
,
если
,
либо строку, состоящую из одного числа
,
в противном случае.
Таким образом, имеем
и вычисление функции Выбор
может
быть осуществлено в два этапа: первый этап -- это ввод первого элемента
последовательности, а второй -- вычисление функции Выбор в точном
соответствии с методом, рассмотренным при решении задачи в п. 4.2.1.
module ВыборкаЭлементовПоследовательности;
var X,Y : real;
begin (* {|Input2|>0, |Input1|=0,
Otput=Выборка(Input1)}*)
read(X);
while ~ Eof do (* {Ограничивающее
выражение: |Input2|} *)
(* { X = Голова(Input),
|Input1|=1,
Otput=Выборка(Input1)}*)
read(Y); if
abs(Y)
abs(Exp(X)
sqr(Sin(X)) - sqr(Y)) then write(Y) end
(* { X = Голова(Input),
Otput=Выборка(Input1)}*)
end
(* {Otput=Выборка(Input)}*)
end ВыборкаЭлементовПоследовательности.
Недостатком этой программы является то, что в ней для каждого элемента
заданной последовательности заново повторяется вычисление функции
.
Ясно, что при этом выполняется много лишней работы, поскольку значение
выражения
никак не зависит от значения элемента
и может быть вычислено один раз перед выполнением оператора цикла следующим
образом:
module ВыборкаЭлементовПоследовательности2;
var X,Y : real; S:real;
begin (* {|Input2|>0, |Input1|=0,
Otput=Выборка(Input1)}*)
Read(X); S := Exp(X)
Sqr(Sin(X));
(* { X = Голова(Input),
|Input1|=1,
Otput=Выборка(Input1),*)
while ~ Eof do (* {Ограничивающее
выражение: |Input2|}*)
(* { X = Голова(Input),
|Input2|>0,
Otput=Выборка(Input1), *)
read(Y); if abs(Y)
abs(S - sqr(Y)) then write(Y) end
(* { X = Голова(Input),
|Input2|>0,
Otput=Выборка(Input1),
*)
end
(* {Otput=Выборка(Input)}*
)
end ВыборкаЭлементовПоследовательности2.
Next:4.2.3
Упражнения
Up:4.2
Независимая обработка элементов последовательности
Previous:4.2.1
Перекодировщик