Помощь - Поиск - Пользователи - Календарь
Полная версия: Пожалуйста помогите избавиться от экспаненты
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Arhtas
Задание:

S=((x-1)/x+1)+(1/3)*((x-1)/(x+1))^3+...+(1/(2n+1))*((x-1/(x+1))^2n+1+...

x:=0.5
E= 0.1; 0.001

преподавательница видит *exp и даже не смотрит.
Я понял что это нужно делать путём накопления... Вобщем объясните пожалйста, я вообще не могу этого понять :sad.gifsad.gifsad.gifsad.gifsad.gifsad.gif

вот как я написалsad.gif

Program omglol;
uses crt;
var m,n,x:integer;
eps,s,x:real;
begin clrscr;
writeln('vvedite x i eps');
readln(x,eps);
n:=0;
s:=0;
if x>1 then m:=1;
ig x<1 then m:=-1;
while abs(1/(2*n+1))*exp((2*n+1)*ln(abs(x-1)/(x+1))))>eps do begin
s:s+m*(1/(2*n+1))*exp((2*n+1)*ln(abs(x-1)/(x+1))));
n:=n+1;
end;
n:=n-1;
writeln('Summa s=',S,'N poslednego slogaemogo=',n-1,' poslednee slogaemoe=',(1/(2*n+1))*exp((2*n+1)*ln(abs((x-1/(x+1))));
readln;
end.
Lapp
Цитата(Arhtas @ 14.01.2011 1:19) *
Задание:

S=((x-1)/x+1)+(1/3)*((x-1)/(x+1))^3+...+(1/(2n+1))*((x-1/(x+1))^2n+1+...

x:=0.5
E= 0.1; 0.001

преподавательница видит *exp и даже не смотрит.
Я понял что это нужно делать путём накопления...

Вот как-то так попробуй:
var
n: integer;
x,eps,a,s,p,k: double;
begin
writeln('vvedite x i eps');
readln(x,eps);
if Abs(x+1)<eps then WriteLn('x not in admited range')
else if eps<=1e-20 then WriteLn('eps must be positive')
else begin
k:= 1/Sqr(x+1);
n:=-1;
s:= 0;
p:= 1/(x+1);
repeat
Inc(n);
a:= (x-1)*p/(2*n+1);
s:=s+a;
p:= p*k;
until Abs(a)<=eps;
writeln('Summa s = ',S:8:5);
writeln('N poslednego slagaemogo = ',n);
writeln('poslednee slagaemoe = ',a:8:5)
end;
readln;
end.

Я еще ввел некоторую защиту при вводе, чтоб не вылетало по ошибку и не зацикливалось.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.