---
Пусть функция y(x) задана таблицей:
Xi X1 X2 X3 ... Xm
Yi Y1 Y2 Y3 ... Ym
Составить программу для вычисления значения этой функции в произвольной точке X1<=X<=Xm по формуле линейной интерполяции:
Цитата
X - Xi
Y(X) = Yi + --------- * (Yi+1 - Yi)
Xi+1 - Xi
Y(X) = Yi + --------- * (Yi+1 - Yi)
Xi+1 - Xi
, где Xi<=X<=Xi+1
Расчёт функции оформить в виде подпрограммы. Таблица и значение аргумента вводятся, результат расчёта выводить в главной программе.
> i+1, 2, 3, m, i - это всё нижний индекс.
---
Вот начал делать, и что-то не получается.. пожалуйста, проведите корректировку:
Код
program inter;
type
mas=array [1..10] of real;
var x,y: mas;
i,m,n:integer;
g:real;
Procedure Input (m1:integer; var x1:mas);
var i:integer;
begin
writeln ('Введите значения X: ');
for i:=1 to m1 do
readln (x1[i]);
end;
Procedure Input1 (m1:integer; var y1:mas);
var i:integer;
begin
writeln ('Введите значения Y: ');
for i:=1 to m1 do
readln (y1[i]);
end;
Function Summa (m1,n1:integer;x1,y1:mas):real;
var i:integer;
s:real;
begin
for i:=1 to m1-1 do
begin
if x1[i+1]-x1[i]=0 then begin writeln('y(x) - не существует.');
end
else
s:=y1[i]+((x1[n1]-x1[i])/(x1[i+1]-x1[i]))*(y1[i+1]-y1[i]);
end;
summa:=s;
end;
begin
writeln ('Введите количество элементов X, Y: ');
readln(m);
Input (m,x);
Input1 (m,y);
Writeln ('Введите произвольную точку: ');
readln(n);
g:=summa (m,n,x,y);
writeln ('Значения равны: ',g:10:5);
readln
end.
Заранее благодарен!