[Batch] ayuda!! Elevar un Numero a una Potencia

Iniciado por darkgx, 15 Diciembre 2009, 19:37 PM

0 Miembros y 1 Visitante están viendo este tema.

darkgx

Hola estoy haciendo un code que eleva numero a una determinada potencia... no me quiere salir. bueno este es el code que tengo hasta ahora.  :-\

Lo que quise hacer fue lo sigiente... Hacer un bucle y que se repita la cantidad de veces que la potencia que eligio el usuario y se imprima en un archivo .txt el numero que quiere elevar el usuario, la misma cantidad que se hizo el bucle. osea...
Si el usuario quiere elevar 2^8 entonces se va a hacer una repeticion en un bucle 8 beces y se va a imprimir 8 veces el numero 2. al final se verifica si se hizo 8 veces (osea "if %a%==8 (goto elevar) else goto loop), lo veran mejor en el code.

Despues de esto con FOR revisa el archivo log.txt y va multiplicando el numero linea por linea con un bucle osea.. 5*5 =25 despues queria hacer que se guarde ese numero y en el segundo bucle hacer 25*5=125. lo intente haciendo
set /a mult=mult * %%_
despues que se imprima el resultado en un archivo .txt...


@echo off
title Elevar Potencia - By Darkgx

:loop
REM GUARDAMOS LA CANTIDAD DE NUMEROS DENTRO DE UN ARCHIVO .TXT
echo 5 >> log.txt
set /a a=a + 1
echo %a%

pause > nul
if %a%==5 (goto elevar) else goto loop
goto loop

:elevar
set /a b=b + 1
for /f "skip=%b%" %%_ in (log.txt) do (
set /a mult=mult * %%_
goto:next:
)
:next:
if %b%==5 (goto finish) else goto elevar

:finish
echo %mult% >> resultado.txt
pause > nul
exit

s
e que lo que esta mal es que se hace 0*5 =0 y por eso no sale pero tambien intente hacer esto y tampoco salio.

@echo off
title Elevar Potencia - By Darkgx

:loop
set five=5
REM GUARDAMOS LA CANTIDAD DE NUMEROS DENTRO DE UN ARCHIVO .TXT
echo 5 >> log.txt
set /a a=a + 1
echo %a%

pause > nul
if %a%==5 (goto elevar) else goto loop
goto loop

:elevar
set /a b=b + 1
for /f "skip=%b%" %%_ in (log.txt) do (
set /a mult=%five% * %%_
goto:next:
)
:next:
if %b%==5 (goto finish) else goto elevar

:finish
echo %mult% >> resultado.txt
pause > nul
exit

tambien lo puse sin los % a five y da lo mismo. Creo que la idea esta bien.. pero no sale xD.

Bueno espero que me puedan ayudar... Gracias de antemano! ;D

Darkgx

leogtz

A ver, a ver, para elevar un número A a la potencia B, solo debes de hacer:
a * a, multiplicado un número de veces B.

Cuando vas a hacer un productorio siempre se inicializan a 1, no a 0, esto para evitar multiplicar siempre por 0 y que te de 0.

Mira esto:

Código (dos) [Seleccionar]
@echo off
:: pow(a, b) = a * a ... multiplicado el numero de veces b.
:code
set /p "base=Base : ";
if not defined base (goto:code)
:_code:
set /p "potencia=Potencia : ";
if not defined potencia (goto:_code)
set /a "producto=1"
for /l %%_ in (1, 1, %potencia%) do (
set /a "producto*=base"
)
echo pow(%base%, %potencia%) = %producto%
exit /b 0


Ejecución:

C:\>code
Base : 2
Potencia : 3
pow(2, 3) = 8

C:\>code
Base : 4
Potencia : 4
pow(4, 4) = 256

C:\>code
Base : 7
Potencia : 8
pow(7, 8) = 5764801

C:\>
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

darkgx

Genial!!  :o Yo me estaba complicando mucho y fue tan sencillo. La unica parte del code es esta
Código (dos) [Seleccionar]
"producto*=base"

No entiendo que hace ese * (multiplicacion)..  es lo unico que no entiendo, no entiendo, que hace detras del =? . Espero tu respuesta Leo Gutierrez.

en realidad lo queria hacer solo pero despues de intentar varias cosas me rendi  :-(

Muchas gracias  ;-)

leogtz

Es como decir :
set /a "producto=producto * base"

Esta es la forma resumida:
set /a "producto*=base"

Se multiplica "producto por base" y lo que resulte se asigna a producto.
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com