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
Перекодировщик