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

 

 


Tema destacado:


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  [Com] float v2 (Suma,resta,multiplicacion y division decimal)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Com] float v2 (Suma,resta,multiplicacion y division decimal)  (Leído 5,344 veces)
LauBuru

Desconectado Desconectado

Mensajes: 37


Ver Perfil
[Com] float v2 (Suma,resta,multiplicacion y division decimal)
« en: 4 Julio 2010, 12:18 pm »

En esta segunda version e ampliado el comando hasta las cuatro acciones aritmeticas basicas (Sumar, restar, multiplicar y dividir) con numeros reales, quiero avisar antes de que se me hechen al cuello de que el segundo decimal no suele ser totalmente exacto hay una variacion respecto a una calculadora, esto se deve a que CMD tiende a redondear los resultados cuando la operacion no devuelve un numero entero por lo demas va medianamente bien, os dejo el codigo para que le hecheis un vistazo.

Sintaxis:
Código:
float xx,yy + xx,yy
float xx,yy - xx,yy
float xx,yy * xx,yy
float xx,yy / xx,yy

Código
  1. @echo on
  2. set operador=%3
  3. set /a cont=-1
  4. set /a cont2=-1
  5. set /a cont3=-1
  6. for /f "tokens=*" %%a in ('set /a "operando1=%1,%2"') do ( set decimales1=%%a)
  7. for /f "tokens=*" %%b in ('set /a "operando2=%4,%5"') do (set decimales2=%%b)
  8. for /f "tokens=*" %%c in ('echo %1') do ( set entero1=%%c)
  9. for /f "tokens=*" %%d in ('echo %4') do ( set entero2=%%d)
  10. if "^%operador%s" == "^+s" (goto sumar)
  11. if "^%operador%s" == "^-s" (goto restar)
  12. if "^%operador%s" == "^*s" (goto multiplicar)
  13. if "^%operador%s" == "^/s" (goto dividir)
  14.  
  15. :sumar
  16. set /a RsEntero=%entero1% %operador% %entero2%
  17. set /a RsDecimal=%decimales1% %operador% %decimales2%
  18. if "100" GEQ "%RsDecimal%" (set /a "RsEntero=%RsEntero% + %RsDecimal:~0,1%")
  19. set "resultado=%RsEntero%,%RsDecimal%"
  20. echo %resultado%
  21. exit /b %resultado%
  22.  
  23. :restar
  24. set /a RsEntero=%entero1% %operador% %entero2%
  25. set /a RsDecimal=%decimales1% %operador% %decimales2%
  26. if "%decimales1%" LSS "%decimales2%" (set "decimales1=1%decimales1%" & set /a "entero1=%entero1%-1" & goto uno)
  27. if "%decimales2%" LSS "%decimales1%" (set "decimales2=1%decimales2%" & set /a "entero2=%entero2%-1" & goto dos)
  28.  
  29. :uno
  30. set /a RsDecimal=%decimales1%- %decimales2%
  31. set /a RsEntero=%entero2%%operador%%entero1%
  32. set resultado=%RsEntero%,%RsDecimal%
  33. echo %resultado%
  34. exit /b %resultado%
  35.  
  36. :dos
  37. set /a RsDecimal=%decimales2%- %decimales1%
  38. set /a RsEntero=%entero2%%operador%%entero1%
  39. set resultado=-%RsEntero%,%RsDecimal%
  40. echo %resultado%
  41. exit /b %resultado%
  42.  
  43. :multiplicar
  44. set /a RsEntero=%entero1% %operador% %entero2%
  45. set /a RsDecimal=%decimales1% %operador% %decimales2%
  46. set line1=%entero1%%decimales1%
  47. set line2=%entero2%%decimales2%
  48. set /a RsTotal= %line1% * %line2%
  49. set "resultado=%RsTotal:~0,-4%,%RsTotal:~-4%"
  50. echo %resultado%
  51. exit /b %resultado%
  52.  
  53. :dividir
  54. set /a Dividendo=%entero1%%decimales1%
  55. set /a Divisor=%entero2%%decimales2%
  56. if "%Dividendo%" GTR "%Divisor%" (goto cuatro) else (set "Dividendo=%Dividendo%0" & goto tres)
  57.  
  58.  
  59. :tres
  60. for /l %%g in (%Dividendo%,-%Divisor%,0) do (
  61. set /a cont=!cont! + 1  
  62. if "%%g" LSS "%Divisor%" (set Resto=%%g ) )
  63. for /l %%h in (%Resto%0,-%Divisor%,0) do (
  64. set /a cont2=%cont2% + 1
  65. if "%%h" LSS "%Divisor%" (set Resto=%%h0) )
  66. for /l %%_ in (%Resto%,-%Divisor%,0) do (
  67. set /a cont3=%cont3% + 1
  68. if "%%_" LSS "%Divisor%" (set Resto=%%_) )
  69. set resultado=0,%cont:-=%%cont2:-=%%cont3:-=%
  70. echo %resultado%
  71. exit /b %resultado%
  72.  
  73. :cuatro
  74. for /l %%i in (%Dividendo%,-%Divisor%,0) do (
  75. set /a cont+=1
  76. if "%%i" LSS "%Divisor%" (set Resto=%%i0 ) )
  77. for /l %%j in (%Resto%,-%Divisor%,0) do (
  78. set /a cont2+=1
  79. if "%%j" LSS "%Divisor%" (set Resto=%%j0) )
  80. for /l %%k in (%Resto%,-%Divisor%,0) do (
  81. set /a cont3+=1
  82. if "%%k" LSS "%Divisor%" (set Resto=%%k) )
  83. set resultado=%cont%,%cont2%%cont3%  
  84. echo %resultado%
  85. exit /b %resultado%
  86.  


