Sacar numeros de una ecuacion? como?

Iniciado por Edu, 12 Marzo 2011, 00:34 AM

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

Edu

Estoy haciendo bue.. intentando.. hacer un programa para realizar Ecuaciones de Primer grado, segundo, tercero y hasta lo q me de mi cabezita.
La cosa es q el usuario podra poner por ejemplo:
2x-4+6
Y yo lo q quiero hacer es q pase por unos procedimientos q haran como un filtro y la iran acomodando a la ecuacion para q quede bien formada, la cosa es como hacerlo? xD Solo pido que me expliquen como hacer para sacar el numero 2, el numero 4, el 3 y el 6. Luego yo vere como hacer lo q sigue..

Para estar seguros prueben haciendo con esto: 50x-9+114-32x

Esque intente de todo un poco, asique espero q alguno lo sepa hacer ::)

Keyen Night

#1
Te recomiendo expresiones regulares y seguir las reglas obviamente como si estubieras haciendo a la mano mientras voy a ir probando =D

La solución, hay que intentar replicar los procedimientos:

50x - 9 + 114 - 32x = 0 -- Se iguala a 0

50x - 32x = 9 - 114 -- Los terminos independientes se agrupan del lado contrario a los dependientes y cambiadoles el signo

18x = 9 - 144 -- Se operan los terminos dependientes que tengan la misma variable

18x = (-105) -- Se operan los independientes

x = (-105) / 18 -- Se pasa el dependiente al otro lado de la igualdad

x = -5,833... -- Resultado final de X

(50 * (-5,833)) - 9 + 114 - (32 * (-5,833)) = 0 -- Comprobación de la ecuación
La Fé Mueve Montañas...
                                    ...De Dinero

La programación es más que un trabajo es más que un hobby es una pasión...

.mokk.

Cita de: Keyen Night en 12 Marzo 2011, 01:02 AM
Te recomiendo expresiones regulares y seguir las reglas obviamente como si estubieras haciendo a la mano mientras voy a ir probando =D

La solución, hay que intentar replicar los procedimientos:

50x - 9 + 114 - 32x = 0 -- Se iguala a 0

50x - 32x = 9 - 114 -- Los terminos independientes se agrupan del lado contrario a los dependientes y cambiadoles el signo

18x = 9 - 144 -- Se operan los terminos dependientes que tengan la misma variable

18x = (-105) -- Se operan los independientes

x = (-105) / 18 -- Se pasa el dependiente al otro lado de la igualdad

x = -5,833... -- Resultado final de X

(50 * (-5,833)) - 9 + 114 - (32 * (-5,833)) = 0 -- Comprobación de la ecuación


De esa forma es como yo lo hacia jeje bueno en la preparatoria, y me fue bastante bien respecto a examenes, puesto que lo hice en java para mi cel y solo era cuestion de meter la ecuacion y listo tenia resultado jeje

Edu

Jejej pero si yo se hacer ecuaciones xD, pero lo q no se es como hacerlo programando, es decir lo q pedi es q me digan como saco los numeros y con el dato de si suma o resta, o divide o multiplique.

50x-9+114-32x = 0

Que el usuario ponga eso en un textbox y q al pulsar el boton guardas en distintas variables string el "50" en otra el "-9", en otro el "+114" en otro el "-32", por eso es lo complicado xD

Keyen Night

Yo estoy haciendo una clase para probar comence por hacer un .Replace(" ","") y si no se cumplia la condiciòn .EndsWith("=0") se agregaba el "=0", luego tomar con expresiones regulares los nùmeros que esten rodeados por "-, +, / y *" para hacer la lista de terminos independientes y para sacar la lista de terminos independientes expresiones regulares para capturar nùmeros que esten pegados a una letra.

Luego una funciòn que separe la ecuaciòn con un Split("=") e ir pasando los independientes para el otro lado multiplicandolos *(-1) si es suma o resta y remplazando / por * y * por /, luego no me acuerdo del nombre de una funciòn que resuelve operaciones matemàticas desde un string para que resuelva los terminos independientes despues con los terminos dependientes se agrupan dependiendo su variable se les quita la letra y se operan luego se le añade la correspondiente letra al resultado final y se vuelven a unir las 2 partes el unico termino indenpendiente que quedo del lado izquierdo se pasa para el otro lado y se opera el lado derecho y fin. Debes investigar sobre las expresiones regular yo no se mucho por eso no te doy ejemplos pero por lo menos la que captura terminos independientes quisas sea asì:

