[QUOTE]Elmercillo01 wrote
Hola amigos del MUGPERU tengo una gran duda. Tengo que hacer un programa que me que dibuje (o me los imprima en cuadros) la descomposicion de una funcion matematica en orden de acuerdo a su prioridad de operadores:(+,-,*,/) Asi como el ejemplo siguiente A) X = 23 + 20 * ( 15 + lp ) ---------------------- FUNCIONMATEMATICA variable signo expresion1 ! ! --------------------------------------- X = numero signo expresion2 ! ! ----------------------- 23 + numero signo expresion3 &am;nbsp; ! ! ------------------------- 20 * numero signo variable 15 + lp
B) X = 20 - lp*3 +20 --------------------- FUNCIONMATEMATICA variable signo expresion1 ! ! -------------------------------------- X = numero&nbs; signo expresion2 ! ! --------------------------------------------- 20 - expresion3 signo numero --------------------- ! ! variable signo numero + 20 ≈nbsp; ! ! ! lp * 3
Nota: Algunas restricciones que no pueden existir mas de dos expresiones en una misma linea o mas de 2 operaciones. Siempre se empieza con una variiable de esta forma ( lp, y, mn34 ) y no debe empezar con una variable con numeros ( 67mlp, 8x, 23c ). Solo acepte los simbolos +, - , * , / , (, ).
Agradeceria mucho su ayuda.... ATTE. Elmer Carhuayo
[/QUOTE]
Este es un problema clasico de algoritmos. Bueno, podrias aplicar el algoritmo usando Pilas (ultimo en entrar, primero en salir), implementa las funciones Push y Pop de manejo de pilas como arreglo (lo puedes ver en cualquier libro de algoritmos)
Define un arreglo , no se de 1000 elementos tipo cadena.
Puedes seguir este algoritmo generico:
Sea cad = cadena de la formula y arr=arreglo los operadores son =,+,-,*,/,(,)
1. parte 1 = armar la pila de datos con los datos de variables, signos y numeros de la cadena Mientras no se acabe cad si cad(i) es un operador entonces push(cad(i), arr) i=i+1 caso contrario inicializar variable aux hasta que no se encuentre un operador o un espacio en blanco : aux = aux + cad(i) i++; push(aux,arr)
con esto ya tiene la pila de todos los elementos de tu funcion matematica.
2 Parte 2 = analisis de todos los elementos elemento = Pop (arr) Mientras no se culmine con todos los elementos de la pila ---armamos los elementos de la expresion = varexpresion Si elemento = ')' entonces-- sea fin de una expresion .......... Si elemento es (' entonces --- es inicio de una expresion si elemento es = '*' or '/' entonces -- analizar estos operadores son prioritarios ......... si elemento es '+' or '-' ..... si elemento es numerico -- es numero ...... si elemento es no numerico --es variable ......
Dibujar : expresion = varexpresion elemento = Pop (arr)
Bueno, ya el analisis de cada operador ya te los alucinas un poco ....espero haberte dado la idea.
|