Массив из многочленов второго степеня.(Delhpi/Pasc

Заданный массив многочленов второй степени, состоящий из трех элементов.Найти тот, для которого определен интеграл приобретает наименьшего значения на определенном отрезке.Как в массив записать многочлены? Через функцию можно?Моя попытка:Код:
uses  SysUtils;Function Mnogochlen(m1,m2,m3,x:real):real;BeginM1:=3*(x*x)+4*x+7;M2:=6*(x*x)-8*x+3;M3:=4*(x*x)-x+1;End;Type Massiv=array [1..10] of integer;Const M:massiv of mnogochlen =(M1,m2,m3);
Подскажите, как правильно??
2 ответа

program polynomial;const  POWER = 2;{степень многочлена}  MAX_POLYS = 3;{количество полиномов}  LEFT = 0.0;{левая граница отрезка}  RIGHT = 1.0;{правая граница отрезка}  STEPS = 16;{количество частей}type  TPoly2 = array[ 0..POWER ] of real;{тип многочлен, в массиве хранятся коэффициенты a0..a2, a0 + a1x + a2x^2}  TIntegral = TPoly2;  TPolys = array[ 1 .. MAX_POLYS ] of TPoly2;function Func( var integral : TIntegral; x : real ) : real;{функция возвращает значение первообразной для аргумента x}var  i : integer;{счетчик}  sum, value : real;{sum - результат, value - текущее значение( порядок ) аргумента, т.е. x, x*x, x*x*x}begin  {инициализация}  sum := 0.0;  value := x;{первая степень}  for i := 0 to POWER do  begin    sum := sum + integral[ i ] * value;{прибавляем к сумме текущее значение, умноженное на коэффициент}    value := value * x;{переход к следующему порядку}  end;  Func := sum;{возвращаем результат}end;function CalcIntegral( var integral : TIntegral; a, b : real; n : integer ) : real;{функция вычисления интеграла на отрезке [ a, b ], методом прямоугольников с n отрезками}var  i : integer;{счетчик}  step, halfStep, sum : real;{step - шаг интегрирования, stepHalf - полушаг}begin  step := ( b - a ) / n;{вычисляем шаг}  halfStep := step * 0.5;{вычисляем полушаг}  sum := 0.0;{интегральная сумма = 0}  for i := 1 to n do    sum := sum + Func( integral, a + ( i - 1 ) * step + halfStep );{суммируем с очередным значением}  CalcIntegral := sum * step;{возвращаем результат}end;procedure GenerateIntegral( var poly : TPoly2; var integral : TIntegral );{процедура генерирует первообразную для полинома poly}var  i : integer;{счетчик}begin  for i := 0 to POWER do{для каждого порядка}    integral[ i ] := poly[ i ] / ( i + 1 );{ для x^n первообразная = x^( n + 1 )/( n + 1 ) }end;function MinIntegral( var polys : TPolys; a, b : real; n : integer ) : integer;{функция вычисляем минимальный на заданном отрезке интеграл}var  i, res : integer;{ i - счетчик, res - результат( индекс в массиве polys )}  min, test : real;{min - текущий минимум, test - проверяемый минимум}  integral : TIntegral;{интеграл}begin  {инициализация}  res := 1;{текущий результат}  GenerateIntegral( polys[ res ], integral );{генерируем интеграл}  min := CalcIntegral( integral, a, b, n );{вычисляем на отрезке [ a, b ]}  {далее повторяем процесс, сравниваем два минимума, оставляем меньший, записываем индекс в результат}  for i := 2 to MAX_POLYS do  begin    GenerateIntegral( polys[ i ], integral );{генерируем интеграл}    test := CalcIntegral( integral, a, b, n );{вычисляем на отрезке [ a, b ]}    if ( test < min ) then{новый минимум меньше}    begin      min := test;{запоминаем новый минимум}      res := i;{запоминаем результат}    end;  end;  writeln( 'Min = ', min );{печатаем минимум для статистики}  MinIntegral := res;{возвращаем результат}end;procedure PrintPoly( var poly : TPoly2 );{процедура печати полинома}var  i, j : integer;begin  for i := 0 to POWER - 1 do  begin    write( poly[ i ]:5:2 );    for j := 1 to i do      write( 'x' );    write( '+' );  end;  write( poly[ POWER ]:5:2 );  for j := 1 to POWER do    write( 'x' );end;var  polys : TPolys;{массив полиномов}  min : integer;{результат будет здесь}begin  {первый полином = 1 + 0 * x + 0 * x * x }  polys[ 1 ][ 0 ] := 1.0;  polys[ 1 ][ 1 ] := 0.0;  polys[ 1 ][ 2 ] := 0.0;  {второй полином = 0 + 1 * x + 0 * x * x }  polys[ 2 ][ 0 ] := 0.0;  polys[ 2 ][ 1 ] := 1.0;  polys[ 2 ][ 2 ] := 0.0;  {третий полином = 0 + 0 * x + 1 * x * x }  polys[ 3 ][ 0 ] := 0.0;  polys[ 3 ][ 1 ] := 0.0;  polys[ 3 ][ 2 ] := 2.0;  min := MinIntegral( polys, LEFT, RIGHT, STEPS );{вычисляем индекс минимального полинома}  writeln( 'Result : ' );  PrintPoly( polys[ min ] );{печатаем полином}  readln;{ожидаем ввода}end.


Спасибо.