Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: GominaTilted en 14 Abril 2019, 19:36 pm



Título: Ayuda con la conversión de notación infija a postfija
Publicado por: GominaTilted en 14 Abril 2019, 19:36 pm
Buenas, tengo un código que supuestamente pasa una expresión aritmética escrita con notación infija a postfija, pero la realidad es que no hace nada, o eso parece:

Código:
void Expresion :: ConvertirEnPostfija ()
{
    Pila p;
   
    string chara, aux;
   
    for (unsigned int i = 0; i < infija.size(); i++)
    {
       
        chara = infija[i];
       
        if (chara == "(")
        {
            p.Apilar(chara); 
}

else
if (chara == ")")
{
p.CimaPila(aux);
while (!(p.PilaVacia() && aux == "("))
        {
        p.Desapilar();
        postfija.push_back(aux);
        p.CimaPila(aux);
}

if (aux == "(")
   p.Desapilar();
   
else
cerr << "ERROR";     
}

else
if (chara == "+" || chara == "-" || chara == "*" || chara == "/" || chara == ")")
{
p.CimaPila(aux);

while (!p.PilaVacia() && !(chara == "(" && aux >= chara))
{
p.Desapilar();
postfija.push_back(aux);
p.CimaPila(aux);
}

p.Apilar(chara);
}

else
   postfija.push_back(chara);
     
while (!p.PilaVacia())
    {
          p.CimaPila(aux);
p.Desapilar();
postfija.push_back(aux);   
    }
    }
     
    return;
}

También necesito ayuda para que deje introducir la expresión con espacios en blanco, ya que usando "cin" salta al último caso del switch en el main, pero el getline me da error.
Código:
switch (opcion) 
{

case 1:
cin >> aritmetica;
exp.PonerExpresion(aritmetica); 
break;


/*Mas opciones que no vienen al caso*/

case 0:
cout << "fin del programa." // salta directamente aquí
break;

default:
            cout << "Opcion no valida" << endl;
}


Título: Re: Ayuda con la conversión de notación infija a postfija
Publicado por: Beginner Web en 18 Abril 2019, 07:36 am
La verdad que no se

Código
  1. void postfija(tcad &cadena)
  2. {
  3. int i, j=0;
  4. tpila pila;
  5. tcad expresion_postfija;
  6. init_stack(pila);
  7. for(i=0;i<strlen(cadena);i++){
  8. if(isdigit(cadena[i])){
  9. expresion_postfija[j]=cadena[i];
  10. j++;
  11. }
  12. else{
  13. if(empty_stack(pila)==true)
  14. push_stack(pila,cadena[i]);
  15. else{
  16. if(prioridad(cadena[i],top_stack(pila))==true)
  17. push_stack(pila,cadena[i]);
  18. else{
  19. while(empty_stack(pila)==false && prioridad(cadena[i],top_stack(pila))==false){
  20. expresion_postfija[j]=pop_stack(pila);
  21. j++;
  22. }
  23. push_stack(pila,cadena[i]);
  24. }
  25. }
  26. }
  27. }
  28. while(empty_stack(pila)==false){
  29. expresion_postfija[j]=pop_stack(pila);
  30. j++;
  31. }
  32. expresion_postfija[j]='\0';
  33. cout<<"Expresion postfija: "<<expresion_postfija<<endl;
  34. }


Código
  1. bool prioridad(char a, char b)
  2. {
  3. int operador1, operador2;
  4. switch(a){
  5. case '^': operador1=2;break;
  6. case '*': case '/': operador1=1;break;
  7. case '+': case '-': operador1=0;break;
  8. }
  9. switch(b){
  10. case '^': operador2=2;break;
  11. case '*': case '/': operador2=1;break;
  12. case '+': case '-': operador2=0;break;
  13. }
  14. return operador1>operador2;
  15. }