MUGPERU
  Search 
Monday, January 05, 2009 ..:: Foros de Discusión ::.. Register  Login
Foros MUGPERU Minimize
Subject: Identificar cadenas
Prev Next
You are not authorized to post a reply.

Author Messages
Elmercillo01
Posts:13

29/06/2005 09:41 PM  

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
                                                                 &nbs;!         !        -------------------------
                                                                 20       *         numero    signo   variable
                                                                                            15         +           lp    

B) X =  20 - lp*3 +20    
---------------------
                                                FUNCIONMATEMATICA
      
variable    signo                    expresion1       
    !             !          --------------------------------------
    X           =            numero    signo   &nbs;        expresion2
                                    !              !            ---------------------------------------------
                                    20           -               expresion3                     signo        numero
                                                                ---------------------            !                  !
                                                                variable   signo   numero        +               20
                                       &nbp;                             !            !            !
                                                                       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

ospochu
Posts:33

01/07/2005 03:54 PM  
[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.

 

   

 

 

You are not authorized to post a reply.
Forums > Lenguajes de Programación > C++ > Identificar cadenas



ActiveForums 3.7
        
Copyright 2001-2008 MUGPERU   Terms Of Use  Privacy Statement