Помощь - Поиск - Пользователи - Календарь
Полная версия: Вычисление корня p-той степени
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
moldis
Помогите с задачей, вроде задача легкая, а голову как заступорило. smile.gif

Составить программу pRoot(x,p,eps), которая вычисляет значение корня p-той степени из x с заданной абсолютной погрешностью eps, используя рекуррентную формулу:
y0 = x
yn+1 =(1/p)*(yn*(p-1)-x/yn(p-1))
В функции должна быть предусмотрена возможность извлечения корня нечетной степени из отрицательного числа.

Lapp
Цитата(moldis @ 23.03.2009 13:10) *
вроде задача легкая, а голову как заступорило. smile.gif
...
используя рекуррентную формулу:
y0 = x
yn+1 =(1/p)*(yn*(p-1)-x/yn(p-1))

Знаешь, нечестно называть легкими задачи, которые ты не можешь решить - в этом есть явное логическое противоречие. Другие могут называть - если могут сделать..

Кроме того, нечестно давать задачи с неверными условиями - ты заставляешь тех, кто тебе пытается помочь и верит написанному (well, at first), терять время зря. Верная формула:

y0 = x
yn+1 =(1/p)*(yn*(p-1)+x/yn^(p-1))

Заметь неправильный знак и пропущенную степень (выделено красным).

Теперь по решению. Собственно, вот оно.. Спасибо за внимание.
function RootP(p: integer; x,e: double): double;
var
y,y1: double;
Neg: boolean;

procedure Yn;
begin
y1:=(1/p)*(y*(p-1)+x/Exp(Ln(y)*(p-1)));
if Abs(y1-y)>e then begin
y:=y1;
Yn
end
end;

begin
Neg:= (x<0) and Odd(p);
if Neg then x:=-x;
y:=x;
Yn;
if Neg then y1:=-y1;
RootP:=y1
end;

begin
WriteLn(RootP(3,-64,0.1))
end.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.