Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: Binary_Death en 23 Julio 2012, 02:33 am



Título: [BATCH] CALC: Sumas y restas con decimales
Publicado por: Binary_Death en 23 Julio 2012, 02:33 am
Aquí dejo una función que es capaz de sumar y restar infinitos términos con tantos decimales como permita la cmd, usando sólo batch.

Dedicada a AgnesBlack, que tenía una duda con esto se ve.

Código:
@Echo Off
more/c<nul
call :_calc sub "12.72-8.189605-1.0025" "adt"
call :_calc add "%adt%+521.27+5" "adt"
echo: 12.72 - 8.189605 - 1.0025 + 521.27 + 5 = %adt%
pause 1>nul
exit
:_calc
setlocal enabledelayedexpansion
if "%~1" EQU "add" set "sym=+"
if "%~1" EQU "sub" set "sym=-"
set "add_str=%~2"
set "add_str=!add_str:%sym%= !"
set/a hst=0,cnt=0,add=0
for %%_ in (%add_str%) do (
set/a dec[!cnt!]=0
for /f "tokens=2 delims=." %%. in ("%%_") do (
call :_strlen "%%."
set/a dec[!cnt!]=!errorlevel!
if !errorlevel! GTR !hst! set/a hst=!errorlevel!
)
set/a cnt+=1
)
set/a cnt=0
if "%sym%" EQU "-" for %%_ in (%add_str:.=%) do (
set/a pow=%hst%-%dec[0]%,n_b=%%_
for /l %%. in (1,1,!pow!) do set "n_b=!n_b!0"
set/a add+=!n_b!*2
goto :__op
)
:__op
for %%_ in (%add_str:.=%) do (
call set/a pow=%hst%-%%dec[!cnt!]%%,n_b=%%_
for /l %%. in (1,1,!pow!) do set "n_b=!n_b!0"
set/a add%sym%=!n_b!,cnt+=1
)
set "res=!add:~0,-%hst%!.!add:~-%hst%!"
if %hst% EQU 0 set "res=%res:~1%"
endlocal & set "%~3=%res%" & exit /b
:_strlen
setlocal
set/a cnt=0
for /f "tokens=* eol=" %%_ in (
'"cmd /u /c echo:%~1|more"'
) do set/a cnt+=1
endlocal & exit /b %cnt%

¡Un saludo!


Título: Re: CALC: Sumas y restas con decimales
Publicado por: AgnesBlack en 23 Julio 2012, 02:37 am
genial wuau una duda hay en la parte de

Código:
call :_calc sub "12.72-8.189605-1.0025" "adt"
call :_calc add "%adt%+521.27" "adt"

podria poner

Código:
echo ingrese primer numero
set  /p a=
echo ingrese segundo numero
set /p b=

call :_cal sub "a-b" "adt"

hmm no entiendo muy bien el procedimiento pero como generaria dependiendo un numero dado?


Título: Re: CALC: Sumas y restas con decimales
Publicado por: Binary_Death en 23 Julio 2012, 02:40 am
Llamas a la función así:

Código:
call :_calc add|sub "operación" "variable"

Donde variable será donde se guarde el resultado.
Luego, al hacer:

Código:
echo. %variable%

Se te imprimirá en pantalla el resultado.

Por supuesto puedes hacer esto:

Código:
@echo off
echo ingrese primer numero
set  /p "a="
echo ingrese segundo numero
set /p "b="
call :_calc sub "%a%-%b%" "adt"
echo. Resultado de la resta: %adt%
pause > nul
exit



Título: Re: [BATCH] CALC: Sumas y restas con decimales
Publicado por: AgnesBlack en 23 Julio 2012, 02:52 am
bien gracias ya intentare probar y ver si me sale algo para la division gracias :D


Título: Re: [BATCH] CALC: Sumas y restas con decimales
Publicado por: Binary_Death en 24 Julio 2012, 09:16 am
Código optimizado ;)


Título: Re: [BATCH] CALC: Sumas y restas con decimales
Publicado por: AgnesBlack en 24 Julio 2012, 22:32 pm
genial :D ya posteare los avanze que hice en bath claro son todos ejercicios matematicos hmmm mira tengo una duda viste el codigo que me pasaste? bueno me sale un error al ejecutarlo me dice

Citar
"El sistema no  encuentra la etiqueta por lotes especificada: _calc
   Resultado de la resta:

:D ya voy entendiendo mas el tema de bath hmm se puede hacer matrices en ella no?? vi en un pdf la explicacion de como insertar decimales en una matris en bath pero no se donde guarde el pdf pero esta interesante