Comunidad de diseño web y desarrollo en internet online

[MATEMATICA] como comparo formulas SIN QUE IMPORTE EL ORDEN

Citar            
MensajeEscrito el 17 Abr 2005 07:15 pm
Saludos

Soy un colaborador de un departamento de la Unviersidad de Córdoba (UCO) a la que le han encargado un "trabajito" en Flash> y por el cual necesito un poco tu ayuda.

Me gustaria que me respodierais a 2 preguntas, bueno, mas bien una pregunta y un problema.

Mi pregunta es algo simplona, pero no he encontrado respuesta depués de haber buscado en mil sitios: ¿Si en una pelicula de flash hago un loadMovie, las variables de la primera pelicula siguen en la segunda? Si no es asi, ¿Hay alguna manera de que me las conserve? pues las necesito en consecutivas películas.

Y luego mi problema, la película en si trata de una "miniaplicación
interactiva" para resolver un problema de estructuras, en la que para ver si saben lo que hacen los usuarios, tienen que escribir unas formulas en una especie de calculadora que he creado, con las componentes de las formulas que son los botones, para saber si el sistema esta en equilibrio. El modelo del problema en si, ya esta metido, con los datos que ellos deseen (esas son las variables que necesito que carguen en la segunda película, por si es de tu interés). Bueno se me olvido decirte que la aplicación esta dividida en módulos y cada uno de ellos es una pelicula independiente que se carga cuando el anterior termina.

Hasta ahí, todo va bien, el problema viene a la hora de saber si lo que escriben esta bien, pues como seguramente sabrás, la propiedad conmutativa manda en las matematicas y es lo mismo si escriben a= d+(b*c) que a=(b*c)+d, o cualquier combinación que se te ocurra hacer con ella. Pues bien, me gustaria que me respondierais o me guiarais sobre algun metodo (con strings, ya que las formulas se guardan como variables strings) para que compare dichas fórmulas sin importar el orden. O si seria mejor que las formulas las guarde como otro tipo de variables y el metodo de comparación mas idoneo... o cualquier idea que se os ocurra para conseguirlo, pues la verdad ando un poco perdido, yevo rompiendome la cabeza más de una semana y no se me ocurre como hacerlo. A ver si puedes ayudarme.

Gracias por vuestra atención

Por frechy

19 de clabLevel



 

msie
Citar            
MensajeEscrito el 18 Abr 2005 10:40 am
Pues mira, eso que estas pidiendo ..... lleva mucho curro!! es decdir, tendrias que hacer un mini-programa de matematikas capaz de resolver esas ecuaciones lo cual pues implicaria hacer miles de condicionales para los [] () + - / * := ^ etc etc

Si quieres mi consejo, si la cantidad de formulas es FINITA, es decir, hay una cantidad prefijada de formulas, y el numero no es muy elevado

escribiria en un array todas las posibilidades de combinacion que existen, despues recorreria el array para ver si coinciden con el del usuario, aun asi habria problemas con los espacios, mayusculas y minusculas etc etc pero seria poner menos trabajo....

Por _CONEJO

BOFH

7639 de clabLevel

17 tutoriales
21 articulos

 

mozilla
Citar            
MensajeEscrito el 30 May 2005 05:23 pm
Hola

Bueno, no sé si estaré muy en lo cierto porque hay que ponerse a hacerlo para entrar bien en la dinámica; pero a lo mejor lo solucionarías más fácilmente si lo programases de forma recursiva y con funciones en vez de procedimientos, ya que puedes aplazar el cálculo de resultados finales hasta tener todos los parciales. Con eso conseguirías identificar a + y al encontrar el paréntesis comenzar llamada a función nueva y hacer b * c y con el resultado evaluar a + resultado.
Ya sería más difícil si pretendes poner peso de agrupamiento a los operadores y suponer que * se agrupa antes que + aunque no lleve paréntesis; pero al fin y al cabo, las calculadoras no hacen esto, si no que siempre agrupan a izquierdas en ausencia de paréntesis.

Espero que te sirva de algo
Un saludo

Por Caickul

1 de clabLevel



Genero:Masculino  

Madrid (España)

