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

Не могу вычислить ошибку


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

Как ни странно, прога работает, но при изменении параметров ввода результата никакого.

Код:

uses crt;

var e,a,x:real;

n:integer;

begin

clrscr;

e:=0.001;

n:=1;

x:=0.45;

writeln ('Obchislennya znachennya sumi ryadu');

if abs(a)<=e then begin

a:=ln(n+1)*exp(-1)*((ln(2*n)*exp(x))/((2*n)*(2*n-1)));

n:=n+1;

end;

writeln ('Znachennya sumi z zadanou tochnistyu ',e:5:3,' = ',a:5:5);

writeln ('Pidsumovano ',n,' elementiv ryadu');

readln;

end.

Условие:

вычислить сумму ряда с точностью e (эпсилон). Под приближенными значениями суммы ряда с точностью е подразумевается сумма тех додатков, для которых выполняется условие |An|>e

Формулу вклеить не могу, пишу словами:

Сумма от n=1 до бесконечности додатков (-1) в степени (n+1)*(x в степени 2n/(2n*(2n-1))), где:

х=0,45

Спасибо всем заранее.

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

Deather:

Как ни странно, прога работает
Работать-то она работает :) . Работающую прогу написать несложно. Сложно написать прогу, которая работает правильно, а делающую это эффективно - сложнее в квадрате.

Но вернемся к нашим баранам.

if abs(a)<=e then ...

Значит, при первом запуске программы проверяем значение a, которое нам даровали боги. Никто его не задавал. Поэтому

при изменении параметров ввода результата никакого.
При повторных запусках программа ничего вычислять не будет, поскольку значение a, отменяющее вычисления по формуле, будет даровано уже предыдущим запуском программы.

Ну, а дальше при первом запуске программы что-то, конечно, вычисляется, но совсем не то. Формула для члена ряда неправильно записана (правильно, ограничиваясь положительными значениями x, было бы

a:=(2*(n mod 2)-1)*exp(2*n*ln(x))/(2*n*(2*n-1))

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

P.S. Да и прямое вычисление членов ряда по исходной формуле неэкономично, лучше использовать рекуррентный метод - вычисление каждого члена ряда через предыдущий, это резко сокращает объем вычислений, подробнее в топике Вычисление значения суммы членов бесконечного ряда.

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

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

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

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

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

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

Войти

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

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

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