Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ вычисление суммы членов бесконечного числового ряда

Автор: dim0n 11.06.2011 18:33

Собственно сама задача:
Составить программу вычисления суммы членов бесконечного числового ряда с погрешностью Е=10^-4. Определить количество членов ряда,сравнить полученное значение суммы со значением функции y=Ln(x),x=1.5.

формула суммы ряда фото: Прикрепленное изображение
мое творение:

 
Program primer;
{Ln(x)}
var
a:real; {n-й член ряда}
b:real; {ошибка}
n:integer; {число итераций}
s:real; {сумма ряда}
x:real; {аргумент}
begin
write('x=');
readln(x);
write('точность e=');
readln(e);
s:=0;
n:=1;
a:=x; {0й член}
while abs(a)>e do begin
s:=s+a;
n:=n+1;
a:=(x-1)*n*n/(n*x*n*n);
end;
writeln('сумма ряда=',s:6:5);
writeln('точность=',e:6:5);
writeln('число членов=',n);
writeln('Ln(',x:6:5,')=',Ln(x):6:5);
writeln('расхождение=',abs(Ln(x)-s):6:5);
readln;
end.



гуру гляньте пожалуйста, правильно ли я мыслю?

Автор: IUnknown 11.06.2011 18:42

Формулу в порядок приведи, хотелось бы видеть, с правильной ли ты формулой работаешь вообще... Кстати, твоя программа компилироваться не будет - переменная E не описана... И еще: E - это не ошибка, а точность. Ошибка вычисляется по другому...

Автор: dim0n 11.06.2011 19:36

исправил... wub.gif

Автор: IUnknown 11.06.2011 20:02

В таком случае (раз ты выбрал эту формулу), я бы сделал так:

    s:=0;
n:=1;
a:=1;
while abs(a)>e do begin
a:=a * (x-1) / x;
s:=s+a/n;
n:=n+1;
end;
Сравни, за сколько итераций находится решение у тебя и за сколько - в моем варианте...

А вообще тут напрашивается использование repeat/until. Сделал действие, посчитал член последовательности, тут же сравнил его с погрешностью. Если не надо считать дальше - вышел, не начиная следующую итерацию цикла. Вот так я делал: http://volvo71.narod.ru/faq_folder/math.htm#taylor_ln

Автор: dim0n 11.06.2011 20:27


А можете написать полностью программу от начала,до конца? Я просто не могу понять что и куда писать? Буду очень благодарен

Автор: IUnknown 11.06.2011 20:39

Зачем от начала до конца? Вот основа:

    write('x='); readln(x);
write('e='); readln(e);
s:=0;
n:=1;
a:=1;
repeat
a := a * (x-1) / x;
s := s + a/n;
n := n+1;
until a / n < e;
, дальше выводи что тебе нужно... Сумма посчитана, номер члена, который меньше погрешности - тоже.

Автор: dim0n 11.06.2011 21:07

блин,всё равно въехать не могу:-( я не знаю как сама задача решается и поэтому обратился на этот форум. Мне просто нужен код программы от program до end.