msie
Citar            
MensajeEscrito el 31 May 2005 03:41 am
Acerca de la segunda pregunta...te dire que ando construyendo una calculadora para una aplicacion de e-learning (debo ternerla lista para el miercoles).....el mejor metodo que encontre es ir guardando los datos en un array, como dice Icem4n, pero no es necesario usar miles de condionales, ya que hay un metodo mas efectivo.

Basicamente el concepto se trata de mostrar una cosa (los operadores y los numeros) y en un array ir guardando las equivalencias. Despues con un simple for ejecutas todo de un golpe. Este no es el codigo de la calculadora, pero si una idea de como debes estructurarlo.

Código :

var real:String = "1*3-54/4";


esto equivaldria a una parte oculta :

Código :

var hidden:Array = ["1", "multiplicate", "3", "less", "54", "divide", "4"];


entonces antes deberias tener unas funciones de este tipo :

Código :

function multiplicate (a:Number, b:Number):Number {
    return a * b;
}
function less (a:Number, b:Number):Number {
    return a + b;
}
function divide (a:Number, b:Number):Number {
    return a / b;
}


entonces en un for ejecutarias los siguiente

Código :

var i:Number;
var operation:Number;
var temp:Number;
for (i=0; i<hidden.lenght; i++) {
  if (i%2 == 0 || i==0) {
     temp = Number(hidden[i]); 
  }
 else { 
    operation = hidden[i](operation, temp);
 }
}
trace (operation);


Asi podrias ejecutar las funciones que hacen las operaciones sin importar que contenga el array hidden....mas o menos asi es la idea, pero se puede hacer mas segura para que no se ingresen datos que no vayan con la estructura. Con esta idea puedes extenderlo a cuantas operaciones quieras.

P.D. Hay que checar el codigo, puede que no funcione, no lo probe.

Saludos!

Por tangamampilia

.GAIA Developer

961 de clabLevel


6 articulos

Genero:Masculino   Anime Bloggers

México, D.F.

safari
Citar            
MensajeEscrito el 31 May 2005 10:12 am
Gracias, pero encontre otra forma de hacerlo, algo muy parecido a lo q me has dicho pero el problema es algo mas complejo.

Te explico: la formula seria del tipo (A+(B*(C+A)*(D/B))/D ( creo q si resuelve esta formula resolvera la gran mayoria de las q necesito... :crap: )

Dividi el string en un array por myarray.split("").

Hago q sustituya las variables (A,B,C...) por un valor predeterminado mediante eval.

y en un arrays me mete las posiciones de inicio de parentesis y en otro las de final de parentesis.

Luego defino las funciones para las operaciones suma, resta, multiplicacion y division.

El unico problema q tengo ahora es q tengo q crear una funcion para q las posiciones de los parentesis me las ordene en el array para q corresponda en la misma posicion de los arrays el inicio del primero con el final del primero (hay q tener en cuenta q puede haber parentesis dentro de otros, por eso hago esto, para q me vaya realizando primero los parentesis de dentro hacia afuera y asi irlos eliminando).

De todas maneras en cuanto lo perfile del todo, lo subire aqui ya q me esta suponiendo mucho trabajo :evil: y creo q merece la pena q la gente q tenga el mismo problema pueda usarlo, como yo he usado algun trozo de codigo q he visto por aki.... :oops:

muchas gracias.

Por cierto si a alguno se le ocurre como ordenar las posiciones de parentesis, no dudeis en decirlo, eh? :P

Por frechy

19 de clabLevel



 

msie
Citar            
MensajeEscrito el 31 May 2005 01:08 pm
Bueno, Sr Daniel del Rancho... lo de miles de condicionales me referia a que... en fin, las operaciones tiene un "orden" MUY importante en una expresion sin parentesis podria ser mas o menos sencillo controlar las operacion pero... cuando empiezas a meter parentesis... pufff la cosa se lia un monton.

Por _CONEJO

BOFH

7639 de clabLevel

17 tutoriales
21 articulos

 

firefox
Citar            
MensajeEscrito el 31 May 2005 06:58 pm

ICEM4N escribió:

Bueno, Sr Daniel del Rancho... lo de miles de condicionales me referia a que... en fin, las operaciones tiene un "orden" MUY importante en una expresion sin parentesis podria ser mas o menos sencillo controlar las operacion pero... cuando empiezas a meter parentesis... pufff la cosa se lia un monton.


Hola ICEM4N!
Para ese caso puedes usar arrays bidimensionales y una funcion recursiva. No es necesario usar tantos condicionales.

Por ejemplo

Código :

var real:String = "1*(5-7)/2"


en arrays seria asi

Código :

var hidden:Array = ["1", ["5", "less", "7"], "divide", "2"]


Lo unico que habria que hacer es una funcion recursiva que cheque los arrays y devuelva los datos. De esta manera el codigo quedaria muy elegante, y muy facil de expandir. Como te comento, en realidad la operacion no se acompleja mucho.

Saludos!

Por tangamampilia

.GAIA Developer

961 de clabLevel


6 articulos

Genero:Masculino   Anime Bloggers

México, D.F.

safari
Citar            
MensajeEscrito el 31 May 2005 11:13 pm
pero si se complican busquen en google, resolucion de ecuaciones en string por medio de pilas y colas

es mas o menos como se ha dicho, guardan los numeros en un array los operadores en otro y los parentesis en otro, en realidad no es tan dificil pero si lleva un tiempo para resolverlo

repito este codigo ya se ha heho antes no intentes reinventar la rueda busca un codigo ya hecho en cualquier lenguaje no importa todos se parecen y luego haces el tuyo a partir de ese

Saludos

Por Prozac

SWAT Team

1546 de clabLevel

1 tutorial

Genero:Masculino   SWAT

donde se regresa el viento

firefox
Citar            
MensajeEscrito el 31 May 2005 11:54 pm

Prozac escribió:

pero si se complican busquen en google, resolucion de ecuaciones en string por medio de pilas y colas

es mas o menos como se ha dicho, guardan los numeros en un array los operadores en otro y los parentesis en otro, en realidad no es tan dificil pero si lleva un tiempo para resolverlo

repito este codigo ya se ha heho antes no intentes reinventar la rueda busca un codigo ya hecho en cualquier lenguaje no importa todos se parecen y luego haces el tuyo a partir de ese

Saludos


Hola Prozac, no es por querer reinventar la rueda, es por el puro placer de adquirir conocimiento ;)

