Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: FerJGS en 21 Junio 2010, 11:43 am



Título: Ecuaciones (BATCH)
Publicado por: FerJGS en 21 Junio 2010, 11:43 am
Hola, me gustaría saber cómo hacer ecuaciones de primer grado en batch.

He hecho también de segundo grado pero solo me salen de dos tipos, me falta el de

-b ±√ b2 - 4ac / 2a

Y las ecuaciones de primer grado. ¿Cómo hago para que el batch las resuelva?

y otra cosa, ¿como hago para que pueda multiplicar un núemro por otro con 4 decimales?


Título: Re: Ecuaciones (BATCH)
Publicado por: flony en 21 Junio 2010, 23:07 pm
decimales batch no agarra, lo de la formula de bascara (creo q asi se escribe) lo de la raiz es complicado y sobre las ecuaciones de primer grado pone con set /a para ingresar las variables


Título: Re: Ecuaciones (BATCH)
Publicado por: GUN$ en 22 Junio 2010, 04:02 am
Leo Gutierrez creó hace tiempo un script para resolver un tipo determinado de ecuaciones de 2º grado en Batch. A ver si tiene el código por ahí y lo postea ^^


Título: Re: Ecuaciones (BATCH)
Publicado por: Shell Root en 22 Junio 2010, 04:50 am
Miradlo:
Código
  1. @echo off
  2. :code
  3. setlocal enabledelayedexpansion
  4. :: -3x-9=-9x-63
  5. echo. ------------------------------------------------------------------------------
  6. echo. ^| Ecuaciones de 1ø grado. Ejemplo :                     -3x-9=-9x-63         ^|
  7. echo. ------------------------------------------------------------------------------
  8. echo. ------------------------------------------------------------------------------
  9. echo. ^| 1.-Resolver ecuaci¢n.                                                      ^|
  10. echo. ^| 2.-Ver ejemplos de ecuaciones.                                             ^|
  11. echo. ^| 3.-Ayuda.                                                                  ^|
  12. echo. ^| 4.-Salir.                                                                  ^|
  13. echo. ------------------------------------------------------------------------------
  14. set /p "opcion=Teclee el numero de la opcion dada : "
  15. if not defined opcion (goto:code)
  16. if %opcion% equ 1 (goto:r_ecuacion)
  17. if %opcion% equ 2 (goto:examples)
  18. if %opcion% equ 3 (goto:help)
  19. if %opcion% equ 4 (goto:exit) else (
  20. cls
  21. goto:code
  22. )
  23. :r_ecuacion
  24. cls
  25. set /p "ecuacion=Ecuaci¢n : "
  26. if not defined ecuacion (
  27. cls
  28. goto:code
  29. )
  30. for /f "tokens=1,2 delims==" %%a in ("%ecuacion%") do (
  31. set "termino1=%%a"
  32. set "termino2=%%b"
  33. )
  34. for /f "tokens=1,2 delims=x,X" %%a in ("%termino1%") do (set "x_1=%%ax")
  35. for /f "tokens=1,2 delims=x,X" %%a in ("%termino2%") do (set "x_2=%%ax")
  36. set "x1=%x_1:x=%"
  37. set "x2=%x_2:x=%"
  38. if ["%x_2:~0,1%"]==["-"] (
  39. set /a "suma_x=!x1!!x2:-=+!"
  40. ) else (
  41. set /a "suma_x=!x1!-!x2!"
  42. )
  43. for /f "tokens=1,2 delims=x,X" %%a in ("%termino2%") do (set "c_1=%%b")
  44. for /f "tokens=1,2 delims=x,X" %%a in ("%termino1%") do (set "c_2=%%b")
  45. if ["%c_2:~0,1%"]==["-"] (
  46. set /a "suma_c=!c_1!!c_2:-=+!"
  47. ) else (
  48. set /a "suma_c=!c_1!-!c_2!"
  49. )
  50. set /a "resultado=%suma_c%/%suma_x%"
  51. echo.------------------------------------------------------------------------
  52. echo.Resultado de la ecuacion.
  53. echo.x =  %resultado%
  54. echo.Ecuacion = !ecuacion:x=(% style="color: #448888;">resultado%)!
  55. echo.------------------------------------------------------------------------
  56. set /p ,=Enter para volver al menu.
  57. cls
  58. goto:code
  59. :examples
  60. cls
  61. echo.Este programa puede resolver ecuaciones como las siguientes :
  62. echo.1.  -3x-9=-9x-63
  63. echo.2.   9x-5=-4x-57
  64. echo.3.   5x-9x=39-3
  65. echo.4.  -7x+9=-9x-5
  66. echo.5.  -3x+1=2x+21
  67. echo.6.   7x+4=9x+6
  68. echo.7.  -5x+8=9x+120
  69. echo.8.  -8x+1=6x-111
  70. echo.9.  -4x+6=6x-64
  71. echo.10. -5x-1=-7x+5
  72. for /l %%$ in (1,1,4) do (cd.)|echo.
  73. set /p ,=Enter para volver al menu.
  74. cls
  75. goto:code
  76. :help
  77. cls
  78. echo.Este peque¤o programa ayuda a resolver ecuaciones del tipo :
  79. echo.-3x-9=-9x-63
  80. echo.Solo tiene que teclear su ecuaci¢n en el menu inicial (opci¢n 1). y el
  81. echo.programa se encargar  de resolver la ecuaci¢n.
  82. echo.Leo Guti‚rrez R.
  83. set /p ,=Pulse enter para volver al men£.
  84. cls
  85. goto:code
  86. exit /b 0
PoC
Código
  1. Ecuación : 9x-5=-4x-57
  2.  
  3.  
  4. ------------------------------------------------------------------------
  5. Resultado de la ecuacion.
  6. x =  -4
  7. Ecuacion = 9(-4)-5=-4(-4)-57
  8. ------------------------------------------------------------------------
  9. Enter para volver al menu.

Fuente: :http://foro.portalhacker.net/index.php/topic,80232.0.html


Título: Re: Ecuaciones (BATCH)
Publicado por: GUN$ en 22 Junio 2010, 07:01 am
Sí, shellroot@alex-laptop:~$, ese es el código al qué me refería.


Título: Re: Ecuaciones (BATCH)
Publicado por: leogtz en 22 Junio 2010, 07:46 am
Leo Gutierrez creó hace tiempo un script para resolver un tipo determinado de ecuaciones de 2º grado en Batch. A ver si tiene el código por ahí y lo postea ^^

Tssss, ya ni recordaba ese código.

Tengan compasión si el código no hace lo que debiera.  ;D

Respecto al tema, en Batch no es posible trabajar con decimales, solo tenemos a nuestra disposición las operaciones aritméticas básicas, así que utiliza otro lenguaje o pregunta sobre como obtener decimales usando VBScript, así podríamos unir Batch y VBScript para lograr algo; hacerlo con Batch solo traería dolores de cabeza.


Título: Re: Ecuaciones (BATCH)
Publicado por: GUN$ en 23 Junio 2010, 09:07 am
Pues hace tiempo un user creó un método para trabajar con decimales en batch..... a ver si lo localizo y le digo que postee el script ^^


Título: Re: Ecuaciones (BATCH)
Publicado por: FerJGS en 26 Junio 2010, 16:42 pm
Funciona bastante bien con algunas ecuaciones pero otras no las resuelve... Aun así puedo decirle al usuario que lo escriba de la forma correcta para que lo pueda resolver, es fantástico... Ahora ya necesito saber cómo hacer para hacer las de segundo grado y...ya puestos a pedir...cómo hacer para sacar el NÚMERO DE CIFRAS de un número.

Sí que se pueden usar decimales, no directamente, pero hay que pensar un poquito. Para dividir con tres decimales no hace falta ni siquiera bucles... Pero para poder multiplicar por pi, por ejemplo, es conveniente saber cómo hacer para que de el número de cifras de un número, me ayudáis?


Título: Re: Ecuaciones (BATCH)
Publicado por: DA KILLER en 27 Junio 2010, 23:22 pm
Ahhh, se siente bien volver, hola a todos y hace un tiempo leo posetéo un contador de caracteres, te dejo el code original, a mi me sirvió bastante.

-= CODE =-

Código:
@echo off
:code
set /p "string=Cadena : "
if not defined string (goto:code)
set /a "contador=0"
:loop
if not defined string (goto:end)
set "string=%string:~1%"
set /a "contador+=1"
goto:loop
:end
echo %contador%
set /p "="
goto:code

