Возведение в степень в паскале
Вопросы "возвденеие в степень pascal" или "возведение в степень на Паскале" являются наиболее популярными в своей тематике. Не
всегда представляется возможным умножать число само на себя (например x
:= x * x;) в силу динамично изменяющихся параметров задачи, да и при
больших
показателях степени размер кода может увеличиться во много раз. Кроме
того, подобное выражение не предусматривает возможность возведения числа в дробную степень.
Возведение в степень в паскале можно реализовать несколькими способами. Рассмотрим их, установив преимущества и недостатки каждого
Универсальная функция возведения в степень в pascal
Самый эффективный и правильный способ - взятие экспоненты от
логарифма Exp(X*Ln(Y)), где X - степень числа, Y - основание. Однако,
необходимо учитывать частные случаи когда основание или степень
отрицательные числа, либо когда один из них является нулем. Также
необходимо учесть тот факт, что при возведении отрицательного числа в четную степень, результат становится положительным
if (x < 0) then pow := (-1)*Exp(y*Ln(Abs(x))) else
if (x > 0) then pow := Exp(y*Ln(Abs(x))) else
Pow := 0;
l := round(y);
if (l mod 2 = 0) then R:=Abs(pow);
if (y = 0) then Pow :=1;
Возведение в степень с помощью цикла
Является одним из самых простых и быстрых способов. Задается цикл
от единицы до требуемого показателя, в котором основание складывается с
самим собой.
Организовать подобный алгоритм можно использовав как for, так и while
или repeat.
readln(x,pow);
for i:=1 to pow-1 do
x:= x + x;
if ((not odd(pow)) and (pow<0)) then x := x * (-1);
writeln('x^Pow=', x);
Возведение в степень с помощью рекурсии
Аналогично предыдущему итерационному способу. Отличие заключается
только в том, что вместо очередного вызова тела цикла используется вызов
функции (рекурсия).
Возведение в степень в pascal для целого показателя, вычисляемого за время log2(pow)
Данный алгоритм также, как и два предыдущих работает только с
целыми показателями степени. Однако, время затрачиваемое на вычисление
существенно сокращается.
function power (x,pow:integer):integer;
var res: integer;
begin
res := 1;
while (pow > 0) do
begin
if (pow and 1 = 1) then res := res * x;
x := x + x;
pow := pow shr 1;
end;
power := res;
end;
Таким образом, возвести число в степень в паскале с дробным показателем может позволить только
универсальная функция возведения в степень. Использование первого способа является наиболее быстродейственным.
Это особенно заметно, при больших значениях степени и большого числа знака после запятой. Следует отметить,
что помимо перечисленных выше способов существуют и другие алгоритмы реализующие в Turbo Pascal возведение в степень.
Скачать:
Возведение в степень в pascal - Универсальная функция возведения в степень (1 способ)
Функция Power - Простое итерационное вычисление степени с помощью цикла (2 способ)
Рекурсивное возведения числа в степень - Возведение числа в степень с помощью рекурсии (3 способ)
Быстрое возведение в степень в паскале - Алгоритм с вычислением за время log2(pow) (4 способ)
офисная мебель
|