Creo que eso se puede entender...

Por tangamampilia

.GAIA Developer

961 de clabLevel


6 articulos

Genero:Masculino   Anime Bloggers

México, D.F.

safari
Citar            
MensajeEscrito el 01 Jun 2005 12:33 am
ojo yo no estoy diciendo lo contrario (tampoco digo copiar y pegar) incluso conseguirlo hecho en un alto nivel es de ayuda, ese es mi punto, una simple busqueda probablemente de mejores resultados, que estar deliberando sobre que metodo es mejor.

todos sabemos que hay 1001 maneras de resolver cualquier problema, solo digo que tome una base y a partir de alli trabaje su solucion, de repente no termine nada de la original, porque todos modificamos un codigo adquirido hasta que nos sintamos comodos con el, hasta que lo entendamos....

bueno se que no todos.... por eso entiendo tu aclaratoria :wink:

Saludos... 8)

Por Prozac

SWAT Team

1546 de clabLevel

1 tutorial

Genero:Masculino   SWAT

donde se regresa el viento

firefox
Citar            
MensajeEscrito el 01 Jun 2005 02:53 am
lo unico que puedo decir es que es demasiado terepeutico hacer eso lleva muchisisisisisisiisismo tiempo hacerlo pero seria bueno un programa asiii, que te rinda ;)

Por hackjasl

72 de clabLevel



 

msie
Citar            
MensajeEscrito el 01 Jun 2005 11:37 am
:lol: :lol: :lol: :lol:

tienes toda la razon hackjasl, yeva demasiado tiempo hacerlo, con lo facil q seria si crearan una funcion q lo hiciera.... :wink:

pero weno es mi curro y me las tengo q ingeniar... ^^ Por cierto muchas gracias por lo de "resolucion de ecuaciones en string por medio de pilas y colas" :o , lo buscare a ver q encuentro y si me sirve de algo, porque he intentado ayudarme de programas de calculadoras graficas pero no he sacado nada en claro...
:twisted:

gracias :)

Por frechy

19 de clabLevel



 

msie
Citar            
MensajeEscrito el 02 Jun 2005 12:07 am
por cierto tambien lo podras conseguir resuelto utilizando arboles...


SAludos

Por Prozac

SWAT Team

1546 de clabLevel

1 tutorial

Genero:Masculino   SWAT

donde se regresa el viento

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.