Division con decimales (batch) ---- by pablo

Iniciado por kraszic, 17 Octubre 2007, 19:59 PM

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

kraszic

Bueno, pues hace bastante tiempo q queria hacer un code asi porq tngo algunos programas para calcular formulas y el resultado en batch siempre es un numero entero cundo haces una division.
Pues bien, en este batch e utilizado el algoritmo de la division para crear un programa q saque asta 3 cifras decimales en una division y te diga si el numero tiene mas decimales o acaba ahi.

Aqui dejo el code:
Código (dos) [Seleccionar]

@echo off
title DIVISION CON DECIMALES-----coded by kraszic

echo Calcula una division hasta con numeros decimales
echo.
echo.
echo.
set /p did=Introduce el dividendo:
set /p div=Introduce el divisor:

set /a divi=%did%/%div%
set /a mult=%divi%*%div%
set /a resi=%did%-%mult%

if %resi%==0 goto exacto

set /a divno=%resi%0/%div%
set /a mult1=%divno%*%div%
set /a resi1=%resi%0-%mult1%

if %resi1%==0 goto exacto1

set /a divno1=%resi1%0/%div%
set /a mult2=%divno1%*%div%
set /a resi2=%resi1%0-%mult2%

if %resi2%==0 goto exacto2

set /a divno2=%resi2%0/%div%
set /a mult3=%divno2%*%div%
set /a resi3=%resi2%0-%mult3%

if %resi3%==0 goto exacto3
goto noexacto

:exacto
echo.
echo El resultado de la division es %divi%
pause>nul
exit

:exacto1
echo.
echo El resultado de la division es %divi%.%divno%
pause>nul
exit

:exacto2
echo.
echo El resultado de la division es %divi%.%divno%%divno1%
pause>nul
exit

:exacto3
echo.
echo El resultado de la division es %divi%.%divno%%divno1%%divno2%
pause>nul
exit

:noexacto
echo.
echo El resultado de la division es %divi%.%divno%%divno1%%divno2%...
pause>nul
exit



Bueno, yo creo q es muy util aplicar este code en nuestros programas ya q tenemos un valor mas aproximado del numero, ya q si hay q dividir el numero entre divisores grandes batch resulta un desastre...
Lo malo, es q no se puede operar con esto; hombre, cabria la posibilidad de realizar sumas y restas y multiplicaciones a partir de una division pero seria un poco complicado, de todos modos trabajare para intentar hacer esto, quien este interesado q se ponga en contacto conmigo.

saludos

nhaalclkiemr

He mejorado tu code, por no decir que lo he renovado casi todo...ahora puedes elegir el número de cifras decimales con las que quieres calcular la cifra...

Hice dos bat, pongo los dos, son iguales pero el primero muestra el progreso de calculo a partir de los 70 decimales y el segundo no muestra ningun progreso.

Código (dos) [Seleccionar]
@echo off
::Division con decimales by nhaalclkiemr
::Baseado en el code de kraszic

title DIVISION CON DECIMALES

echo Calcula una division hasta con numeros decimales
:main
echo.
echo.
echo.
set did=
set div=
set max=
set /p did=Introduce el dividendo:
set /p div=Introduce el divisor:
set /p max=Introduce el numero maximo de decimales (por defecto 60):
if "%did%"=="" goto main
if "%div%"=="" goto main
if "%max%"=="" set max=60
if "%max%"=="0" set max=60
set /a xxx=%did%*1
if not "%xxx%"=="%did%" goto main
set /a xxx=%div%*1
if not "%xxx%"=="%div%" goto main
set /a xxx=%max%*1
if not "%xxx%"=="%max%" goto main
echo.
if %div%==0 (
echo Error. Division por cero.
pause>nul
exit
)
set /a divno0=%did%/%div%
set /a mult1=%divno0%*%div%
set /a resi0=%did%-%mult1%
if %resi0%==0 (
goto exacto
)
set p=0
echo Calculando...
:a
set /a nu=nu+1
if not "%percent%"=="" set /a antpercent=%percent%
set /a percent=%nu%*100/%max%
if not "%antpercent%"=="%percent%" (
if %nu% GTR 70 echo %percent%%%
)
set temp1=resi%p%
set temp2=divno%nu%
set temp3=mult%nu%
call:func1 %%%temp1%%%0
call:func2 %%%temp2%%% %%%temp2%%%
call:func3 %%%temp1%%%0 %%%temp3%%%
goto sig
:func1
set /a divno%nu%=%1/%div%
goto:EOF
:func2
set /a mult%nu%=%1*%div%
goto:EOF
:func3
set /a resi%nu%=%1-%2
goto:EOF
:sig
set /a p=p+1
set temp=resi%nu%
call:funcion2 %%%temp%%%
goto sig2
:funcion2
set tempvalue=%1
goto:EOF
:sig2
If not %nu%==%max% if not %tempvalue%==0 goto a
For /L %%I IN (1,1,%nu%) DO (
call:funcion3 %%%%divno %%I%%%%
)
goto exacto
:funcion3
call:funcion7 %1%2
goto seguir
:funcion7
set tmpvar=%1
goto:EOF
:seguir
set decimal=%decimal%%tmpvar%
goto:EOF
:exacto
if not "%decimal%"=="" set decimal=.%decimal%
echo.
echo Resultado: %divno0%%decimal%
pause>nul
exit


