Перейти к содержанию
СофтФорум - всё о компьютерах и не только

Сумма ряда


Рекомендуемые сообщения

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

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

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

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

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

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

Ссылка на комментарий
Поделиться на другие сайты

Не такая уж простая, потому что предписанный алгоритм вычисления ряда, с делением вместо напрашивающегося умножения, неудобный. Заставляют левой рукой чесать правое ухо. Когда 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. Если отрицательных членов ряда нет, вместо их среднего выводился ноль, подправил на вывод вместо нуля соответствующего сообщения.

Изменено пользователем Тролль
Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...