Помогите с задачей, вроде задача легкая, а голову как заступорило.
Составить программу pRoot(x,p,eps), которая вычисляет значение корня p-той степени из x с заданной абсолютной погрешностью eps, используя рекуррентную формулу: y0 = x yn+1 =(1/p)*(yn*(p-1)-x/yn(p-1)) В функции должна быть предусмотрена возможность извлечения корня нечетной степени из отрицательного числа.
Lapp
24.03.2009 9:42
Цитата(moldis @ 23.03.2009 13:10)
вроде задача легкая, а голову как заступорило. ... используя рекуррентную формулу: 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 thenbegin
y:=y1;
Yn
endend;
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.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.