none
Infijo a Postfijo. Parentesis VISUAL C++ RRS feed

  • Pregunta

  • Tengo el siguiente programa, tiene que convertir una expresion de infijo a postfijo ya sea que se ocupen parentesis, llaves o corchetes.

    El problema esta que cuando mando a imprimir ((A+A)+((A+A)+A)+A) por ejemplo, me manda como respuesta AA+)AA+)A+)A+)((+(( en vez del resultado correcto AA+AA+A++A+

    Modificando la parte de la función postfijo que dice "if(isEmpty()|| symb!=')'||']'||'}')" por 

     if(isEmpty()||symb!=')')

    me funciona perfectamente, pero necesito que funcione con todos los parentesis.

    ¿Alguna idea?

    Gracias!

    //////////////////////////////////////////////////////////////////

    int prec(char op1,char op2)
    {
    int jer1;
    int jer2;

    if(op1=='{'||op1=='('||op1=='[')
    return 0;
    if(op1==')'||op1==']'||op1=='}')
    return 4;
    if(op2==')'||op2=='}'||op2==']')
    return 4;
    if(op2=='('||op2=='['||op2=='{')
    return 0;

    switch(op1)
    {
    case('^'):
    jer1=3;
    break;
    case('*'):
    jer1=2;
    break;
    case('/'):
    jer1=2;
    break;
    case('+'):
    jer1=2;
    case('-'):
    jer1=1;
    break;
    default:
    break;
    }

    switch(op2)
    {
    case('^'):
    jer2=3;
    break;
    case('*'):
    jer2=2;
    break;
    case('/'):
    jer2=2;
    break;
    case('+'):
    jer2=1;
    break;
    case('-'):
    jer2=1;
    break;
    default:
    break;
    }

    if(jer1>=jer2)
    return 1;
    else
    return 0;
    }



    void postfijo(char exp[])
    {
    char post[50];
    char symb, topsymb;
    int i=0, j=0;

    while (exp[i]!=0)
    {
    symb=exp[i];
    if(!(symb == '+' || symb == '-' ||symb == '*'||symb == '/' || symb =='^'|| symb== '('|| symb== ')'|| symb== '{'|| symb== '}'|| symb== '['|| symb== ']'))
    {
    post[j]=symb;
    j++;
    }
    else
    {
    while(!isEmpty() && prec(stackTop(), symb))
    {
    topsymb = pop();
    post[j] = topsymb;
    j++;
    }
    if(isEmpty()|| symb!=')'||']'||'}')
    {
    push(symb);
    }
    else
    {
    topsymb=pop();
    }
    }
    i++;
    }
    while(!isEmpty())
    {
    topsymb=pop();
    post[j]=topsymb;//symb
    j++;
    }
    post[j]=0;
    printf("%s\n", post);
    }
    jueves, 7 de marzo de 2019 16:25

Todas las respuestas

  • Hola  

    Gracias por levantar tu consulta en los foros de MSDN. Con respecto a la misma, te comento que estaremos realizando una revisión a profundidad acerca del inconveniente que se te está presentando.

    Proporcionaremos una respuesta lo más pronto posible.

    Gracias por usar los foros de MSDN.

    Pedro Alfaro
     ____

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde. 

    Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft.  

    Este contenido es proporcionado "tal cual" y no implica ninguna responsabilidad de parte de Microsoft.
    viernes, 8 de marzo de 2019 18:15