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

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

Форум «Всё о Паскале» _ Задачи _ Решение функции.

Автор: Jason 11.01.2006 18:54

Помогите пожалуйста с задачей: для заданных "x" и "E" найти значение встроенной функции и сравнить со значением внешней при "x>1/2". Вот функция:

Код

         k=беск.   (x-1)^k  
Ln(x)= Sum      -------
          k=1              kx




 var x,summ,elem,element,rasn:real; epselon:real; k:word;
begin summ:=0; elem:=1;
writeln('Vvedite epselon');
read(epselon);
write('Vvedite x>=1/2:');
read(x);
elem:=elem*(x-1)/x;
k:=1;
repeat
element:=1/k*elem;
summ:=summ+element;
k:=k+1;
rasn:=Ln(x)-summ;
until rasn<epselon;
writeln('Rasnitsa ravna',rasn);
writeln('Natural log raven',ln(x));
readln;
readln;
end.


Автор: volvo 11.01.2006 19:06

В чем именно проблема? Ты привел код, с ним что-то не в порядке?

Кстати, здесь: http://forum.pascal.net.ru/index.php?s=&showtopic=4535&view=findpost&p=44175
приведены разложения для нескольких стандартных функций...

Автор: Jason 11.01.2006 19:18

Я не знаю верен ли этот код?

Автор: Ozzя 11.01.2006 19:28

Цитата(Jason @ 11.01.2006 15:18) *

Я не знаю верен ли этот код?

Сверь со значением стандартной функции ln(x)

Автор: volvo 11.01.2006 19:45

Цитата
Я не знаю верен ли этот код?
Нет... Ты в коде используешь
rasn:=Ln(x)-summ;
для определения окончания цикла... Этого делать нельзя. Ты должен использовать разность между текущим и предыдущим элементом ряда...

Автор: Jason 11.01.2006 20:18

Подскажи как это сделать?

Автор: volvo 11.01.2006 21:06

var
n: integer;
x, eps, next, s: double;
begin
write('eps = '); readln(eps);
write('x = '); readln(x);

next := (x - 1)/x;
s := next; n := 1;
repeat
inc(n);
next := (next * (x - 1)) / x;
s := s + next/n;
until abs(next/n) < eps;
writeln('my func = ', s, ' ln(x) = ', ln(x));
end.

Только учти, что X должен быть больше 0.5 ...