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

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  Division con decimales (batch) ---- by pablo
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Division con decimales (batch) ---- by pablo  (Leído 5,902 veces)
kraszic

Desconectado Desconectado

Mensajes: 277


Ver Perfil
Division con decimales (batch) ---- by pablo
« en: 17 Octubre 2007, 19:59 pm »

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
  1. @echo off
  2. title DIVISION CON DECIMALES-----coded by kraszic
  3.  
  4. echo Calcula una division hasta con numeros decimales
  5. set /p did=Introduce el dividendo:
  6. set /p div=Introduce el divisor:
  7.  
  8. set /a divi=%did%/%div%
  9. set /a mult=%divi%*%div%
  10. set /a resi=%did%-%mult%
  11.  
  12. if %resi%==0 goto exacto
  13.  
  14. set /a divno=%resi%0/%div%
  15. set /a mult1=%divno%*%div%
  16. set /a resi1=%resi%0-%mult1%
  17.  
  18. if %resi1%==0 goto exacto1
  19.  
  20. set /a divno1=%resi1%0/%div%
  21. set /a mult2=%divno1%*%div%
  22. set /a resi2=%resi1%0-%mult2%
  23.  
  24. if %resi2%==0 goto exacto2
  25.  
  26. set /a divno2=%resi2%0/%div%
  27. set /a mult3=%divno2%*%div%
  28. set /a resi3=%resi2%0-%mult3%
  29.  
  30. if %resi3%==0 goto exacto3
  31. goto noexacto
  32.  
  33. :exacto
  34. echo El resultado de la division es %divi%
  35. pause>nul
  36.  
  37. :exacto1
  38. echo El resultado de la division es %divi%.%divno%
  39. pause>nul
  40.  
  41. :exacto2
  42. echo El resultado de la division es %divi%.%divno%%divno1%
  43. pause>nul
  44.  
  45. :exacto3
  46. echo El resultado de la division es %divi%.%divno%%divno1%%divno2%
  47. pause>nul
  48.  
  49. :noexacto
  50. echo El resultado de la division es %divi%.%divno%%divno1%%divno2%...
  51. pause>nul


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


« Última modificación: 21 Octubre 2007, 11:41 am por kraszic » En línea

nhaalclkiemr


Desconectado Desconectado

Mensajes: 1.678


Máximo exponente 9DB9F1AEED2FADBDE 997BBE20FEDA92


Ver Perfil WWW
Re: Division con decimales (batch) ---- by pablo
« Respuesta #1 en: 19 Octubre 2007, 00:47 am »

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
  1. @echo off
  2. ::Division con decimales by nhaalclkiemr
  3. ::Baseado en el code de kraszic
  4.  
  5. title DIVISION CON DECIMALES
  6.  
  7. echo Calcula una division hasta con numeros decimales
  8. :main
  9. set did=
  10. set div=
  11. set max=
  12. set /p did=Introduce el dividendo:
  13. set /p div=Introduce el divisor:
  14. set /p max=Introduce el numero maximo de decimales (por defecto 60):
  15. if "%did%"=="" goto main
  16. if "%div%"=="" goto main
  17. if "%max%"=="" set max=60
  18. if "%max%"=="0" set max=60
  19. set /a xxx=%did%*1
  20. if not "%xxx%"=="%did%" goto main
  21. set /a xxx=%div%*1
  22. if not "%xxx%"=="%div%" goto main
  23. set /a xxx=%max%*1
  24. if not "%xxx%"=="%max%" goto main
  25. if %div%==0 (
  26. echo Error. Division por cero.
  27. pause>nul
  28. )
  29. set /a divno0=%did%/%div%
  30. set /a mult1=%divno0%*%div%
  31. set /a resi0=%did%-%mult1%
  32. if %resi0%==0 (
  33. goto exacto
  34. )
  35. set p=0
  36. echo Calculando...
  37. :a
  38. set /a nu=nu+1
  39. if not "%percent%"=="" set /a antpercent=%percent%
  40. set /a percent=%nu%*100/%max%
  41. if not "%antpercent%"=="%percent%" (
  42. if %nu% GTR 70 echo %percent%%%
  43. )
  44. set temp1=resi%p%
  45. set temp2=divno%nu%
  46. set temp3=mult%nu%
  47. call:func1 %%%temp1%%%0
  48. call:func2 %%%temp2%%% %%%temp2%%%
  49. call:func3 %%%temp1%%%0 %%%temp3%%%
  50. goto sig
  51. :func1
  52. set /a divno%nu%=%1/%div%
  53. goto:EOF
  54. :func2
  55. set /a mult%nu%=%1*%div%
  56. goto:EOF
  57. :func3
  58. set /a resi%nu%=%1-%2
  59. goto:EOF
  60. :sig
  61. set /a p=p+1
  62. set temp=resi%nu%
  63. call:funcion2 %%%temp%%%
  64. goto sig2
  65. :funcion2
  66. set tempvalue=%1
  67. goto:EOF
  68. :sig2
  69. If not %nu%==%max% if not %tempvalue%==0 goto a
  70. For /L %%I IN (1,1,%nu%) DO (
  71. call:funcion3 %%%%divno %%I%%%%
  72. )
  73. goto exacto
  74. :funcion3
  75. call:funcion7 %1%2
  76. goto seguir
  77. :funcion7
  78. set tmpvar=%1
  79. goto:EOF
  80. :seguir
  81. set decimal=%decimal%%tmpvar%
  82. goto:EOF
  83. :exacto
  84. if not "%decimal%"=="" set decimal=.%decimal%
  85. echo Resultado: %divno0%%decimal%
  86. pause>nul