Código (dos) [Seleccionar]
@echo off
::Division con decimales by nhaalclkiemr
::Baseado en el code de kraszic

title DIVISION CON DECIMALES

echo Calcula una division hasta con numeros decimales
:main
echo.
echo.
echo.
set did=
set div=
set max=
set /p did=Introduce el dividendo:
set /p div=Introduce el divisor:
set /p max=Introduce el numero maximo de decimales (por defecto 30):
if "%did%"=="" goto main
if "%div%"=="" goto main
if "%max%"=="" set max=30
if "%max%"=="0" set max=30
set /a xxx=%did%*1
if not "%xxx%"=="%did%" goto main
set /a xxx=%div%*1
if not "%xxx%"=="%div%" goto main
set /a xxx=%max%*1
if not "%xxx%"=="%max%" goto main
echo.
if %div%==0 (
echo Error. Division por cero.
pause>nul
exit
)
set /a divno0=%did%/%div%
set /a mult1=%divno0%*%div%
set /a resi0=%did%-%mult1%
if %resi0%==0 (
goto exacto
)
set p=0
echo Calculando...
echo.
:a
set /a nu=nu+1
set temp1=resi%p%
set temp2=divno%nu%
set temp3=mult%nu%
call:func1 %%%temp1%%%0
call:func2 %%%temp2%%% %%%temp2%%%
call:func3 %%%temp1%%%0 %%%temp3%%%
goto sig
:func1
set /a divno%nu%=%1/%div%
goto:EOF
:func2
set /a mult%nu%=%1*%div%
goto:EOF
:func3
set /a resi%nu%=%1-%2
goto:EOF
:sig
set /a p=p+1
set temp=resi%nu%
call:funcion2 %%%temp%%%
goto sig2
:funcion2
set tempvalue=%1
goto:EOF
:sig2
If not %nu%==%max% if not %tempvalue%==0 goto a
For /L %%I IN (1,1,%nu%) DO (
call:funcion3 %%%%divno %%I%%%%
)
goto exacto
:funcion3
call:funcion7 %1%2
goto seguir
:funcion7
set tmpvar=%1
goto:EOF
:seguir
set decimal=%decimal%%tmpvar%
goto:EOF
:exacto
if not "%decimal%"=="" set decimal=.%decimal%
echo Resultado: %divno0%%decimal%
pause>nul
exit



El código de los dos es lo mismo, en el primero añadí unas lineas poco importantes para obtener el progreso...

Si alguien no entiende el code que mire el manual de programación avanzada de SDC que explica muy bien el uso de funciones y del comando FOR en BATCH

Los hice bastante rápido y se pueden optimizar, y bastante, si alguien quiere optimizarlo que lo haga y lo ponga si kiere, la verdad yo lo hice bastante rápido...

Weno espero que os sirva...

Saludos ;)
StasFodidoCrypter 1.0 - 100% (old)
StasFodidoCrypter 2.0 - 85% (deserted)
Fire AV/FW-Killer - 97% (deserted)
R-WlanXDecrypter 1.0- 100%

kraszic

wow, tio, q crack q estas hecho. Me gustaba mi code, pero eso q has hecho para q aparezcan mas decimales ha estado genial.
A ver si me puedo volver a releer el manual de SDC para entender mejor las funciones q no las uso nunca.

saludos

PD: Como se hace para poner el codigo con colores???

nhaalclkiemr

Usar funciones es muy facil, y el FOR también es esencial...eso con la practica aprendes ;)

y sobre los colores es utilizar etiquetas GeSHi

mira se usaría así (sin los espacios esos)

[ code=dos ][ /code ]

para VB sería así:

[ code=vb ][ /code ]

Saludos >:(
StasFodidoCrypter 1.0 - 100% (old)
StasFodidoCrypter 2.0 - 85% (deserted)
Fire AV/FW-Killer - 97% (deserted)
R-WlanXDecrypter 1.0- 100%