Lo simple no le quita lo efectivo, solo tomas la variable "contador" y listo ::).

Saludos


Título: Re: Ecuaciones (BATCH)
Publicado por: FerJGS en 29 Junio 2010, 16:10 pm
Hola

Gracias, el código funciona bastante bien, pero me he dado ceunta de que no lo necesitaba. Estoy haciendo, como sabéis, una calculadora científica y la verdad me esta dando mucha pereza tener que sustituir todo por "multiplicable por decimales". No obstante, me armare de paciencia y terminare la parte de geometría. PERO NECESITO AYUDA CON LAS ECUACIONES.

¿Cómo hago para resolver ecuaciones de segundo grado tipo 3? -b +- V b²-4ac /2a

y ya que me pongo, cómo hago para resolver identidades notables y ecuaciones de dos incógnitas (doble ecuación)?  Ej:

{ 4x+y=6
{3x + 2y=7

???????????????????


Título: Re: Ecuaciones (BATCH)
Publicado por: flony en 29 Junio 2010, 18:00 pm
a modo de idea falta pensarlo un poco pero me sale con los datos que me diste
Citar
{ 4x+y=6
{3x + 2y=7
hay que fijarse si tiene errores..eso si con numeros ideales o decimales no se si sale
Código:
echo -------------------------------
echo   los datos se ingresan como
echo.
echo   ax+by=c
echo   dx+ey=f
echo.
echo en caso de no tener munero vale uno
echo si no tiene valor poner cero
echo   -----------------------------
echo.
echo ingrese a
set /p a=
echo ingrese b
set /p b=
echo ingrese c
set /p c=
echo ingrese d
set /p d=
echo ingrese e
set /p e=
echo ingrese f
set /p f=

set /a numerador_y=(%a%*%f%)-(%d%*%c%)
set /a denominador_y=(-%d%*%b%)+(%e%*%a%)


set /a numerador_x=(-%c%*%d%*%b%)+(%c%*%e%*%a%)-(%b%*%a%*%f%)+(%d%*%c%*%b%)
set /a denominador_x=(-%d%*%b%*%a%)+(%e%*%a%*%a%)

echo el numerador de y es %numerador_y%
echo el denominador de y %denominador_y%
echo el numerador de x es %numerador_x%
echo el denominador de x %denominador_x%
echo divida ud...puede ser que de decimales
pause >nul
es lo que salio  :P....y sobre la raiz cuadrada me acorde algo parecido estudiaba para matematicas pero para contador publico...pero si se puede sacar manalmente te dejo un ejemplo
Citar
http://autorneto.com/referencia/matematica/como-sacar-la-raiz-cuadrada-de-un-numero-manualmente/


Título: Re: Ecuaciones (BATCH)
Publicado por: FerJGS en 30 Junio 2010, 00:28 am
Gracias por el código, me vendrá muy bien.

En cuanto a las ecuaciones de segundo grado de tipo 3, yo se hacer perfectamente la raíz cuadrada, el problema es principalmente lo de los números negativos, que cambia de signo y todo eso. Ahí está la dificultad, ¿alguien me ayuda? no puedo pedir que ingresen el número con el signo porque si no, la variable no es numérica y no puedo sumarla.

Y también he preguntado sobre como hacer identidades notables. Pero muchas gracias por los códigos,me estáis ayudando bastante.


Título: Re: Ecuaciones (BATCH)
Publicado por: flony en 30 Junio 2010, 13:28 pm
lo de los signos deberias hacer un funcion en el codigo tuyo que la llamas con call para que no tarde y usar el concepto de lo absolutos para suma o resta...seria ver cual es mas grande y que signo tiene y ese queda  :rolleyes:....y la multiplicacion o division seria puro regla de signos y ponerlo con el resultado pero no como una variable numerica...en ambos casos suma o multiplicacion hacerlo con extraccion de caracteres seria con un if para que se fije si tiene el simbolo -  :silbar:...me pongo a pensar algo y veo  :P...pero bue para mi que algun chango (pibe en catamarca argentina) que conozca mas de batch se juega y te da una mano  ;D


Título: Re: Ecuaciones (BATCH)
Publicado por: FerJGS en 30 Junio 2010, 15:46 pm
No he entendido nada jeje...¿Podríais explicármelo mejor? Y lo de las identidades notables ¿cómo hago para diferenciar si tiene x y exponente? se pueden usar filtros con los if (*,?)como hago para separar tres dígitos en variables?

Eso me vendrá también muy bien para lo de las ecuaciones de 2º grado.


Título: Re: Ecuaciones (BATCH)
Publicado por: flony en 30 Junio 2010, 20:25 pm
Como hago para separar tres digitos en variables?
es un tutorial de....bue no recuerdo y no quiero hacer plagio  :rolleyes:...pero lo busco y lo pongo
respuesta  ;) a leer  ;D

Citar
Extracción de carácteres:


Bien esta es una parte muy interesante, nos permita obtener "trozos" de variables llamados subcadenas, existen varias formas para ello, siendo la principal:
Código:
SET VariableResultado=%VariableOriginal:~m,n%

Almacena en la VariableResult ado la subcadena que existen en la VariableOrigin al desde la posición "m" durante "n" caracteres.

Ejemplo:
Código:
SET VAR=123456789
SET RES=%VAR:~3,2%
ECHO %RES%

Mostraría por pantalla:
45 (los dos caracteres a partir del tercero)

Como en la sustitución de caracteres, la VariableResult ado y la VariableOrigin al pueden ser las mismas.

Si "m" o "n" son iguales a 0 pueden omitirse, por ejemplo:
Código:
SET VAR=123456789
SET RES1=%VAR:~,5%
SET RES2=%VAR:~0,5%
IF %RES1%==%RES2% ECHO Funciona
ECHO %RES1%=%RES2%

Mostraría por pantalla, "Funciona" y después:
12345=12345

Lo mismo con el siguiente code:
Código:
SET VAR=123456789
:: Lo siguiente significa extraer a partir del caracter 5º hasta el final
SET RES1=%VAR:~5%
SET RES2=%VAR:~5,4%
IF %RES1%==%RES2% ECHO Funciona
ECHO %RES1%=%RES2%

Mostraría primero por pantalla "Funciona" y después:
6789=6789

Estos métodos abreviados son útiles para cuando no conocemos el numero de caracteres de la variable, sobre todo el 2º, ya que si queremos extraer los 3 últimos caracteres pero no sabemos a partir del cual seria eso no lo podríamos hacer.

Ejemplos bastante usados:
Código:
SET DIA=%DATE:~,2%
SET MES=%DATE:~3,2%
SET AÑO=%DATE:~6%

Lo mismo para sacar las horas, minutos y segundos de la variable %TIME%, etc...

Fin de la 1º Clase, si tenéis dudas posteralas que las resolveré, si tenéis criticas ponerlas también.
y para no desmerecer a los chicos del foro aca esta el de ellos   ;-)
http://foro.elhacker.net/scripting/programacion_batch_avanzada_nuevo-t132924.0.html (http://foro.elhacker.net/scripting/programacion_batch_avanzada_nuevo-t132924.0.html)

y sobre identidades notables una vez obtenida la formula de bascara tenes los posibles binomios que la conforman el polinomio de la identidad y para pensar en algebra teorica...la x es solo un numero que no conoces...a ver si lo ves tranqui vas a ver que el resultado de obtener por ejemplo
Citar
(a ± b)^2 = a^2 ± 2 · a · b + b^2
la parte (a ± b)^2 es el resultado usando bascara del polinomio a^2 ± 2 · a · b + b^2 y que tenga una x lo unico que hace es que se multiplique en cada termino



Título: Re: Ecuaciones (BATCH)
Publicado por: FerJGS en 7 Julio 2010, 12:13 pm
Gracias, aunque eso me lleva a preguntar, ya que mencionas que los ceros se omiten....¿cómo hago para que reste con un cero delante?

Lo que quiero hacer es que al restar 11040 - 11000 me de 040, y no 40. Es para unos decimales, si puede ser.

Ahora estoy de vacaciones pero me llevo el portátil, solo tengo Internet durante unas horas, voy a ir programando pero, por si no lo he dicho antes, esto es para una calculadora científica y completa y ahora estoy con el apartado de geometría. Si me surge alguna duda, ya os la preguntaré...Cuando termine el apartado, que me va a costar porque es muy completo, ya me pondré con ecuaciones. Pero gracias por vuestros códigos, estoy seguro de que me será útil ese último de separar variables.


Título: Re: Ecuaciones (BATCH)
Publicado por: leogtz en 7 Julio 2010, 23:32 pm
Es cuestión de concatenar un 0 antes de la expansión de la variable:
Código
  1. set /a operacion=11040 - 11000
  2. echo Resultado : %operacion%
  3. set operacion=0%operacion%
  4. echo Resultado : %operacion%
  5.  


Título: Re: Ecuaciones (BATCH)
Publicado por: FerJGS en 8 Julio 2010, 18:23 pm
Lo había pensado y tal pero ese no es exactamente el problema.

Lo que quiero hacer es que me de el resultado 11,04

entonces lo que yo hago es

11040/1000 -->  11
11*1000 -->11000
11040-11000--->>40  y tendría que darme  040 para así poder hacer

%11% , %040%

pero las que no llevan un 0 delante como por ejemplo 11.500 (11.5) no necesito poner el 0 delante. ¿Cómo lo hago?

Y POR CIERTO

tengo un problema gordo chicos, necesito que me ayudéis un poco.

al hacer  2500*3500*31416 me da 12093056, y el resultado real es 274890000000

¿Por qué pasa esto? me hace, junto con lo de arriba, que todo tenga posibilidad de fallo. Ayudadme por favor.


Título: Re: Ecuaciones (BATCH)
Publicado por: leogtz en 8 Julio 2010, 22:27 pm
Lo había pensado y tal pero ese no es exactamente el problema.

Lo que quiero hacer es que me de el resultado 11,04

entonces lo que yo hago es

11040/1000 -->  11
11*1000 -->11000
11040-11000--->>40  y tendría que darme  040 para así poder hacer

%11% , %040%

pero las que no llevan un 0 delante como por ejemplo 11.500 (11.5) no necesito poner el 0 delante. ¿Cómo lo hago?

Y POR CIERTO

tengo un problema gordo chicos, necesito que me ayudéis un poco.

al hacer  2500*3500*31416 me da 12093056, y el resultado real es 274890000000

¿Por qué pasa esto? me hace, junto con lo de arriba, que todo tenga posibilidad de fallo. Ayudadme por favor.

Batch no maneja números muy grandes, estás fuera del rango de los enteros.


Título: Re: Ecuaciones (BATCH)
Publicado por: FerJGS en 12 Julio 2010, 11:47 am
Mmm ya...pues es una faena. Bueno, de momento pues me conformo con saber cómo hacer para calcularlas aunque los números sean correctos, me basta con saber que soy capaz de hacer lo que me propongo, de modo que voy a reservar BATCH para base, me interesa saber cómo hacer eso de las ecuaciones de 2º grado, identidades notables y de doble incógnita, después ya solo necesito aprender más como por ejemplo lo del debug, el ratón en batch y cosas así. Después me iniciaré en C.

¿ Podéis ayudarme a sacar esas cosas de las ecuaciones? Gracias.


Título: Re: Ecuaciones (BATCH)
Publicado por: flony en 12 Julio 2010, 16:27 pm
a ver estaba viendo en el foro y encontre esto
http://foro.elhacker.net/scripting/libreria_de_funciones_y_scripts_batch_actualizado_260507-t163184.0.html (http://foro.elhacker.net/scripting/libreria_de_funciones_y_scripts_batch_actualizado_260507-t163184.0.html)
Citar
Calcular raices


Código:
:: Autor Sdc
@echo off
if NOT "%~1"=="vv" (cmd /v /c %~nx0 vv^&exit&goto:EOF)
set /P x=Valor:
FOR /L %%i IN (%x%,-2,1) DO (
set /A y=%x%/%%i
IF /I !y! EQU %%i (
echo %%i
goto:EOF
)
)



Código:
:: Autor ne0x
@echo off
set /P x=Valor :
:BUCLE
set /a cont=cont+1
set /a multi=cont*cont
if %multi%==%x% echo Raiz: %cont%&pause&goto:EOF
if %multi% GTR %x% echo El valor no tiene raiz entera&pause&goto:EOF
goto BUCLE



Título: Re: Ecuaciones (BATCH)
Publicado por: FerJGS en 12 Julio 2010, 18:43 pm
Gracias, ese código ya lo tengo, el problema estaba, más bien, en el tema de los números negativos y tal. Y lo de calcular con variables de cadena (4x por ejemplo)
si me podéis ayudar...