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

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

  • автор:

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

Написать программу на языке 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

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

А если число, которое нужно возвести в степень отрицательное? И формула примерно выглядит так:

сумма при 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

Функция Power

Основы программирования 2.0

Функция 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

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

program funcpower; uses Math; var x, y, z : single; begin x := 2; y := 3; z := Power(x, y); //Z = X в степени Y WriteLn(z:0:2); ReadLn; end.

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

Z = X Y

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

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

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

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

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

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

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

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

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

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

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

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

function AVPower(Base: Double; Expon: Double) : Double; var m : byte; i : integer; Res : Double; begin m := 0; if Expon < 0 then m := 1 //Отрицательная степень else if Expon = 0 then m := 2 //Нулевая степень else m := 3; //Положительная степень if Base < 0 then m := 10 + m //Отрицательное число else if Base = 0 then m := 20 + m //Число равно 0 else m := 30 + m; //Положительное число case m of 11 : //Отрицательное число, отрицательная степень begin //Если Expon - не целое число, то получаются комплексные числа Res := 1 / Exp(Abs(Expon) * Ln(Abs(Base))); i := Round(Expon); if Odd(i) then Res := -1 * Res; end; 12, 32 : //Нулевая степень Res := 1; 13 : //Отрицательное число, положительная степень begin //Если Expon - не целое число, то получаются комплексные числа Res := Exp(Expon * Ln(Abs(Base))); i := Round(Expon); if Odd(i) then Res := -1 * Res; end; 21..23 : //Число равно нулю Res := 0; 31 : //Положительное число, отрицательная степень Res := 1 / Exp(Abs(Expon) * Ln(Base)); 33 : //Положительное число, положительная степень Res := Exp(Expon * Ln(Base)); end; AVPower := Res; end;

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

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

x := 2; y := 3; z := Power(x, y); //Z = X в степени Y WriteLn(z:0:2); z := AVPower(x, y); //Z = X в степени Y WriteLn(z:0:2);

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

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

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

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

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

операция возведения в степень

20.05.23. На странице https://pascalabc.net/stepikcourse опубликованы новые курсы по PascalABC.NET от центра олимпиадного программирования DL Club.

08.05.23. Вышла версия PascalABC.NET 3.9.0.beta. Основное - ковариантные параметры обобщений, аргументы по умолчанию при вызове подпрограммы, модуль автоматической проверки LightPT.

22.02.23. Открыта регистрация на конференцию «Использование системы программирования Pas​cal​ABC​. NET в обучении программированию»

Copyright © Ivan Bondarev, Stanislav Mihalkovich 2024 All rights reserved. Custom Design by Youjoomla.com

Случайная программа

// Сумма длин всех слов в строке
// Уровень сложности: 1
var s := 'Каждый Охотник Желает Знать Где Сидит Фазан';

begin
writeln(s.ToWords.Select(s->s.Length).Sum);
end.

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

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