Jump to content
СофтФорум - всё о компьютерах и не только

Сумма ряда


Recommended Posts

Вычислить сумму членов ряда:

y=x^n+x^n-1+......1+x^-1

с точностью до члена ряда меньшего 10^-6 , при изменяющемся от x до xc с шагомdx Подсчитать среднее арифметическое отрицательных y . Текущий член ряда вычислять по формуле:

Y0=x^n, Yn=Y(n-1)/x

В текстовый файл вывести данные для построения графика . Построить такой график в Excel.

Воот в принципе задачка простая,но не могу составить алгоритм именно вычисление суммы ряда?

Link to comment
Share on other sites

Не такая уж простая, потому что предписанный алгоритм вычисления ряда, с делением вместо напрашивающегося умножения, неудобный. Заставляют левой рукой чесать правое ухо. Когда x=0, ни формула, ни деление на x, с помощью которого требуют вычислять члены ряда, не будут работать, значит, это надо обрабатывать как особый случай. Кроме того, никто не обещал, что шаг должен быть задан таким, чтобы мы пришли точно на вторую заданную границу, что тоже несколько усложняет проверку - проверяем выход за границу в зависимости от знака шага с учетом возможной погрешности сложения шагов..

Да и вообще формулировка странная "с точностью до члена ряда меньшего 10^-6", я ее интерпретировал так, что как только попадется такой член ряда, мы перестаем вычислять ряд, но на самом-то деле члены такого ряда могут и расти, а могут и вообще идти коромыслом... Ладно, какой вопрос - такой ответ.

Так что получается нечто такое:

var k,j,n:integer; x,cx,dx,gx,s,y,yt:real;  f:text;beginAssign(f,'t.txt'); ReWrite(f); Write('n='); ReadLn(n);Write('x='); ReadLn(x);Write('cx='); ReadLn(cx);Write('dx='); ReadLn(dx);k:=0; s:=0; gx:=cx+1e-6*dx;repeatif x=0 then y:=1 else  begin  yt:=exp(n*ln(abs(x)));   if (x<0)and(n mod 2 <>0) then yt:=-yt;  y:=yt;  for j:=n downto -1 do  begin  if abs(yt)<1e-6 then break;  yt:=yt/x;  y:=y+yt;  end;  if y<0 then begin s:=s+y; inc(k) end;end;WriteLn(x:10:2,y:10:2);WriteLn(f,x,' ',y);x:=x+dx;until (dx>0)and(x>gx)or(dx<0)and(x<gx);Close(f);if k<>0 then WriteLn('s=',s/k) else WriteLn('no negatives values');WriteLn('s=',s:10:2);ReadLnend.

P.S. Если отрицательных членов ряда нет, вместо их среднего выводился ноль, подправил на вывод вместо нуля соответствующего сообщения.

Edited by Тролль
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...