Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.01.31;
Скачать: CL | DM;

Вниз

Как возвести целое число в n-ую степень в Pascal?   Найти похожие ветки 

 
Б   (2009-12-09 13:17) [0]

Здрасти!

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


 
clickmaker ©   (2009-12-09 13:18) [1]

Power


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


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

Рекурсией :)


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


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


О, спасибо.


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


Это ж ужОс! ;)


 
MBo ©   (2009-12-09 13:38) [4]

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


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


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


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


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

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


 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 раза, а как разписать одним.


 
MBo ©   (2009-12-09 13:50) [7]

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


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

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


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


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


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


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


> 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;
 


 
RWolf ©   (2009-12-09 13:57) [11]


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

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


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


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

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

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


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

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

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

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

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


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

без Power:

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


 
MBo ©   (2009-12-09 14:36) [15]

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

ln(1+x)

;)


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


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


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


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

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


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

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


 
Sha ©   (2009-12-09 16:06) [19]

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


 
RWolf ©   (2009-12-09 16:14) [20]


> oleg1963lora   (09.12.09 15:11) [17]

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



Страницы: 1 вся ветка

Текущий архив: 2010.01.31;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.008 c
15-1258925416
Юрий
2009-11-23 00:30
2010.01.31
С днем рождения ! 23 ноября 2009 понедельник


2-1260428642
Deniskov
2009-12-10 10:04
2010.01.31
Как получить расшифровку логина WIndows


15-1259264658
Игорь Шевченко
2009-11-26 22:44
2010.01.31
Наука нанотехнологий на марше!


1-1235866689
Misha Uskov
2009-03-01 03:18
2010.01.31
Просмотр JPEG с нестандартным EXIF IFD


15-1259162313
Кто б сомневался
2009-11-25 18:18
2010.01.31
Завести почту на google