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

Сумма ряда


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

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

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

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

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

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

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