Tambien, y derivado del float e creado otro code para realizar raices cuadradas decimales, tmb tiene error por redondeo pero menos es nada XD

Sintaxis:
Código:
sqr xx,yy

Código
  1. @echo on
  2. set "pam=%*"
  3. set pam2=%2
  4. set pam2=%pam2:~0,1%
  5. set RefEntera=-1
  6. set RefDecimal=-1
  7. set cont=0
  8. set cont2=0
  9. set cont3=0
  10. goto uno
  11.  
  12. :uno
  13. set /a RefEntera= %RefEntera% + 1
  14. set /a cont=%cont% + 1
  15. set /a BaseEntera= %cont% * %cont%
  16. if %BaseEntera% GTR %1 (goto dos)
  17. if %BaseEntera% GTR %1 (goto dos)
  18. if %BaseEntera% EQU %1%2 (echo %cont% & exit /b) else (goto uno)
  19.  
  20.  
  21. :dos
  22. pushd "%windir%\system32"
  23. set /a RefDecimal=%RefDecimal% + 1
  24. set /a cont3=%cont3% + 1
  25. for /f "tokens=*" %%a in ('float.bat %RefEntera%,%cont3% * %RefEntera%,%cont3%') do (
  26. set res=%%a)
  27. set res=%res:,=%
  28. set res=%res:~-6%
  29. if %res% EQU %pam:,=% (echo %cont3%)
  30. if %res% GTR %pam:,=% (echo %RefEntera%,%RefDecimal:~0,1%%res:~0,1% & pause & exit /b)
  31. goto dos
  32.  
  33.  

Espero os resulte util o por lo menos curioso XD!!

Un saludo gente ^^


« Última modificación: 4 Julio 2010, 22:17 pm por LauBuru » En línea

69696969 start notepad.exe ::
leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
***
Desconectado Desconectado

Mensajes: 3.069


/^$/


Ver Perfil WWW
Re: [Com] float v2 (Suma,resta,multiplicacion y division decimal)
« Respuesta #1 en: 4 Julio 2010, 20:31 pm »

No lo he probado, no he estado en Windows :s, algunas dudas sobre la división, con ¿cuantos números decimales puede trabajar?

Recomendaría que le dieras una indentación a tu código.

Saludos.


En línea

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

Desconectado Desconectado

Mensajes: 2.021


Actualizate o muere!


Ver Perfil WWW
Re: [Com] float v2 (Suma,resta,multiplicacion y division decimal)
« Respuesta #2 en: 4 Julio 2010, 20:55 pm »

Que significa la Tag [Com] del titulo?

Saludos
En línea

LauBuru

Desconectado Desconectado

Mensajes: 37


Ver Perfil
Re: [Com] float v2 (Suma,resta,multiplicacion y division decimal)
« Respuesta #3 en: 4 Julio 2010, 22:11 pm »

Lo de [Com] lo puse por [Comando] intentando abreviar (haunque no fue muy acertado).

El script trabaja entre dos y cuatro decimales suele ir variando pero en las divisiones por ejemplo se podrian añadir mas decimales si volvieramos a hacer un ciclo "for /l" con el resto que quedara, en un principio lo tenia pensado para trabajar con dos decimales pero a menudo devuelve mas de dos haunque si haces la operacion con la calculadora veras que a partir del segundo decimal suele haber error por el redondeo.

Sep lo indentare para que sea mas legible XD!! perdon
En línea

69696969 start notepad.exe ::
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[c++] Suma, resta, multiplicacion y division « 1 2 »
Programación C/C++
dani__ 16 63,725 Último mensaje 6 Junio 2013, 03:08 am
por dorkam
realizar resta DECIMAL con OllyScript
Ingeniería Inversa
.:UND3R:. 6 3,107 Último mensaje 4 Octubre 2011, 20:26 pm
por apuromafo CLS
Ayuda division y multiplicación con corrimientos
ASM
fuct 1 3,355 Último mensaje 20 Octubre 2014, 21:54 pm
por Eternal Idol
Como calculo la resta y la division usando for?
Programación C/C++
Reyes2209 2 2,279 Último mensaje 20 Noviembre 2015, 22:08 pm
por DarK_FirefoX
Ejercicio suma,resta,multiplicacion « 1 2 »
ASM
EmmanuelTR9 11 9,239 Último mensaje 17 Abril 2021, 07:01 am
por Eternal Idol
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines