elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  duda, elevar una base en su exponente (batch)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: duda, elevar una base en su exponente (batch)  (Leído 11,695 veces)
Darioxhcx


Desconectado Desconectado

Mensajes: 2.294


Ver Perfil
duda, elevar una base en su exponente (batch)
« en: 21 Junio 2008, 16:08 pm »

buenas...
tengo unda duda, va algo asi , no lo puedo hacer u.u
lo que quiero hacer es elevar un numero al exponente
osea, me explico, ej..

set /p num1=escriba su base
set /p num2=escriba su exponente

ahora si x ejemplo elige como base 4 , y exponenete 4
seria facil hacerlo de esta manera
set /a resul=(%num1%*%num2%)*(%num1%*%num2%)

pero si hago esto, con cada numero
1,2,3,4,5,6,7,8,9,10 y asi
voy a hacer el code mas largo de la historia u.u
y estuve pensando y averiguando y no me sale u.u
si alguien me echa una mano
gracias

saludos


En línea

leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
***
Desconectado Desconectado

Mensajes: 3.069


/^$/


Ver Perfil WWW
Re: duda, elevar una base en su exponente (batch)
« Respuesta #1 en: 21 Junio 2008, 17:42 pm »

Hola, en las librerias y funciones estaba lo que estabas buscando, un Script para calcular potencias, de ne0x
Código
  1. :: Autor ne0x
  2. @echo off
  3. set /P BASE=Base :
  4. set /P EXPONENTE=Exponente :
  5. if %BASE%.==. exit 1
  6. if %EXPONENTE%.==. exit 1
  7. set resultado=1
  8. FOR /L %%A IN (1,1,%EXPONENTE%) DO set /A resultado=resultado*BASE
  9. echo Resultado : %resultado%
  10. goto:EOF

Saludos.


En línea

Código
  1. (( 1 / 0 )) &> /dev/null || {
  2. echo -e "stderrrrrrrrrrrrrrrrrrr";
  3. }
  4.  
http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com
carlitos.dll

Desconectado Desconectado

Mensajes: 266



Ver Perfil
Re: duda, elevar una base en su exponente (batch)
« Respuesta #2 en: 21 Junio 2008, 18:14 pm »

El code anterior tiene un error, por ejemplo 2 elevado a -1 es 1/2, no 1.
Aquí te dejo el code que hice recién. No es confiable para números grandes, por ejemplo 800 elevado a 6. Para números pequeños sirve, auque te recomiendo la calculadora de windows, o galculator.

Código:
::CarlitoS
@echo off
setlocal enableextensions
set /a cont=2
:base
set /p base="Base:"
if "%base%" EQU "" (goto base)
set /a base=%base%
:exponente
set /p exponente="Exponente:"
if "%exponente%" EQU "" (goto exponente)
set /a exponente=%exponente%
set /a resultado=%base%

if %base% EQU 0 (if %exponente% EQU 0 (set resultado=ERROR & goto resultado))
if %exponente% GEQ 2 (call :calc & goto resultado)
if %exponente% EQU 1 (set /a resultado=%base% & goto resultado)
if %exponente% EQU 0 (set /a resultado=1 & goto resultado)
if %exponente% LSS 0 (set /a exp=%exponente% & set /a exponente=%exponente% * -1 & set expneg=true)
if "%expneg%" EQU "true" (call :calc & goto resultado)

:calc
if %exponente% EQU 1 (set /a resultado=%base% & goto :EOF)
:calc1
set /a resultado=%resultado%*%base%
set /a cont+=1
if %cont% LEQ %exponente% (goto calc1)
goto :EOF

:resultado
if "%expneg%" EQU "true" (set resultado=1/%resultado%)
if "%expneg%" EQU "true" (set /a exponente=%exp%)
if %resultado% EQU 1/1 (set /a resultado=1)
cls
echo ---------------
echo %resultado%
echo ---------------
echo %base% ^^ %exponente%
pause>NUL
::CarlitoS
« Última modificación: 21 Junio 2008, 18:59 pm por carlitos.dll » En línea

Darioxhcx


Desconectado Desconectado

Mensajes: 2.294


Ver Perfil
Re: duda, elevar una base en su exponente (batch)
« Respuesta #3 en: 21 Junio 2008, 19:58 pm »

gracias seguro que algo voy a sacar
primero voy a entender lso codes despues voy a probarlos xD
gracias nuevamente
saludos
En línea

carlitos.dll

Desconectado Desconectado

Mensajes: 266



Ver Perfil
Re: duda, elevar una base en su exponente (batch)
« Respuesta #4 en: 21 Junio 2008, 22:12 pm »

En realidad no sirve para casi nada ninguno de los dos codes.

Hice una prueba: Puse en la consola:

Código:
set /a numero=9999999999

Y dice:
Número no válido. Los números están limitados a 32 bits de presición.

Entonces con números grandes, se pierde presición, por eso si colocas 10 elevado a 10, en vez de devolverte 10000000000 te devolverá 1410065408, 10 elevado a 9 lo devuelve bien. Se pierde presición al convertir a binario los números grandes, entonces el procesador multiplica por otros números, habría que hacerlo con notación científica.

Ejemplo: con 32 bits el número máximo en decimal es 2147483647 que en binario es 1111111111111111111111111111111

Si a ese número le sumas 1 te queda en decimal 2147483648 que en binario es 33 bits 10000000000000000000000000000000.
En línea

Novlucker
Ninja y
Colaborador
***
Desconectado Desconectado

Mensajes: 10.683

Yo que tu lo pienso dos veces


Ver Perfil
Re: duda, elevar una base en su exponente (batch)
« Respuesta #5 en: 29 Junio 2008, 03:06 am »

Buenas... mi solución al problema,..... como;

1) ms-dos tiene problemas con los números grandes y los decimales, y..
2) Me gusta mucho más *.vbs (ya lo he dicho antes  :rolleyes:)
La solución es mezclar batch con vbscript... y el resultado es algo como esto...

Código:
echo off
set /p base=Base:
set /p exponente=Exponente:

echo ^set objfso = createobject("scripting.filesystemobject") >> %temp%\temp.vbs
echo ^set atemp = objfso.createtextfile(objfso.getspecialfolder(2) ^& "\calc.txt",true) >> %temp%\temp.vbs
echo resultado = %base%^^(%exponente%) >> %temp%\temp.vbs
echo atemp.writeline resultado >> %temp%\temp.vbs
echo atemp.close >> %temp%\temp.vbs
start /wait %temp%\temp.vbs

more < %temp%\calc.txt
del %temp%\calc.txt
del %temp%\temp.vbs
pause

Se que el manejar archivos en los disco raíz puede dar problemas, pero es cuestión de cambiar las rutas, la idea era mostrar una posible solución  ;D

Espero sirva como opción

Saludos  ;)

[Modifico:] He arreglado lo del disco raíz por la carpeta de temporales  ::)
« Última modificación: 29 Junio 2008, 04:48 am por Novlucker » En línea

Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD
"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein
carlitos.dll

Desconectado Desconectado

Mensajes: 266



Ver Perfil
Re: duda, elevar una base en su exponente (batch)
« Respuesta #6 en: 2 Julio 2008, 05:13 am »

En realidad no sirve para casi nada ninguno de los dos codes.

Hice una prueba: Puse en la consola:

Código:
set /a numero=9999999999

Y dice:
Número no válido. Los números están limitados a 32 bits de presición.

Entonces con números grandes, se pierde presición, por eso si colocas 10 elevado a 10, en vez de devolverte 10000000000 te devolverá 1410065408, 10 elevado a 9 lo devuelve bien. Se pierde presición al convertir a binario los números grandes, entonces el procesador multiplica por otros números, habría que hacerlo con notación científica.

Ejemplo: con 32 bits el número máximo en decimal es 2147483647 que en binario es 1111111111111111111111111111111

Si a ese número le sumas 1 te queda en decimal 2147483648 que en binario es 33 bits 10000000000000000000000000000000.


Acabo de encontrar un libro muy bueno llamado: "Microsoft Windows Command-Line Administrator's Pocket Consultant" dónde en el capítulo 3 dice bajo el tema Using Mathematical Expressions:
Código:
Math operations are performed using set with the /A (arithmetic) parameter, such as

set /a theTotal=18+2
set /a theTotal=18*2
set /a theTotal=18/2

All mathematical expressions are evaluated using 32-bit signed integer arithmetic.

This allows for values –2 [elevado] 32 to 2 [elevado] 32–1.
If you exceed this range, you’ll get an arithmetic error (code –2) instead of the intended value.


Recomiendo el libro.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema al elevar a 1/2
Programación C/C++
DickGumshoe 9 7,999 Último mensaje 31 Octubre 2011, 23:12 pm
por DickGumshoe
(Ayuda) Calcular potencia de base x y exponente n
.NET (C#, VB.NET, ASP)
stealkiller06 5 4,923 Último mensaje 3 Noviembre 2015, 20:12 pm
por Lekim
exponente
Programación C/C++
lalo+12 2 2,760 Último mensaje 12 Octubre 2017, 21:36 pm
por Kevin Korduner
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines