Загрузка данных


program lagrang;
{ ***** ИНТЕРПОЛИРОВАНИЕ ПО ФОРМУЛЕ ЛАГРАНЖАВАНИЕ П}

const
  Rmax = 15;   { Максимальная размерность таблицы с данными }

type
  Mas = array[1..Rmax] of real;

var
  x, y: Mas;     { Массивы табличных данных }
  xt, Yr: real;  { Координата интерполируемой точки и результат }
  fname: string; { Имя файла }

{нтерполПроцедура ввода исходных данныхОЛИРОВА}
procedure Vvod_dannih(var x, y: Mas; var xt: real; var fname: string);
var
  inp: text;
  i: integer;
begin
  write('Введите имя файла: ');
  readln(fname);

  assign(inp, fname);
  reset(inp);

  { Ввод исходных данных из файла }
  for i := 1 to Rmax do
    read(inp, x[i]);

  for i := 1 to Rmax do
    read(inp, y[i]);

  close(inp);

  { Ввод X интерполируемой точки }
  repeat
    write('Введите ординату X интерполируемой точки от ',
          x[1]:0:3, ' до ', x[Rmax]:0:3, ': ');
    readln(xt);
  until (xt >= x[1]) and (xt <= x[Rmax]);
end;

{ reset(Функция вычисления значения по формуле ЛагранжаРМУЛЕ Л}
function Lagrange(xt: real; x, y: Mas): real;
var
  i, j: integer;
  pn, pv, s: real;
begin
  s := 0;
  for i := 1 to Rmax do
  begin
    pv := 1;
    pn := 1;
    for j := 1 to Rmax do
      if i <> j then
      begin
        pv := pv * (xt - x[j]);
        pn := pn * (x[i] - x[j]);
      end;
    s := s + y[i] * pv / pn;
  end;
  Lagrange := s;
end;

{ данныхПроцедура вывода результатаТЕРПОЛИ}
procedure Vivod_rezultata(xt, Yr: real);
begin
  writeln;
  writeln('******** РЕЗУЛЬТАТЫ ********');
  writeln('X = ', xt:0:3);
  writeln('Y = ', Yr:0:6);
end;

begin
  { Ввод данных }
  Vvod_dannih(x, y, xt, fname);

  { Интерполяция }
  Yr := Lagrange(xt, x, y);

  { Вывод результата }
  Vivod_rezultata(xt, Yr);

  readln;
end.