Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: darkgx en 15 Diciembre 2009, 19:37 pm



Título: [Batch] ayuda!! Elevar un Numero a una Potencia
Publicado por: darkgx en 15 Diciembre 2009, 19:37 pm
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
Código:
set /a mult=mult * %%_
despues que se imprima el resultado en un archivo .txt...


Código:
@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.

Código:
@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


Título: Re: [Batch] ayuda!! Elevar un Numero a una Potencia
Publicado por: leogtz en 15 Diciembre 2009, 22:39 pm
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
  1. @echo off
  2. :: pow(a, b) = a * a ... multiplicado el numero de veces b.
  3. :code
  4. set /p "base=Base : !!
  5. if not defined base (goto:code)
  6. :_code:
  7. set /p "potencia=Potencia : !!
  8. if not defined potencia (goto:_code)
  9. set /a "producto=1"
  10. for /l %%_ in (1, 1, %potencia%) do (
  11. set /a "producto*=base"
  12. )
  13. echo pow(%base%, %potencia%) = %producto%
  14. exit /b 0
  15.  

Ejecución:
Código:
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:\>


Título: Re: [Batch] ayuda!! Elevar un Numero a una Potencia
Publicado por: darkgx en 16 Diciembre 2009, 00:33 am
Genial!!  :o Yo me estaba complicando mucho y fue tan sencillo. La unica parte del code es esta
Código
  1. "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  ;-)


Título: Re: [Batch] ayuda!! Elevar un Numero a una Potencia
Publicado por: leogtz en 16 Diciembre 2009, 20:42 pm
Es como decir :
Código:
set /a "producto=producto * base"

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

Se multiplica "producto por base" y lo que resulte se asigna a producto.