Как возвести в степень в паскале
Перейти к содержимому

Как возвести в степень в паскале

  • автор:

Функция Power

Функция Power в Паскале (и многих других языках программирования) выполняет возведение числа в степень.

Синтаксис для вещественных чисел:

function Power(Base: Double; Expon: Double) : Double;

Синтаксис для целых чисел:

function Power(Base: LongInt; Expon: LongInt) : LongInt;

Эта функция возводит число Base в степень Expon и возвращает результат. В реальности функция возвращает результат выражения:

  • В документации сказано, что функция объявлена в модуле SYSTEM. Однако без подключения модуля MATH компилятор выдаёт ошибку. Из этого следует, что на самом деле функция объявлена в модуле MATH.
  • В документации приведён синтаксис как для целых, так и для вещественных чисел. Однако на самом деле функция работает только с вещественными числами. При попытке использовать целые числа компилятор также выдаёт ошибку.
  • Возможно, в более новых версиях эти проблемы уже исправлены. Но у меня было именно так (версия FPC 3.0.0).

Пример использования функции Power

Пример приведён ниже:

Здесь мы число 2 (переменная Х) возводим в степень 3 (переменная Y), то есть вычисляем следующую формулу:

Z = X Y

Обратите внимание на подключенный модуль MATH.

Эта статья входит в раздел о подпрограммах модуля SYSTEM. И по идее описания функции Power здесь не должно быть. Но, так как в документации сказано, что функция Power объявлена в модуле SYSTEM, я решил включить данную статью именно в этот раздел (я же не виноват, что в документации косяк))).

Возведение в степень в Паскале

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

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

В документации сказано, что по сути функция Power работает по формуле возведения в степень в Паскале:

Однако, если мы будем делать именно так, эта формула будет неправильно работать с отрицательными числами, потому что в документации сказано, что функция Ln работает только с положительными числами.

Так что функция Power в реальности несколько сложнее, чем приведённая выше формула.

Поэтому для разминки мы напишем свой аналог функции Power, который будет работать правильно. Но для начала вспомним как вычисляется степень числа:

Возведение в степень

Также напомню, что любое число в нулевой степени равно 1, а ноль в любой степени равен 0 (кроме нуля в нулевой — ноль в нулевой степени не определён, но мы будем возвращать в таких случаях ноль, хотя функция Power возвращает 1).

А теперь наш аналог функции Power:

Я сознательно немного всё усложнил, чтобы вас запутать )))

Пример использования функций Power и её аналога в программе:

Здесь есть один подвох — если вы попытаетесь возвести отрицательное число в не целую степень, например, так:

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

Это происходит потому, что при таком раскладе результатом являются комплексные числа, а операции с комплексными числами выполняются по другим правилам.

В реальных программах подобные ситуации надо дополнительно обрабатывать (хотя бы предупреждать пользователя о том, что при отрицательном основании и не целой степени функция вернёт неправильный результат).

Ещё в моей функции используется функция Odd, о которой я ещё не рассказывал. Вкратце скажу, что она определяет, является ли число чётным. Более подробно о ней расскажу в отдельной статье.

Возведение в степень в паскале

Вопросы «возвденеие в степень 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

if (l mod 2 = 0) then R:=Abs(pow);

if (y = 0) then Pow :=1;

Возведение в степень с помощью цикла

Является одним из самых простых и быстрых способов. Задается цикл от единицы до требуемого показателя, в котором основание складывается с самим собой. Организовать подобный алгоритм можно использовав как for, так и while или repeat.

for i:=1 to pow-1 do

if ((not odd(pow)) and (pow<0)) then x := x * (-1);

Возведение в степень с помощью рекурсии

Аналогично предыдущему итерационному способу. Отличие заключается только в том, что вместо очередного вызова тела цикла используется вызов функции (рекурсия).

Возведение в степень в pascal для целого показателя, вычисляемого за время log2(pow)

Данный алгоритм также, как и два предыдущих работает только с целыми показателями степени. Однако, время затрачиваемое на вычисление существенно сокращается.

function power (x,pow:integer):integer;

var res: integer;

while (pow > 0) do

if (pow and 1 = 1) then res := res * x;

Таким образом, возвести число в степень в паскале с дробным показателем может позволить только универсальная функция возведения в степень. Использование первого способа является наиболее быстродейственным. Это особенно заметно, при больших значениях степени и большого числа знака после запятой. Следует отметить, что помимо перечисленных выше способов существуют и другие алгоритмы реализующие в Turbo Pascal возведение в степень.

Возведение в степень в pascal — Универсальная функция возведения в степень (1 способ)

Функция Power — Простое итерационное вычисление степени с помощью цикла (2 способ)

Рекурсивное возведения числа в степень — Возведение числа в степень с помощью рекурсии (3 способ)

Быстрое возведение в степень в паскале — Алгоритм с вычислением за время log2(pow) (4 способ)

Возведение в степень в Паскале

В процессе изучения любого языка, применяемого при написании ПО, среди актуальных вопросов особое место принадлежит тому, как подносить к определенной степени число. В том случае, если числовые значения конкретной задачи систематически изменяются, выполнять процесс умножения числа самого на себя нецелесообразно. В таком случае нужно ознакомиться с тем, как же можно в Паскале осуществлять поднесение к степени.

Поднесение к степени посредством применения универсальной функции

Для того чтобы применять самый правильный и эффективный метод, необходимо от логарифма взять экспоненту. При этом очень важно учитывать то, когда показатель или основание логарифма выступают отрицательными числами или же нулем. Также стоит помнить о том, что если возведение в степень будет происходить с отрицательным числом, то результат всегда будет положительным.

Возведение в степень в Паскале

Поднесение к степени посредством применения цикла

Самым быстрым и простым способом возведения в степень в языке программирования Паскаль является использование цикла. Задавать его нужно, начиная от единицы и до того показателя, который нужно получить. Для организации такого цикла можно использовать команды repeat, while, так и for.

Возведение в степень в Паскале

Поднесение к степени посредством применения рекурсии

Этот метод используется точно так же, как и предыдущий. Но единственным отличием здесь будет то, что будет применяться специальная функция рекурсии вместо повторного вызова цикла.

Выражения и функции в Паскале.

Так как оператора возведения в степень в Паскале нет, то возводить можно так:

Y=X N

Ln Y=Ln X N

Y=E N*Ln X

Y:=EXP(N*LN(X))

Y:=N*N*…(написать нужное количество N, если их немного)

Создать функцию, например Stepen(X,N), в которой с помощью первого способа вычислить.

Пример 1. Составить программу для вычисления выражения:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *