Функция Power в Паскале (и многих других языках программирования) выполняет возведение числа в степень.
Синтаксис для вещественных чисел:
function Power(Base: Double; Expon: Double) : Double;
Синтаксис для целых чисел:
function Power(Base: LongInt; Expon: LongInt) : LongInt;
Эта функция возводит число Base в степень Expon и возвращает результат. В реальности функция возвращает результат выражения:
Всё, что сказано выше, взято из официальной документации FreePascal. Однако документация иногда расходится с действительностью. Во всяком случае, мой компилятор не соответствует документации. А именно:
- В документации сказано, что функция объявлена в модуле SYSTEM. Однако без подключения модуля MATH компилятор выдаёт ошибку. Из этого следует, что на самом деле функция объявлена в модуле MATH.
- В документации приведён синтаксис как для целых, так и для вещественных чисел. Однако на самом деле функция работает только с вещественными числами. При попытке использовать целые числа компилятор также выдаёт ошибку.
- Возможно, в более новых версиях эти проблемы уже исправлены. Но у меня было именно так (версия FPC 3.0.0).
Пример использования функции Power
Пример приведён ниже:
Здесь мы число 2 (переменная Х) возводим в степень 3 (переменная Y), то есть вычисляем следующую формулу:
Обратите внимание на подключенный модуль MATH.
Эта статья входит в раздел о подпрограммах модуля SYSTEM. И по идее описания функции Power здесь не должно быть. Но, так как в документации сказано, что функция Power объявлена в модуле SYSTEM, я решил включить данную статью именно в этот раздел (я же не виноват, что в документации косяк))).
Возведение в степень в Паскале
Возведение в степень в Паскале можно выполнить и без какой-то специальной функции, используя функцию вычисления натурального логарифма и функцию вычисления экспоненты. О том, как это сделать, я рассказал здесь.
Однако, если есть специальная функция для возведения числа в степень, то почему бы ей и не воспользоваться? С одной стороны. С другой стороны — эта функция совершенно неожиданно требует подключения модуля MATH.
В документации сказано, что по сути функция Power работает по формуле возведения в степень в Паскале:
Однако, если мы будем делать именно так, эта формула будет неправильно работать с отрицательными числами, потому что в документации сказано, что функция Ln работает только с положительными числами.
Так что функция Power в реальности несколько сложнее, чем приведённая выше формула.
Поэтому для разминки мы напишем свой аналог функции Power, который будет работать правильно. Но для начала вспомним как вычисляется степень числа:
Также напомню, что любое число в нулевой степени равно 1, а ноль в любой степени равен 0 (кроме нуля в нулевой — ноль в нулевой степени не определён, но мы будем возвращать в таких случаях ноль, хотя функция Power возвращает 1).
А теперь наш аналог функции Power:
Я сознательно немного всё усложнил, чтобы вас запутать )))
Пример использования функций Power и её аналога в программе:
Здесь есть один подвох — если вы попытаетесь возвести отрицательное число в не целую степень, например, так:
то стандартная функция Power вызовет ошибку во время выполнения программы. В своём аналоге я этого избежал, но надо понимать, что результат в этом случае будет неправильным (хотя с моей точки зрения это всё-равно лучше, чем аварийное завершение программы).
Это происходит потому, что при таком раскладе результатом являются комплексные числа, а операции с комплексными числами выполняются по другим правилам.
В реальных программах подобные ситуации надо дополнительно обрабатывать (хотя бы предупреждать пользователя о том, что при отрицательном основании и не целой степени функция вернёт неправильный результат).
Ещё в моей функции используется функция Odd, о которой я ещё не рассказывал. Вкратце скажу, что она определяет, является ли число чётным. Более подробно о ней расскажу в отдельной статье.
Задача
Как на языке Pascal возвести число в степень.
Решение
Алгоритм решения задачи:
Чтобы возвести число в степень, его надо умножить само на себя количество раз, равное показателю степени. Т.е. возведение числа n в степень d будет выглядеть так:
n d = n1 * n2 * n3 * … * nd, где индексы внизу просто указывают очередное по счету n.
Если d равно нулю, то, какое бы число не стояло в основании степени, результат всегда будет равен единице:
Если показатель степени отрицателен (d Добавить комментарий
Как на языке Паскаль записать выражение a^b
(возведение в степень)
2013-02-12 13:13:12 — Валентина Семеновна Ушакова var num, deg: integer; способ 1: |
res: real;
i: byte;
begin
write (`Число: `); readln (num);
write (`Степень: `); readln (deg);
res := power(num,deg);
writeln (res:10:5);
end.
program MOE;
var
m,n,st:longint;
function pow(a,x:longint):longint;
var
t,i:longint;
begin
t:=a;
for i:=1 to x-1 do
t:=ta;
pow:=t;
end;
begin
writeln(`введите основание: `);
readln(m);
writeln(`введите показатель: `);
readln(n);
st:=pow(m,n);
writeln(`результат: `,st);
end.
способ 3 (http://pas1.ru/degreecycle)
var
num, deg: integer;
res: real;
i: byte;
begin
write (`Число: `); readln (num);
write (`Степень: `); readln (deg);
res := 1;
i := 0;
while i `меньше` abs(deg) do begin
res := res `умножить` num;
i := i + 1
end;
if deg `меньше` 0 then
res := 1 / res;
writeln (res:10:5);
readln
end.
«>