Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- {Итак, если я ничего не путаю, то для выполнения программы нам потребуется следующее:}
- {Sl(n=0)=1 - это легко получается при помощи подстановки начального значения в флормулу}
- {прочие значение можно вычислить по формуле Sl(n) = ((n+1)*x^n)/n!}
- {Воодим перемнную к, которая вычисляетстся следующим образом: k = Sl(n)/Sl(n-1) = ((n+1)*x)/(n*n)}
- {Отсюда получаем: Sl(n)=Sl(n-1)*k то есть Sl(n)=Sl(n-1)*((n+1)*x)/(n*n)}
- {Sl(n)=(Sl*(n+1)*x)/(n*n)}
- {Важно учесть, что для получения кроависых тестовых результатов нужно довольно долго подбирать подходящий эпселан.
- Значения, найденные по формуле, могут сильно отличаться от вычесленных при помощи стандартной функции как раз из-за точности.
- Пугаться расхождений не стоит, всё работет правильно ;) }
- {Входные данные: xn, xk, h, eps}
- {Выходные данные: sum}
- var
- n, i: byte;
- x, xn, xk, sum, sl, eps, e, h: real;
- begin
- writeln ('Введите начальное и конечное значения х, такие, чтобы -2.4 < x <2.4');
- readln (xn, xk); {Считываем начальное и конечное значение х}
- writeln ('Введите шаг изменения х - дробное положительное число');
- readln (h); {Считываем шаг изменения х}
- writeln ('Введите значение Эпсилон - число, принадлежащее промежутку (0; 0,1]');
- readln (eps); {Считываем значение эпсилона}
- x:=xn; {присваиваем х начальное значение}
- writeln ('| x | n | S | (e^x)*(1+x) |'); {выводим на экран шапку таблицы}
- writeln ('------------------------------------------');
- repeat {вход в цикл с постусловием }
- sum:=0; {начальному значению суммы присваиваем 0}
- n:=0; {задаём начальное значение n}
- sl:=1; {значение первого слагаемого всегда одинаково}
- while abs(sl)>=eps do begin {цикл с предусловием, выполняющийся, пока не достигнута нужная точность}
- sum:=sum+sl; {вычисляем сумму}
- n:=n+1; {увеличиваем n}
- sl:=(Sl*(n+1)*x)/(n*n); {вычисляем новое значение слагаемого}
- end;
- e:=exp(x)*(x+1); {вычисляем контрольное значение левой части данной формулы}
- writeln ('|',x:7:2,'|',n:7,'|',sum:9:4,'|',e:14:4,'|'); {выводим всё полученные результаты на экран в виде таблицы}
- writeln ('------------------------------------------');
- x:=x+h; {увеличиваем х на шаг}
- until (x>xk); {окончание цикла с постусловием}
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement