/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

Problemas algoritmo de infija a posfija (con pilas)

 
      Índice del Foro elrincondelc.com -> C/C++ en General
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
dpm110293



Registrado: 18 Feb 2013
Mensajes: 1

MensajePublicado: 18/02/2013 8:36 pm
Título: Problemas algoritmo de infija a posfija (con pilas)

Hola a todos, quiero saber cual es el problema con el siguiente codigo que implemente, ya que al ejecutarlo y darle la expresion en infija, imprime basura y no hace nada, ya lo vi varias veces y no encuentro cual es mi error

Saludos y muchas gracias!!

#include<stdio.h>
#include "Pila.h"

int esoperando(Elem e){
return esmin(e)||esdig(e);
}
int esmin(Elem e){
return(e>='a') && (e<='z');
}
int esdig(Elem e){
return (e>='0')&&(e<='9');
}
int espari(Elem e){
return (e=='(');
}
int espard(Elem e){
return (e==')');
}
int esoperador(Elem e){
return (e=='*')||(e=='/')||(e=='+')||(e=='-');
}
int prec(Elem e){
if(e=='!')
return 3;
else{
if((e=='/')||(e=='*'))
return 2;

else {
if((e=='+')||(e=='-'))

return 1;
}
}
}


int main(int argc ,char *argv[]){
int i=0;
Pila p=empty();
char *in=*(argv+1);
while(in[i++]!='\0'){
if(esoperando(in[i++]))
putchar(in[i]);

else
if(esoperador(in[i++])){
if(isempty(p))
p=push((in[i]),p);
else{
if((prec(in[i++])>=(prec(top(p)))))
p=push((in[i]),p);
else{
if((prec(in[i++])>=(prec(top(p)))))
p=pop(p);
}
}
}
else{
if(espard(in[i++])){
while(!espari(in[i])){
p=pop(p);
putchar(in[i]);
}
}
}
i++;
//pElem(in[i],p);
}
while(!isempty(p)){
//putchar(top(p));
putchar(top(p));
p=pop(p);
//i++;
// puts(in);
}
while(in[i]!='\0'){
putchar(in[i++]);
// puts(in);
//i++;
}
puts(in);
return 0;
}
Volver arriba
rir3760



Registrado: 01 Oct 2004
Mensajes: 7530
Ubicación: Mexico

MensajePublicado: 19/02/2013 9:33 am
Título:

Hola

Bienvenido a los foros. Por favor lee sus reglas.

A primera vista el problema principal es el incremento del contador "i", es un verdadero caos ya que no permite procesar la cadena carácter a carácter. Por ejemplo en la primera iteracion del bucle el contador toma el valor indicado por los comentarios:
Código:
/* i == 0 */
while (in[i++] != '\0') {
   /* i == 1 */
   if (esoperando (in[i++]) )
      putchar (in[i]);
     
      /* ... */
   }
   /* i == 2 */
   
   i++;
   /* i == 3 */
}


No parece difícil solucionarlo pero, para verificar de forma completa el programa, primero debes publicar el código fuente del archivo de inclusión "Pila.h".

Un saludo
_________________
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
Volver arriba
      Índice del Foro elrincondelc.com -> C/C++ en General
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com