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