Определить значения функции в некоторой промежуточной точке хk, используя линейную интерполяцию - PascalABC.NET
Формулировка задачи:
Помогите пожалуйста, уже 2 недели бьюсь с кодом и все никак не выходит:
Функция f(x) представлена в виде таблицы значений, т.е. даны значения функции в некоторых точках x1, x2, . . . , xn (причем xi+1>xi), равные соответственно y1, y2, . . . , yn. Определить значения функции в некоторой промежуточной точке хk, используя линейную интерполяцию, т. е. считать, что функция между заданными точками изменяется линейно. Решение представить или в виде таблицы или в виде графика функции (по выбору пользователя).
Также нужно сделать контроль ввода, чтобы можно было вводить только циферки
Решение задачи: «Определить значения функции в некоторой промежуточной точке хk, используя линейную интерполяцию»
textual
Листинг программы
- var x,y:array of double;
- xk,yk:double;
- n,i,c:integer;
- s:string;
- begin
- repeat
- write('Введите количество точек вычисления функции n>1 n=');
- readln(s);
- val(s,n,c);
- if(c<>0)or(n<2)then write('N должно быть целым числом больше 1');
- until(c=0)and(n>1);
- setlength(x,n);
- setlength(y,n);
- writeln('Введите значения х в порядке возрастания ');
- writeln('и соответствующие им значения функции');
- writeln('Точка 1');
- repeat
- write('x=');
- readln(s);
- val(s,x[i],c);
- if c<>0 then writeln('Введите число');
- until c=0;
- repeat
- write('y=');
- readln(s);
- val(s,y[i],c);
- if c<>0 then writeln('Введите число');
- until c=0;
- for i:=1 to n-1 do
- begin
- writeln('Точка ',i+1);
- repeat
- write('x=');
- readln(s);
- val(s,x[i],c);
- if (c<>0)or (x[i]<=x[i-1]) then
- writeln('Введите число больше ',x[i-1]);
- until (c=0)and (x[i]>x[i-1]);
- repeat
- write('y=');
- readln(s);
- val(s,y[i],c);
- if c<>0 then
- writeln('Введите число');
- until c=0;
- end;
- for i:=1 to n-1 do
- begin
- writeln('Точка ',i+1);
- repeat
- write('x=');
- readln(s);
- val(s,x[i],c);
- if (c<>0)or (x[i]<=x[i-1]) then
- writeln('Введите число больше ',x[i-1]);
- until (c=0)and (x[i]>x[i-1]);
- repeat
- write('y=');
- readln(s);
- val(s,y[i],c);
- if c<>0 then
- writeln('Введите число');
- until c=0;
- end;
- repeat
- write('Введите значение ',x[0]:0:2,'<xk<',x[n-1]:0:2,'xk=');
- readln(s);
- val(s,xk,c);
- if (c<>0) then writeln('Введите число из указанного интервала');
- until (c=0)and(xk>x[0])and(xk<x[n-1]);
- yk:=y[i-1]+(y[i]-y[i-1])/(x[i]-x[i-1])*(xk-x[i-1]);
- writeln('yk=',yk:0:2);
- i:=0;
- while (i<n-1)and(xk>x[i]) do i:=i+1;
- n:=n+1;
- setlength(x,n);
- setlength(y,n);
- for c:=n-1 downto i+1 do
- begin
- x[c]:=x[c-1];
- y[c]:=y[c-1];
- end;
- x[i]:=xk;
- y[i]:=yk;
- writeln('Таблица вычислений');
- writeln('-------------------');
- writeln('| i | Xi | Yi |');
- writeln('-------------------');
- for i:=0 to n-1 do
- writeln('|',i+1:3,'|',x[i]:6:2,'|',y[i]:6:2,'|');
- writeln('-------------------');
- end.
Объяснение кода листинга программы
- Ввод количества точек для вычисления функции (n).
- Ввод значений x и y для каждой точки.
- Предложение ввести значение xk в указанном интервале.
- Вычисление значения yk с помощью линейной интерполяции.
- Обновление таблицы вычислений, добавление нового значения xk и yk.
- Вывод таблицы вычислений.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д