Нужно найти значение функции используя ряд Тэйлора

Здравствуйте. Помогите, пожалуйста, очень нужно. Задание: Вычислить и вывести на экран в виде таблицы значения функции, заданной с помощью ряда Тейлора, на интервале от Хнач до Хкон с шагом h с точностью e. Таблица должна содержать значение аргумента, функции и количество просуммированных членов ряда. Пример: e^x=1+x+x^2/2!+x^3/3!+...+x^n/n! (Прошу прощения, что вручную)Сама программа с ошибкой - не могу найти ошибку:
Program name;
var xk,xn,h,e:real;
    x,fx,fx1,s,a:real;
    i,j,n:integer;
BEGIN
writeln('Vvedite xk,xn,h,e');
readln(xk,xn,h,e);
writeln('Vi4islit funkcii s pomosiu rada Teilora');
writeln;
writeln('__________')
writeln('   Nn    X  fx   fx1  n   ');
writeln;
 n:=trunc((xk-xn)/h)+1;
 For i:=1 to n do
     begin
x:-xn+(j-1)*h;
s:=1;
a:=1;
j:=1;
   repeat 
   writeln(a:10:2,j:10);
   readln;
   a:=a*x/j;
   s:=s+a;
   inc(j);
   until a>e;
 fx:=s;
 fx1:=exp(x); 
 writeln('  ',i:5,'  ',x:8:2,'   ',fx:8:3,'   ',fx1:8:3,'   ',j:5);
 end;
writeln('__________');
readln;
end.
Считает, но где-то вероятно ошибся в записи формулы, помогите.
10 ответов

Считает, но где-то вероятно ошибся в записи формулы,
Не нужно врать, в программе синтаксические ошибки, а после их исправления программа просто зависает.


Puporev Извините, но уже не знаю и на что грешить. Поправьте меня, пожалуйста, я не знаю уже как исправить свои ошибки.


uses crt;
var xn,xk,h,e,x,s,si,t:real;
    n:integer;
begin
clrscr;
write('Введите начало интервала xn=');
readln(xn);
repeat
write('Введите конец интервала  xk > ',xn:0:1,' xk=');
readln(xk);
until xk>xn;
repeat
write('Введите шаг табуляции h<',xk-xn:0:1,' h=');
readln(h);
until h<xk-xn;
repeat
write('e (0,1) e=');readln(e);
until(e>0)and(e<1);
writeln('---------------------------------------------');
writeln('|  x  |   Вычислено | Точное значение |  N  |');
writeln('---------------------------------------------');
x:=xn;
while x<=xk do
 begin
  n:=0;
  s:=0;
  si:=1;
  t:=1;
  while abs(s-si)>e do
   begin
    s:=si;
    n:=n+1;
    t:=t*(x/n);
    si:=si+t;
   end;
  writeln('|',x:5:2,'| ',s:11:6,' |',exp(x):14:6,'   |',n:3,'  |');
  x:=x+h;
 end;
writeln('----------------------------------------------');
readln
end.


Огромнейшее вам человеческое спасибо!!! Вы меня очень выручили. И кстати, у вас все очень наглядно и красиво! Ваше решение понятно с первого раза! Вы лучше объяснили мне этой задачей ход решения, чем преподаватель за пару лекций! =) Спасибо.Можно еще комментарии написать после строчки 22 x:=xn; ? А то проблемы вдруг возникла с формулами.


А то проблемы вдруг возникла с формулами. x:=xn; ?
А разве у вас не такие же обозначения?


Совершенно с вами согласен, только у вас новые переменные такие как t и si. Уж простите, но, пожалуйста, напишите комментарии к своим записям.


s-сумма результат si- текущая сумма t- значение очередного члена ряда.


Спасибо. Извините за наглость, но у меня вопрос по блок-схеме: У меня по задаче, по существу, надо использовать решение(ромб) с переходом в соединитель или ветвь одна будет? И простите, как в блок схеме реализовать вот эту строчку: write('Введите шаг табуляции h<',xk-xn:0:1,' h='); readln(h); В ней, как видите, при несоблюдении условия h


вот эту строчку: write('Введите шаг табуляции h<',xk-xn:0:1,' h='); readln(h);
Да просто параллелограмм Ввод hЕсли совсем точно, то как цикл с ромбом.


подскажите как сделать тоже самое для e^-x ?Спасибо за пример. Переделал под свой e^-x; разобрался=)