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

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

Форум «Всё о Паскале» _ Задачи _ корень нечетной степени

Автор: sheka 4.06.2009 4:07

как добыть корень нечетной степени?

я пробовал разложить нечетную степень через четные, но ничего не получается.( например 7 степени)

Автор: volvo 4.06.2009 4:12

Что значит "не получается"? Возводить в степень 1/7, например, пробовал?

Автор: sheka 4.06.2009 4:31

Цитата(volvo @ 4.06.2009 0:12) *

Что значит "не получается"? Возводить в степень 1/7, например, пробовал?

это как? из этой темы знаю есть sqr, sqrt.

Автор: Lapp 4.06.2009 4:39

Цитата(sheka @ 4.06.2009 1:31) *
это как? из этой темы знаю есть sqr, sqrt.
Еще есть Exp(x) и Ln(x) из той же темы)).
Знаешь такие функции и формулы для них?

Автор: sheka 4.06.2009 4:54

Цитата(Lapp @ 4.06.2009 0:39) *

Еще есть Exp(x) и Ln(x) из той же темы)).
Знаешь такие функции и формулы для них?

что такое логарифм когда-то слышал, но причем тут натуральный? а что такое экспонента - название знаю.
если можешь вкратце сказать - скажи, нет - я почитаю, потом спрошу.

Автор: Lapp 4.06.2009 5:15

Натуральный при том, что именно он есть в стандартной библиотеке. Ко всему прочему, именно он напрямую связан с экспонентой (а точнее, является обратной функцией к ней).

Цитата(sheka @ 4.06.2009 1:54) *
если можешь вкратце сказать - скажи
Могу и вкратце, если хочешь.

exp(x) <=> ex

a = eLn(a)

ax = (eLn(a))x = eLn(a)*x = exp(Ln(a)*x)

Автор: evg 31.05.2010 22:03

Цитата(Lapp @ 4.06.2009 2:15) *

Натуральный при том, что именно он есть в стандартной библиотеке. Ко всему прочему, именно он напрямую связан с экспонентой (а точнее, является обратной функцией к ней).
Могу и вкратце, если хочешь.

exp(x) <=> ex

a = eLn(a)

ax = (eLn(a))x = eLn(a)*x = exp(Ln(a)*x)

подскажите, почему по учебной программе,мне при вводе sgrt(пробовал и sgr) выходит ошибка индификатора

Автор: volvo 31.05.2010 22:35

Потому что не SGRT, а SQRT

Автор: evg 1.06.2010 2:12

Цитата(volvo @ 31.05.2010 19:35) *

Потому что не SGRT, а SQRT

Спасибо.Говорила мама учи английский.Попался на написании прописных.

Автор: sheka 6.09.2010 23:58

а если основа отрицательная, то просто проверять условием? и потом доумножать на -1 ?

Автор: volvo 7.09.2010 1:27

Цитата
а если основа отрицательная, то
любой нормальный компилятор выбросит исключение (в частности, FPC выбрасывает EInvalidArgument). Дельфи - EInvalidOp... А теперь подумай, что, не могли авторы предусмотреть такой простой вещи, как
Цитата
проверять условием? и потом доумножать на -1 ?
? Или, может, по другой причине не стали реализовывать данный функционал?

Автор: sheka 7.09.2010 2:16

Честно, я вообще не могу понять, почему авторы не могли предусмотреть функции поднесения в степень. Разве что в определенных случаях это может кому-нибудь навредить, хотя я не представляю кому и чем.
Вот думал сделать так:

if x <> 0 then znam := exp(ln(abs(x))/3);
if x < 0 then znam := -znam;

но не понимаю, чем это Вам не нравится.
К чему вы клоните? smile.gif к тому, что это надо делать исключениями? Ну в таком случае, почему-то ФП слово try распознает как переменную:
  try
znam := exp(ln(x)/3);
except
on EinvalidArgument do znam := exp(ln(-x)/3);
on EZeroDivide do znam := 0;
end;

Автор: volvo 7.09.2010 2:39

Цитата
не понимаю, чем это Вам не нравится.
Мне? Да я вообще ничего про себя не говорил. Я говорил о том, что в компиляторах, более продвинутых чем Турбо Паскаль, этого функционала НЕТ. Это констатация факта, и призыв подумать над тем, почему его нет. А не изобретать велосипед.

Цитата
это надо делать исключениями? Ну в таком случае, почему-то ФП слово try распознает как переменную:
Вообще-то надо добавлять "у меня". Вот нормально настроенный FPC - не воспринимает:
Прикрепленное изображение

Кстати, здесь выбрасывается EInvalidOp, потому что нельзя вычислять логарифм от отрицательного значения. А вот использование Math.Power выбросит именно EInvalidArgument...

А вообще, надо бы использовать модуль Math, там уже есть функция Power. Зачем понадобилось переписывать вручную - непонятно.

Автор: sheka 7.09.2010 2:49

Извините за недоходчивость, о каком "данном функционале" идет речь? Вы говорите о том, что вот этим

if x <> 0 then znam := exp(ln(abs(x))/3);
if x < 0 then znam := -znam;
пользуются только на Турбо Паскале, а в более новых компиляторах - исключениями или подключают модуль Math?

Эх.. Начинаю знакомиться с ТП. Вот через месяц начну. А пока выдали лабораторные на семестр. Я открыл первую, вот там задание (чуть упростил) : вывести на экран результат a = 1/КореньКубический(х)

Автор: Lapp 7.09.2010 8:00

Цитата(sheka @ 6.09.2010 23:49) *
Извините за недоходчивость, о каком "данном функционале" идет речь? Вы говорите о том, что вот этим
if x <> 0 then znam := exp(ln(abs(x))/3);
if x < 0 then znam := -znam;

sheka, то, что ты написал - это просто неверно (то есть верно только при многих огворках). И причина не в ограниченности программных средств, а в математике. Тут был топик про отрицательные основания, поищи его. В общем случае операция возведения в степень определена только на комплесных числах, а их аппаратной реализации пока нет. В частном случае целой нечетной степени корня ее выполнение возможно без выхода за пределы действительных чисел (если отбросить остальные значения), но это довольно большая условность. Поэтому реализация данного функционала оставлена пользователю )).

Автор: Lapp 7.09.2010 12:00

вот та тема:
http://forum.pascal.net.ru/index.php?showtopic=15348
Правда, там в самом конце пришел какой-то Пупорев и не разобравшись (наверное, даже и не прочитав) тоже влепил все ту же ошибку, типа он самый умный, чтоб всем "помочь"..

Автор: sheka 7.09.2010 23:57

Спасибо за подробное объяснение!!!
Видно плохо в школе учился. yes2.gif

Ну если вдруг буду сочинять задания сам - никогда такого не придумаю. Но что мне делать если все таки надо посчитать x1/3? Если x<0 выводить "ошибка"? а если х = 0, тогда выводить 0 или тоже "ошибка"?

Автор: TarasBer 8.09.2010 0:39

> как добыть корень нечетной степени?
> Но что мне делать если все таки надо посчитать x1/3?

Сначала определись.

x^(1/3) официально не определён для x < 0
3Vx (типа корень третьей степени я так нарисовал) официально определён для всех вещественных икс, причём 3V(-x)=-3Vx.
То есть x^(1/3) и 3Vx это разные вещи как бы.

Автор: sheka 8.09.2010 1:30

Вот как-то никогда не думал, что x^(1/3) и 3Vx это разные вещи. good.gif

Автор: Мира 17.09.2013 17:39

помогите пожалуйста срочно!!!! wacko.gif blink.gif
корень в кубе |(x-a)|
как написать это в программе