Существует ли функция «Power to» в пакетных файлах?(Экспонент) - PullRequest
3 голосов
/ 10 марта 2011

Проблема

Есть ли способ поместить переменную "в степень" числа или другую переменную в пакетный файл?Существует ли для этого функция?Примером этого может служить Python, где вы можете использовать ** для «в степень».

EDIT

Вы можете выполнять математику в пакетном файле ... http://en.wikipedia.org/wiki/Batch_file

Ответы [ 5 ]

5 голосов
/ 10 марта 2011

Функция power to недоступна в пакетном сценарии, как вы, возможно, уже выяснили из ответов.

Один из вариантов - использовать цикл.Вы можете сделать цикл так, как @ Kirk Broadhurst делал это в прошлый раз, когда ему приходилось делать пакетные сценарии, или вы можете использовать другой способ, который стал доступен с тех пор, или иначе мог остаться незамеченным Кирком:1007 *

:: calculate x^n
SET x=3
SET n=5
SET result=1
FOR /L %%i IN (1,1,%n%) DO SET /A result*=x
ECHO %result%

Другой вариант - использовать подход, описанный в этом ответе.

1 голос
/ 10 марта 2011

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

Базовый алгоритм для x ^ n

result = 1
for (i = 0 ; i < n; i++)
{
    result = result * x;
}

В пакетном файле вам нужно использовать goto операторы, а не реальный цикл.

set result=1
set i=1
:multiply
set /a result=result*x
set /a i=i+1
if %i% lss %n% goto multiply

Это не будет работать для нецелых или отрицательных / нулевых показателей, но вы можете решить это.

0 голосов
/ 07 марта 2019

Вы можете использовать Vbscript:

https://en.wikipedia.org/wiki/VBScript

Вот Ваш код:

   @echo off
   Title Exponention Number
   echo.
   set /p x=Pleas Enter Your Number = 
   echo.
   set /p y=Pleas Enter Your power the Base is raised to  = 
   echo.
   echo WScript.Echo (%x%^^%y%)>a.vbs
   cscript //nologo a.vbs & DEL "a.vbs"
   pause>nul
0 голосов
/ 26 февраля 2019

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

@echo off

CALL :pow 2 3    :: 8
CALL :pow 3 3    :: 27
CALL :pow 5 5    :: 3125
CALL :pow 256 3  :: 16777216

set /p=End of Script, press any key to exit...
GOTO :EOF

:: ----- Call Functions -----
:pow
    SET pow=1
    FOR /L %%i IN (1,1,%2) DO SET /A pow*=%1
    ECHO %pow%
GOTO :EOF

PS Вы также можете поместить «функции» в файлы (например, «pow.bat ", use будет просто" pow nn ") и называть их так, что может быть удобно (особенно если вы начинаете использовать переменную path).Я всегда считал создание многократно используемых функций в Batch самой крутой, но наименее известной «функцией» языка сценариев.Кроме того, вы сможете использовать переменную% pow% в своем скрипте (или назначить ее для другой переменной) до тех пор, пока она не будет перезаписана путем повторного вызова функции.

Последнее, что я хотел бы сделать, этохотя это забавное упражнение, есть ограничение точности для пакета. Я обнаружил, что пакет не может правильно вычислить числа больше 2 ** 31 (ограничение 32 бита).

Best!

0 голосов
/ 24 апреля 2014
@echo off

:start
echo Set the value of the Base 
set x=
set /p x=
echo set the power the Base is raised to 
set n= 
set /p n=
set y=%x%
If %n%==0 goto sol1
If %n%==1 goto solx
set /a n=%n%-1
set p=0

:eloop
set p=%P%
set /a p=%P%+1
set /a y=%y%*%x%
If %P%==%n% goto sol
goto :eloop

:sol1
set y=1
echo %y%
pause
goto :start

:solx
set y=%x%
echo %Y%
pause
goto start

:sol
set y=%y%
echo %y%
pause
goto start

Этот код работает для всех натуральных чисел, вы выбираете основание, затем мощность, на которую основание возводится в него, затем циклически повторяет выражение, добавляя 1 к переменной p, пока она не совпадет с переменной n, умножая x на себя каждый раз, затем давая решение также дает решение% x% для n = 1 и 1 для n = 0.

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