^(+|-|/|*)[0,9]{0,19}

Pero lo màs probable es que tenga algo mal :xD
La Fé Mueve Montañas...
                                    ...De Dinero

La programación es más que un trabajo es más que un hobby es una pasión...

Edu

Esta bien como dijiste, esos pasos son los q estoy haciendo, pero igual por ahora solo pido q me pongan el codigo solamente para sacar los numeros de la ecuacion, desp yo los paso y todo eso.
No se compliquen q yo por ahora pido eso solamente :S Asique porfavor lean bien lo q pido porq solo necesito el codigo ya q la idea la tengo pero me confundo y no anda.

.mokk.

#6
Una cosa lo haras en consola, Aplicacion o como ?
Si fuera en consola aqui esta una forma en C++

# include <stdio.h>
#include <iostream>
/* ecuacion de segundo grado tiene la forma
ax+b= o
x= -b/a
*/

float x,a,b;
main()
{

printf("\nIngrese valores de a:");
scanf("%d",&a);
printf("\n");
printf("\nIngrese valores de b:");
scanf("%d",&b);
printf("\n");

if (a !=0){
x=(-b/a);
printf("\nLa solucion es %1.2f:",x);

}
else
printf ("\nerror, no es una ecuacion de primer grado.. es una constante");
printf("\n");


printf("\nFin programa");
printf("\n");
system("pause");
}


Ahorita estoy viendo sobre mejor solo colocar toda la ecuacion y ya que lo resuleva solo aunque no consigo nada aun u_u

Código (java) [Seleccionar]

String funcionAritmetica = "50x-9+114-32x";

String[] operadores = funcionAritmetica.split ("\\d+");
String[] numeros = funcionAritmetica.split ("\\p{P}");



Edu

Ta gracias, no me han entendido, ni en este post ni en otro q hice talvez no tenia q decirles q es lo q estaba haciendo.
Repito:

Quiero q cuando el usuario en un textbox escriba una ecuacion  por ejemplo 50x-9+114-32x=0 y presione un button, en mi codigo obtenga en este caso un string = "50" otro string = "-9", otro string = "+114" y otro string = "-32".
Solo eso, asique les pediria por favor q lean este post y prueben haciendo lo q pido aca con esa ecuacion de ejemplo pero q tambien funcione para otra ecuacion como esta 8x-2=0

Desde ya gracias! espero q entiendan xD

.mokk.

Cita de: XXX-ZERO-XXX en 13 Marzo 2011, 21:29 PM
Ta gracias, no me han entendido, ni en este post ni en otro q hice talvez no tenia q decirles q es lo q estaba haciendo.
Repito:

Quiero q cuando el usuario en un textbox escriba una ecuacion  por ejemplo 50x-9+114-32x=0 y presione un button, en mi codigo obtenga en este caso un string = "50" otro string = "-9", otro string = "+114" y otro string = "-32".
Solo eso, asique les pediria por favor q lean este post y prueben haciendo lo q pido aca con esa ecuacion de ejemplo pero q tambien funcione para otra ecuacion como esta 8x-2=0

Desde ya gracias! espero q entiendan xD

Pues al final lo he hecho asi como lo dices, aunque pues no en NET, sino en Java aun asi espero y te pueda ayudar aunque segun recuerdo es casi la misma forma en VB O C#

Código (java) [Seleccionar]


public class Ecuaciones
{

public static void main(String[] args)
{
String ec;
double x;
ec = "50x-9+114-32x";
x = resolver(ec);
mensaje("El valor de x: " + x);
}

private static void mensaje(String msg)
{
System.out.println(msg);
}

private static double resolver(String ec)
{
double x=0;
String [] n= new String[ec.length()];
int k =0;
for(int i=0;i<ec.length();i++)
{
if(Character.isDigit(ec.charAt(i)) == true || ec.charAt(i) == 'x')
{
if(i==0)
{
n[k] = String.valueOf(ec.charAt(i));
}else{
n[k] = n[k] + ec.charAt(i);
}
}else{
k+=1;
n[k] = String.valueOf(ec.charAt(i));
}

}
String [] nn = new String[k+1];
for(int i=0;i<=k;i++)
nn[i] = n[i];

for(String cosa:nn)
{
mensaje(cosa);
}
//50x-9+114-32x
return x;
}

   
}