IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Вычисление корня p-той степени
moldis
сообщение 23.03.2009 13:10
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 11
Пол: Мужской

Репутация: -  0  +


Помогите с задачей, вроде задача легкая, а голову как заступорило. smile.gif

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

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 24.03.2009 5:42
Сообщение #2


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(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.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 18.07.2025 14:48
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"