Определить значения функции в некоторой промежуточной точке хk, используя линейную интерполяцию - PascalABC.NET

Узнай цену своей работы

Формулировка задачи:

Помогите пожалуйста, уже 2 недели бьюсь с кодом и все никак не выходит: Функция f(x) представлена в виде таблицы значений, т.е. даны значения функции в некоторых точках x1, x2, . . . , xn (причем xi+1>xi), равные соответственно y1, y2, . . . , yn. Определить значения функции в некоторой промежуточной точке хk, используя линейную интерполяцию, т. е. считать, что функция между заданными точками изменяется линейно. Решение представить или в виде таблицы или в виде графика функции (по выбору пользователя). Также нужно сделать контроль ввода, чтобы можно было вводить только циферки

Решение задачи: «Определить значения функции в некоторой промежуточной точке хk, используя линейную интерполяцию»

textual
Листинг программы
  1. var x,y:array of double;
  2.     xk,yk:double;
  3.     n,i,c:integer;
  4.     s:string;
  5. begin
  6. repeat
  7. write('Введите количество точек вычисления функции n>1 n=');
  8. readln(s);
  9. val(s,n,c);
  10. if(c<>0)or(n<2)then write('N должно быть целым числом больше 1');
  11. until(c=0)and(n>1);
  12. setlength(x,n);
  13. setlength(y,n);
  14. writeln('Введите значения х в порядке возрастания ');
  15. writeln('и соответствующие им значения функции');
  16. writeln('Точка 1');
  17. repeat
  18.  write('x=');
  19.  readln(s);
  20.  val(s,x[i],c);
  21.  if c<>0 then writeln('Введите число');
  22. until c=0;
  23. repeat
  24.  write('y=');
  25.  readln(s);
  26.  val(s,y[i],c);
  27.  if c<>0 then writeln('Введите число');
  28. until c=0;
  29. for i:=1 to n-1 do
  30.  begin
  31.   writeln('Точка ',i+1);
  32.   repeat
  33.    write('x=');
  34.    readln(s);
  35.    val(s,x[i],c);
  36.    if (c<>0)or (x[i]<=x[i-1]) then
  37.    writeln('Введите число больше ',x[i-1]);
  38.   until (c=0)and (x[i]>x[i-1]);
  39.   repeat
  40.    write('y=');
  41.    readln(s);
  42.    val(s,y[i],c);
  43.    if c<>0 then
  44.    writeln('Введите число');
  45.   until c=0;
  46.  end;
  47.  for i:=1 to n-1 do
  48.  begin
  49.   writeln('Точка ',i+1);
  50.   repeat
  51.    write('x=');
  52.    readln(s);
  53.    val(s,x[i],c);
  54.    if (c<>0)or (x[i]<=x[i-1]) then
  55.    writeln('Введите число больше ',x[i-1]);
  56.   until (c=0)and (x[i]>x[i-1]);
  57.   repeat
  58.    write('y=');
  59.    readln(s);
  60.    val(s,y[i],c);
  61.    if c<>0 then
  62.    writeln('Введите число');
  63.   until c=0;
  64.  end;
  65. repeat
  66. write('Введите значение ',x[0]:0:2,'<xk<',x[n-1]:0:2,'xk=');
  67. readln(s);
  68. val(s,xk,c);
  69. if (c<>0) then  writeln('Введите число из указанного интервала');
  70. until (c=0)and(xk>x[0])and(xk<x[n-1]);
  71. yk:=y[i-1]+(y[i]-y[i-1])/(x[i]-x[i-1])*(xk-x[i-1]);
  72. writeln('yk=',yk:0:2);
  73. i:=0;
  74. while (i<n-1)and(xk>x[i]) do i:=i+1;
  75. n:=n+1;
  76. setlength(x,n);
  77. setlength(y,n);
  78. for c:=n-1 downto i+1 do
  79.  begin
  80.   x[c]:=x[c-1];
  81.   y[c]:=y[c-1];
  82.  end;
  83. x[i]:=xk;
  84. y[i]:=yk;
  85. writeln('Таблица вычислений');
  86. writeln('-------------------');
  87. writeln('| i |  Xi  |  Yi  |');
  88. writeln('-------------------');
  89. for i:=0 to n-1 do
  90. writeln('|',i+1:3,'|',x[i]:6:2,'|',y[i]:6:2,'|');
  91. writeln('-------------------');
  92. end.

Объяснение кода листинга программы

  1. Ввод количества точек для вычисления функции (n).
  2. Ввод значений x и y для каждой точки.
  3. Предложение ввести значение xk в указанном интервале.
  4. Вычисление значения yk с помощью линейной интерполяции.
  5. Обновление таблицы вычислений, добавление нового значения xk и yk.
  6. Вывод таблицы вычислений.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4.333 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы