Возведение числа в степень
Написать программу на языке Pascal, которая возводит число в целочисленную степень. Число и степень вводятся с клавиатуры.
Чтобы возвести число в степень, его надо умножить само на себя количество раз, равное показателю степени. То есть возведение числа n в степень d будет выглядеть так:
где индексы внизу просто указывают очередное по счету n .
Если d (степень) равна нулю, то какое бы число не стояло в основании степени, результат всегда будет равен единице:
В примере программы на языке Паскаль количество итераций (повторений) цикла равно модулю показателя степени числа (переменная deg ).
Если значение deg равно нулю, то цикл не выполнится ни разу. В результате переменная res будет содержать значение 1.
Если задан отрицательный показатель степени, то нужно разделить единицу на значение переменной res .
Программа на языке Паскаль:
var deg: integer; num, res: real; i: byte; begin write('Число: '); readln(num); write('Степень: '); readln(deg); res := 1; for i := 1 to abs(deg) do res := res * num; if deg < 0 then res := 1 / res; writeln(res:10:3); end.
Примеры выполнения программы:
Число: -3.2 Степень: 3 -32.768
Число: 5 Степень: -2 0.040
Вариант программы ниже позволяет возводить неотрицательное число в дробную степень:
var num, deg: real; res: real; begin write('Число: '); readln(num); write('Степень: '); readln(deg); res := exp(num * LN(deg)); writeln(res:10:3); end.
Число: 3.2 Степень: 2.9 30.177
Возведение в степень
Возведение в степень
Здравствуйте, помогите пожалуйста решить задачу: возвести в степень n число n,где n<=100.
Возведение в степень.
Уважаемые программисты напомните, пожалуйста, как в Паскале написать программу возведения числа X в.
Возведение в степень
Пожалуйста помогите написать выражение: ((e в степени (2x-6))-1)/((x*x)-(2*x)-3) , при x<-1. Уменя.

Возведение в степень
Задание Найти сумму Y=F1(x)/F2(x), где a<=x<=b, x менятется с шагом h=c. Задано.
Как возвести в степень в паскале
Вопросы «возвденеие в степень pascal» или «возведение в степень на Паскале» являются наиболее популярными в своей тематике. Не всегда представляется возможным умножать число само на себя (например x := x * x;) в силу динамично изменяющихся параметров задачи, да и при больших показателях степени размер кода может увеличиться во много раз. Кроме того, подобное выражение не предусматривает возможность возведения числа в дробную степень.
Возведение в степень в паскале можно реализовать несколькими способами. Рассмотрим их, установив преимущества и недостатки каждого
Универсальная функция возведения в степень в pascal
Самый эффективный и правильный способ — взятие экспоненты от логарифма Exp(X*Ln(Y)), где X — степень числа, Y — основание. Однако, необходимо учитывать частные случаи когда основание или степень отрицательные числа, либо когда один из них является нулем. Также необходимо учесть тот факт, что при возведении отрицательного числа в четную степень, результат становится положительным
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
Возведение в степень с помощью рекурсии
Аналогично предыдущему итерационному способу. Отличие заключается только в том, что вместо очередного вызова тела цикла используется вызов функции (рекурсия).
Возведение в степень в 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 способ)
Функция 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, о которой я ещё не рассказывал. Вкратце скажу, что она определяет, является ли число чётным. Более подробно о ней расскажу в отдельной статье.
Как возвести в степень в паскале
Nickolay.info. Алгоритмы. Некоторые математические расчёты на Паскале
Как известно, ядро Паскаля предельно компактно, и многие математические функции в модуле System просто отсутствуют. Поэтому у людей, изучающих основы программирования именно на этом языке, типовые математические расчёты зачастую вызывают проблемы. Далее приводятся пути решения наиболее типичных из этих проблем.
Возведение в произвольную степень на Паскале
Требуется вычислить значение с = a b . В зависимости от значений основания a и показателя степени b , вычисление степени может быть реализовано по-разному.
Если a > 0 , а b может принимать произвольные вещественные значения, используем известную формулу a b = exp (b * ln a) :
Если b — целое число (вообще говоря, «не слишком большое» по модулю), а a — любое (не равное нулю при b < 0 ), возведение в степень может быть реализовано с помощью цикла:
Для целого b и не равного нулю a выгоднее считать с помощью экспоненты и логарифма, не забывая о том, что не существует логарифмов от отрицательных чисел:
Вычисление корня произвольной степени на Паскале
Стандартная функция sqrt умеет извлекать только квадратный корень.
Вычисление логарифмов на Паскале
Стандартная функция ln вычисляет только натуральный логарифм. Для вычисления логарифмов по другим основаниям можно применить формулу log a b = ln b / ln a :
В частности, для вычисления десятичного логарифма lg b можно записать:
Вычисление обратных тригонометрических функций (арксинусов и арккосинусов) на Паскале
В Паскале имеется стандартная функция arctan для вычисления арктангенса.
Другие обратные тригонометрические функции могут быть выражены через неё с помощью формул тригонометрии.
на практике следует помнить о возможных погрешностях при сравнении вещественных чисел (глава учебника, п.7.2).
Вычисление полярных углов на Паскале
Полярным углом точки с координатами (x,y) , отличной от начала координат, называют угол между положительным направлением оси Ox и направлением из начала координат на данную точку. При этом угол отсчитывается против часовой стрелки. Строго говоря, полярный угол не всегда равен arctg (y/x) , это верно лишь при x > 0 . Кроме того, при делении большого значения y на малое x возможно переполнение. Показанная ниже функция вычисляет полярный угол fi , лежащий в промежутке от -pi до +pi , для любой точки с координатами (x,y) , не совпадающей с началом координат:
Проблема с приведением типов на Паскале
Начинающие «паскалисты» нередко не понимают строгой типизированности этого языка, из-за чего находят в нём несуществующие «баги». Вот простейший пример.
Эта программа выдаст отнюдь не 200000, как может показаться. Ответ будет равен 3392 (результат переполнения). Никакого бага нет. Тип выражения в Паскале определяется только типом входящих в него переменных, но не типом переменной, куда записывается результат. То есть, мы вычислили с переполнением произведение двух переменных типа Integer , а потом «испорченный» результат переписали в переменную типа Longint . ничего не изменит и
Здесь тоже сначала вычислен результат с переполнением, затем преобразован к типу Longint . А вот
рулит, получите свои 200000 Указанная ошибка часто встречается в программах начинающих. Чтобы её не повторять, помните — выражение в Паскале должно быть приведено к нужному типу в процессе его вычисления, а не после его окончания или при присваивании.
Похожие публикации:
- Как png перевести в pdf
- Как автоматически установить драйвера на windows 7
- Как арабские цифры перевести в римские
- Как быстро конвертировать raw в jpeg
Как возвести в степень в паскале
Помогите срочняк.
Как возвести число (любое) в степень. Число дано заранее, а степень вводится с клавиатуры пользователем. Заранее большое спасибо!
Участник клуба
Регистрация: 29.10.2006
Сообщений: 1,972
Если степень целая и положительная, то обычным циклом:
//x - Ваше число (integer, real)
//N - степень (integer)
//S - здесь будет результат (integer, real)
//i - счётчик (integer)
S:=1;
for i:=1 to N do S:=S*x;
Регистрация: 22.05.2007
Сообщений: 9,507
выведи формулу через Exp и ln
Форумчанин
Регистрация: 16.04.2007
Сообщений: 298
X^Y = exp(ln(X) * Y)
Не надо ничего усложнять. Все достаточно тривиально.
Регистрация: 07.04.2007
Сообщений: 7
А если число, которое нужно возвести в степень отрицательное? И формула примерно выглядит так:
сумма при k равном от 1 до n (((-1)^k)*(n/((k+1)*(k+2)))
в файле оформленно как в Worde выглядит, если непонятно.
Последний раз редактировалось LORD-BY; 03.07.2007 в 23:06 .
Форумчанин
Регистрация: 31.05.2007
Сообщений: 486
В модуле Math есть функция
function Power(const Base, Exponent: Extended): Extended;
которая возводит любое число в любую степень.
E := StrToFloatDef(Edit.Text, 1); // Если число введено неверно, то вернет 1
X := Power(Число, E);
Регистрация: 07.04.2007
Сообщений: 7
Сообщение от Jeni
В модуле Math есть функция
function Power(const Base, Exponent: Extended): Extended;
которая возводит любое число в любую степень.
E := StrToFloatDef(Edit.Text, 1); // Если число введено неверно, то вернет 1
X := Power(Число, E);
мне нужно на Паскале, а не на Delphi
Регистрация: 22.05.2007
Сообщений: 9,507
Сообщение от LORD-BY
А если число, которое нужно возвести в степень отрицательное? И формула примерно выглядит так:
сумма при k равном от 1 до n (((-1)^k)*(n/((k+1)*(k+2)))
в файле оформленно как в Worde выглядит, если непонятно.
это типа минус один в степень надо возвести чтоли? не проще ли проверять k на четность и подставлять 1 или -1 соответственно?
Пользователь
Регистрация: 01.12.2008
Сообщений: 27
В степень говорите. это так чтоли . A^B . ну IF так Then смотрите .
Program Voz_v_stepen_of_DannerDOS; Uses crt; Var chisl, stepen:Real; Function stn(Var chislo, stepen:Real) of Real; Var per:real; Begin Per:= Abs(chislo); If chislo < 0 Then Pow:= (-1)*Exp((stepen)*Ln(per)) Else Pow:= Exp((stepen)*Ln(per)); end; Begin clrscr; Write('Введите число = '); readln(chisl); Write('Введите степень = '); readln(stepen); Writeln('Возведя в степень получаем = ',stn); readln; readln; End.
- будут вопросы обращайтесь!
Там если что под себя отредактировать можно.
Последний раз редактировалось SuperVisor; 09.12.2008 в 21:51 .
Регистрация: 24.12.2008
Сообщений: 1
а не могли бы помочь в свозведением в степень большого числа,которое не влезет не в один тип.
| Страница 1 из 4 | 1 | 2 | 3 | 4 | Следующая > |
| Похожие темы | ||||
| Тема | Автор | Раздел | Ответов | Последнее сообщение |
| Возведение числа в степень | Roberto | Помощь студентам | 9 | 05.04.2008 09:50 |
| Возведение в степень | Stanislav | Общие вопросы Delphi | 10 | 05.12.2007 23:34 |
| Возведение в степень. | Sota | Общие вопросы C/C++ | 7 | 18.07.2007 17:05 |
| Задачи по массивам + возведение действительного числа в действительную степень | springgirl | Помощь студентам | 2 | 24.04.2007 03:26 |
| Delphi Возведение в степень | Luska | Помощь студентам | 6 | 23.04.2007 17:51 |
