![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как возвести целое число в 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