Определить значения функции в некоторой промежуточной точке х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.
- Вывод таблицы вычислений.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д