Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как возвести целое число в n-ую степень в Pascal? [D7, XP]


Б ©   (2009-12-09 13:17:00) 

Здрасти!

Изучаем значит Pascal.
И споткнулся я об следующее:
Как возвести целое число в n-ую степень в Pascal?
Конечно, можно написать процедуру возведения через цикл. Но
думаю есть более красивое решение. ;)


RWolf   (2009-12-09 16:14:00) [1]


> oleg1963lora   (09.12.09 15:11) [17]

за чем дело стало?
рисуем арифметику с неограниченной разрядностью и возводим.


Sha   (2009-12-09 16:06:00) [2]

арифметики достаточно


Thrashead   (2009-12-09 15:49:00) [3]

oleg1963lora,
есть вариант с использованием строк.


oleg1963lora   (2009-12-09 15:11:00) [4]

Кстати, я несколько лет назад столкнулся с тем, что мне нужно было
возвести число 73 в 617-ю степень. Месяц ходил котом вокруг миски, но так и не решил. Тут кажется высшей математикой пахнет.Или нет?


Б   (2009-12-09 14:37:00) [5]


> MBo ©   (09.12.09 14:36) [15]
> вся функция в одну строчку
>
> ln(1+x)
>
> ;)


В задачи так и написано, найдите и сравните. ;)


MBo   (2009-12-09 14:36:00) [6]

вся функция в одну строчку

ln(1+x)

;)


Thrashead   (2009-12-09 14:25:00) [7]

без Power:

a^b = Exp(b*Ln(a))


MBo   (2009-12-09 14:00:00) [8]

Я не в то место множитель +-1 воткнул.

Res:= Res +  ((i and 1) * 2 - 1) *Power(x, i ) / i ;

Однако такие вещи лучше в настоящих программах не писать, т.к. читается и понимается плохо.

А вообще по задаче видно, что степени вычисляются последовательно, поэтому Power здесь никакой и не нужен.


RWolf   (2009-12-09 13:59:00) [9]


> А я накатал следующее "прзвденье".

а чем не устроило простое присвоение?

For i:= 1 to n do begin
 y:=Power(x, i) / i;   
 If even(i) then y:=-y;
  Res:= Res + y;
end;


RWolf   (2009-12-09 13:57:00) [10]


>  Res:= Res + Power(x, i * ((i and 1) * 2 - 1)) / i ;

Наверно, всё-таки
Res:= Res + ((i and 1) * 2 - 1) * Power(x, i ) / i ;


Б   (2009-12-09 13:55:00) [11]


> Res:= Res + Power(x, i * ((i and 1) * 2 - 1)) / i ;


Спасибо.

А я накатал следующее "прзвденье".


 Function XFunc(B: boolean): integer;
 begin
   If B then Result:=  1
   else      Result:= -1;
 End;
 
 For i:= 1 to n do
     Res:= Res + Power(x, i) / XFunc(odd(i)) * i;
 


Б   (2009-12-09 13:53:00) [12]


> в 2006 там и паскальная версия закомментированная, про 7
> не знаю


Точно. Надо было выше взглянуть. ;)


MBo   (2009-12-09 13:52:00) [13]

Res:= Res + Power(x, i * ((i and 1) * 2 - 1)) / i ;


MBo   (2009-12-09 13:50:00) [14]

>Асм не разрешат
в 2006 там и паскальная версия закомментированная, про 7 не знаю


Б   (2009-12-09 13:43:00) [15]

Ещё небольшой вопросик:


 For i:= 1 to n do
   If odd(i) then Res:= Res + Power(x, i) / i     // +
   else              Res:= Res - Power(x, i) / i;    // -



Как бы записать этот кусок так, чтобы  Res:= Res (?) Power(x, i) / i повторялось 1 раз? Т.е. в данном примере выражение дублируется 2 раза, а как разписать одним.


Б   (2009-12-09 13:41:00) [16]


> заглянуть в исходники IntPower в Math и использовать тамошний
> красивый алгоритм


Асм не разрешат. ;)


MBo   (2009-12-09 13:38:00) [17]

заглянуть в исходники IntPower в Math и использовать тамошний красивый алгоритм


Б   (2009-12-09 13:35:00) [18]


> clickmaker ©   (09.12.09 13:18) [1]
> Power


О, спасибо.


>
> Рекурсией :)


Это ж ужОс! ;)


Рамиль   (2009-12-09 13:21:00) [19]


> думаю есть более красивое решение. ;)

Рекурсией :)


clickmaker   (2009-12-09 13:18:00) [20]

Power


Наверх

Титульная страница Поиск, карта сайта Написать письмо