Código
  1. @echo off
  2. ::Division con decimales by nhaalclkiemr
  3. ::Baseado en el code de kraszic
  4.  
  5. title DIVISION CON DECIMALES
  6.  
  7. echo Calcula una division hasta con numeros decimales
  8. :main
  9. set did=
  10. set div=
  11. set max=
  12. set /p did=Introduce el dividendo:
  13. set /p div=Introduce el divisor:
  14. set /p max=Introduce el numero maximo de decimales (por defecto 30):
  15. if "%did%"=="" goto main
  16. if "%div%"=="" goto main
  17. if "%max%"=="" set max=30
  18. if "%max%"=="0" set max=30
  19. set /a xxx=%did%*1
  20. if not "%xxx%"=="%did%" goto main
  21. set /a xxx=%div%*1
  22. if not "%xxx%"=="%div%" goto main
  23. set /a xxx=%max%*1
  24. if not "%xxx%"=="%max%" goto main
  25. if %div%==0 (
  26. echo Error. Division por cero.
  27. pause>nul
  28. )
  29. set /a divno0=%did%/%div%
  30. set /a mult1=%divno0%*%div%
  31. set /a resi0=%did%-%mult1%
  32. if %resi0%==0 (
  33. goto exacto
  34. )
  35. set p=0
  36. echo Calculando...
  37. :a
  38. set /a nu=nu+1
  39. set temp1=resi%p%
  40. set temp2=divno%nu%
  41. set temp3=mult%nu%
  42. call:func1 %%%temp1%%%0
  43. call:func2 %%%temp2%%% %%%temp2%%%
  44. call:func3 %%%temp1%%%0 %%%temp3%%%
  45. goto sig
  46. :func1
  47. set /a divno%nu%=%1/%div%
  48. goto:EOF
  49. :func2
  50. set /a mult%nu%=%1*%div%
  51. goto:EOF
  52. :func3
  53. set /a resi%nu%=%1-%2
  54. goto:EOF
  55. :sig
  56. set /a p=p+1
  57. set temp=resi%nu%
  58. call:funcion2 %%%temp%%%
  59. goto sig2
  60. :funcion2
  61. set tempvalue=%1
  62. goto:EOF
  63. :sig2
  64. If not %nu%==%max% if not %tempvalue%==0 goto a
  65. For /L %%I IN (1,1,%nu%) DO (
  66. call:funcion3 %%%%divno %%I%%%%
  67. )
  68. goto exacto
  69. :funcion3
  70. call:funcion7 %1%2
  71. goto seguir
  72. :funcion7
  73. set tmpvar=%1
  74. goto:EOF
  75. :seguir
  76. set decimal=%decimal%%tmpvar%
  77. goto:EOF
  78. :exacto
  79. if not "%decimal%"=="" set decimal=.%decimal%
  80. echo Resultado: %divno0%%decimal%
  81. pause>nul


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 ;)


En línea

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

Desconectado Desconectado

Mensajes: 277


Ver Perfil
Re: Division con decimales (batch) ---- by pablo
« Respuesta #2 en: 19 Octubre 2007, 16:01 pm »

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???
En línea

nhaalclkiemr


Desconectado Desconectado

Mensajes: 1.678


Máximo exponente 9DB9F1AEED2FADBDE 997BBE20FEDA92


Ver Perfil WWW
Re: Division con decimales (batch) ---- by pablo
« Respuesta #3 en: 19 Octubre 2007, 17:37 pm »

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 >:(
En línea

StasFodidoCrypter 1.0 - 100% (old)
StasFodidoCrypter 2.0 - 85% (deserted)
Fire AV/FW-Killer - 97% (deserted)
R-WlanXDecrypter 1.0- 100%
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Python, Decimales de una division
Scripting
Arnau27 2 6,854 Último mensaje 10 Agosto 2011, 19:30 pm
por Arnau27
Las discográficas pierden: un juez absuelve a Pablo Soto por crear software P2P
Noticias
wolfbcn 1 1,200 Último mensaje 19 Diciembre 2011, 22:38 pm
por beholdthe
Fallecio el Hermano Pablo
Foro Libre
p1r4t0s 0 2,599 Último mensaje 27 Enero 2012, 23:47 pm
por p1r4t0s
[BATCH] CALC: Sumas y restas con decimales
Scripting
Binary_Death 5 3,228 Último mensaje 24 Julio 2012, 22:32 pm
por AgnesBlack
el resultado de la división no me con puntos decimales
Programación C/C++
alexfajam 1 1,272 Último mensaje 6 Septiembre 2017, 22:29 pm
por ivancea96
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines