Задание:
Значение k-й производной записанного по убывающим степеням многочлена в точке t0, f: сигма(R) > R, f(дельта) = 0.
Требования и рекомендации к выполнению задания:
Цитата:
1) Алгоритм решения задачи должен быть однопроходным и не должен использовать дополнительную память, пропорциональную размеру входного файла (использование массивов для хранения входной последовательности запрещено);
2) Возможны 2 варианта реализации последовательности в виде входного файла: а) файл имеет тип Text, создается с помощью стандартного текстового редактора и просматривается тоже стандартными средствами; б) файл имеет тип file of X, создается и просматривается специальной отдельной программой (или программами) генерации и просмотра;
3) Рекомендуется использовать схему вычисления индуктивной функции, в которой на каждом шаге основного цикла из входного файла читается и обрабатывается 1 элемент последовательности (в этом случае инвариант цикла и ограничивающая функция стандартны);
4) Программа должна выводить поочередно обрабатываемые элементы входного файла, а также другие (промежуточные) данные в виде, позволяющем проанализировать и понять процесс формирования окончательного результата как автору программы, так и проверяющему задание;
5) Выходные данные (включая те, что необходимы для понимания работы алгоритма) должны выводиться на экран для оперативного анализа результатов (в режиме отладки) и в выходной файл (в режиме формирования отчета) для демонстрации проверяющему работоспособности программы;
6) Требуется протестировать основные особые случаи входных данных (например, входной файл пуст или содержит лишь 1 элемент), корректную обработку последнего элемента файла, проверить, учитывается ли наличие стационарного значения индуктивной функции и т. п.
|
Я смог написать программу для вычисления только первой производной по схеме Горнера:
Код:
program work5;
var
ValueDerivative : real;
ValuePolinom : real;
k : real;
t0 : real;
OrderDerivative : integer;
InputPolinom : text;
OutputPolinom : text;
begin
Assign( InputPolinom, 'inputfile.txt' );
Assign( OutputPolinom, 'outputfile.txt' );
Rewrite(OutputPolinom);
Reset(InputPolinom);
Write( 'Введите порядок производной: ' );
Readln( OrderDerivative );
Write( 'Введите t0: ' );
Readln( t0 );
ValuePolinom := 0;
ValueDerivative := 0;
while ( not EOF( InputPolinom )) do
begin
Read( InputPolinom, k );
ValueDerivative := ValueDerivative * t0 + ValuePolinom;
ValuePolinom := ValuePolinom * t0 + k;
end;
Writeln( 'ValueDerivative = ', ValueDerivative );
Readln;
Writeln( OutputPolinom, ValuePolinom ) ;
Writeln( OutputPolinom, ValueDerivative ) ;
close( InputPolinom );
close( OutputPolinom );
end.
Возможно ли вообще выполнить исходное задание с такими условиями? Т.е. ни коэффициенты нельзя считать в массив, степень полинома неизвеста, т.к. степень не является входным данным, а алгоритм при этом должен быть однопроходным, т.е. пробежаться по файлу и посчитать коэффициенты нельзя.
Направьте в правильное русло, ибо я уже остатки мозга поломал.