Utilizamos cookies propias y de terceros para mejorar la experiencia de navegación, y ofrecer contenidos y publicidad de interés.
Al continuar con la navegación entendemos que se acepta nuestra política de cookies.
Iniciar sesión Cerrar
Correo:
Contraseña:
Entrar
Recordar sesión en este navegador
Iniciar sesiónIniciar sesiónCrear cuentaCrear cuenta

Algoritmia - convertir notacion Infija a postfija

  Imprimir  
Vista:

convertir notacion Infija a postfija

Publicado por Alex (2 intervenciones) el 22/09/2002 03:28:12
necesito convertir expresiones matematicas de notacion infija a postfija
utilizando pilas y colas
ej.
infija ( (A * B ) + C)
Postfija AB * C +
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:convertir notacion Infija a postfija

Publicado por Néstor (3 intervenciones) el 22/09/2002 09:54:39
La idea del algoritmo es más o menos asi:

Tengo una pila y una cola inicialmente vacías, la pila la uso para trabajar con la fórmula infija, y la cola tiene el resultado en polaco

Apilas la fórmula (infija)
Mientras la pila no sea vacia
F = Tope Si el tope es un número o variable, o un operador Encolo F Si no (o sea es una fórmula) Encuentro el operador principal Apilo el operador Apilo la subfórmula derecha Apilo la subfórmula izquierda
Ej: A + (B * C + D)
Pila: A + (B * C + D)
Cola: []
Desapilo, reviso el operador principal (el primer +) y apilo

Pila: A
(B*C+D)
+
Cola: []
Desapilo, cómo es una variable la encolo

Pila: (B*C+D)
+
Cola: A
Desapilo, reviso el operador principal (el +) y apilo

Pila: B*C
D
+
+
Cola: A
Desapilo, reviso el operador principal (el *) y apilo
Pila: B
C
*
D
+
+
Cola: A
Ya no quedan fórmulas, asi que las próximas iteraciones hasta vaciar la pila solo sacan el tope y lo agregan a la cola
Pila:
Cola: ABC*D++

El algorítmo es fácil de hacer salvo por la parte en la que tenés que encontrar el operador principal de la fórmula, si no tenés paréntesis es fácil, pero con paréntesis es un poco más complicado, si tenés problemas con eso avisame.

Saludos%
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:convertir notacion Infija a postfija

Publicado por tengo (1 intervención) el 22/12/2002 00:09:20
O también puedes buscar por notación RPN o visitar este link: http://xvoid.iespana.es (actualmente updating creo).
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:convertir notacion Infija a postfija

Publicado por paoly (1 intervención) el 21/09/2007 19:59:10
por favor necesito urgente el programa para convertir de notacion infija a posfija
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:convertir notacion Infija a postfija

Publicado por Albeiro (1 intervención) el 12/03/2010 01:53:46
pasate por aca.... mira al final del foro

http://grupos.emagister.com/debate/evaluacion_y_conversion_de_expresiones_infija_postfija_y_prefija_/6709-289712
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:convertir notacion Infija a postfija

Publicado por david (1 intervención) el 12/11/2010 02:22:36
necesito la conversion de infija a postfija
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:convertir notacion Infija a postfija

Publicado por maria elena (1 intervención) el 28/03/2006 02:40:17
oyes si conseguistes el programa para que me lo pases si por fis.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:convertir notacion Infija a postfija

Publicado por rafa (1 intervención) el 01/09/2006 22:36:17
Yo buscaba lo mismo y aunqe todavía no hago el programa, me pareció bien compartir lo qe he encontrado. Espero qe sea de utilidad para los qe vean este foro.

Eso lo encontré en http://www.itlp.edu.mx/publica/tutoriales/estru1/33.htm

ALGORITMO PARA CONVERTIR EXPRESIONES INFIJAS EN POSTFIJAS (RPN)

1. Incrementar la pila
2. Inicializar el conjunto de operaciones
3. Mientras no ocurra error y no sea fin de la expresión infija haz
* Si el carácter es:
1. PARENTESIS IZQUIERDO. Colocarlo en la pila
2. PARENTESIS DERECHO. Extraer y desplegar los valores hasta encontrar paréntesis izquierdo. Pero NO desplegarlo.
3. UN OPERADOR.
o Si la pila esta vacía o el carácter tiene más alta prioridad que el elemento del tope de la pila insertar el carácter en la pila.
o En caso contrario extraer y desplegar el elemento del tope de la pila y repetir la comparación con el nuevo tope.
4. OPERANDO. Desplegarlo.
4. Al final de la expresión extraer y desplegar los elementos de la pila hasta que se vacíe.

ALGORITMO PARA EVALUAR UNA EXPRESION RPN

1. Incrementar la pila
2. Repetir
* Tomar un caracter.
* Si el caracter es un operando colocarlo en la pila.
* Si el caracter es un operador entonces tomar los dos valores del tope de la pila, aplicar el operador y colocar el resultado en el nuevo tope de la pila. (Se produce un error en caso de no tener los 2 valores)
3. Hasta encontrar el fin de la expresión RPN.

Y si en el siguiente link viene una explicación con ejemplos fácil de entender (no lo puse porqe tiene tablas, las cuales no se pueden poner aqí):

http://www.ii.uam.es/~ccastaneda/ENUNCIADOSEJE4.doc.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:convertir notacion Infija a postfija

Publicado por daniel (2 intervenciones) el 15/10/2007 22:53:57
necesito un programa que me convierta una expresion infija a posfija en c++ y que al imprimir el programa me pida la expresion y que me muestre los caracteres los topes de pila,la expresion posfija y el resultado
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:convertir notacion Infija a postfija

Publicado por daniel (2 intervenciones) el 15/10/2007 22:55:21
necesito un programa que me convierta una expresion infija a posfija en c++ y que al imprimir el programa me pida la expresion y que me muestre los caracteres los topes de pila,la expresion posfija y el resultado
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:convertir notacion Infija a postfija

Publicado por randy (1 intervención) el 10/03/2009 14:31:10
me urge el programa mas tardar hoy.....................
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:convertir notacion Infija a postfija

Publicado por Alberto Hondal Hernandez (1 intervención) el 19/06/2009 21:51:24
Necesito en C# el codigo de convertir a notacion posfija,gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:convertir notacion Infija a postfija

Publicado por Yaneit (1 intervención) el 23/09/2009 14:42:53
necesito un programa que me convierta una expresion infija a posfija en c++ y que al imprimir el programa me pida la expresion y que me muestre los caracteres los topes de pila,la expresion posfija y el resultado porfis...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:convertir notacion Infija a postfija

Publicado por dios (1 intervención) el 05/11/2009 16:25:35
#include<stdio.h> #include<stdlib.h> #include<conio.h> typedef enum {False,True} bool; typedef enum {izq,igual,der,none} Par; char Simb[4][3]={{'(',')','\0'},{'-','+','\0'},{'/','*','\0'},{'^','\0','\0'}}; void Clear(char [],int ), Add(char [],char []), Append(char [],char ), Rec_Exp_Pos(char []), Conv_Pos(char [],char []), Invertir(char []), Rec_Exp_Pre(char []), Input(char []), Conv_Pre(char [],char []); int Priority(char,char), length(char []); Par Ver_Cad(char []); bool IfSimb(char); void main(){ char Exp[50],E1[50],E2[50],EPOS[50],EPRE[50]; clrscr(); Clear(EPRE,50); Clear(EPOS,50); Clear(E1,50); Clear(E2,50); do{ printf("%s","Introduzca la expresi¢n infija: "); Input(Exp); if(Ver_Cad(Exp)!=igual){ printf("La expresi¢n \'%s\' no es v lida",Exp); switch(Ver_Cad(Exp)){ case izq:printf(" le faltan par‚ntesis derechos.");break; case der:printf(" le faltan par‚ntesis izquierdos.");break; case none:printf(" ya que no es f£nci¢n v lida.");break;} getch(); clrscr(); } }while(Ver_Cad(Exp)!=igual); Add(E1,Exp); Add(E2,Exp); Conv_Pre(E1,EPRE); /*Invertimos la Expresi¢n*/ Invertir(EPRE); printf("%s %s\n","Su conversi¢n a Prefija es: ",EPRE); Conv_Pos(E2,EPOS); printf("%s %s\n","Su conversi¢n a Postfija es: ",EPOS); getch(); } /*Hace lo mismo que Scanf("%[^\n]",Exp)*/ void Input(char Exp[]){ int i; for(i=0;(Exp[i] = getchar()) != '\n';++i); Exp[i]='\0'; } /*Esta funci¢n limpia n espacios en Text*/ void Clear(char Text[],int n){ int i; for(i=0;i<n;i++) Text[i]='\0'; } /*Calcula la prioridad entre exp1 y exp2 -1 si exp1 < exp2 0 si exp1 == exp2 1 si exp1 > exp2*/ int Priority(char exp1,char exp2){ int i,j,p1,p2; for(i=0;i<4;i++) for(j=0;j<3;j++){ if(exp1==Simb[i][j]) p1=i; if(exp2==Simb[i][j]) p2=i; } if(p1<p2) i=-1; else if(p1==p2) i=0; else if(p1>p2) i=1; return(i); } /*Hace lo mismo que strlen(text)*/ int length(char text[]){ int n; for(n=0;text[n]!='\0';++n); return(n); } /*Agrega la cadena B en A*/ void Add(char A[],char B[]){ int n1,n2,i; n1=length(A); n2=length(B); for(i=n1;i<(n1+n2);i++) A[i]=B[i-n1]; A[i]='\0'; } /*Verifica si text es una cadena v lida*/ Par Ver_Cad(char text[]){ int i,n,cont1,cont2,TOPE; char PILA[50],elem; Par val=none; n=length(text); if(n>0){ TOPE=0; cont1=cont2=0; for(i=0;i<n;i++){ elem=text[i]; if(elem=='('){ PILA[TOPE]=elem; TOPE+=1; PILA[TOPE]='\0';} else if(elem==')') if(TOPE>0){ if(PILA[TOPE-1]=='('){ TOPE-=1; PILA[TOPE]='\0';} }else{ PILA[TOPE]=elem; TOPE+=1; PILA[TOPE]='\0';} } if(TOPE>0){ for(i=0;i<TOPE;i++){ if(PILA[i]=='(') cont1+=1; if(PILA[i]==')') cont2+=1; } if(cont1<cont2) val=der; if(cont1>cont2) val=izq; } else val=igual; }else val=none; return(val); } /*Verifica si Expr es simbolo o no*/ bool IfSimb(char Expr){ int i,j; bool val; val=False; for(i=0;i<4;i++) for(j=0;j<3;j++) if(Expr==Simb[i][j]) val=True; return(val); } /*Agrega un caracter a la cadena Exp1*/ void Append(char Exp1[],char Exp2){ int n; n=length(Exp1); Exp1[n]=Exp2; } /*Invierte el sentido de una cadena de caracteres*/ void Invertir(char Expr[]){ int i,n; char *var; n=length(Expr); var=(char *) malloc((n+1)*sizeof(char)); for(i=0;i<n;i++) *(var+(n-i)-1)=Expr[i]; for(i=0;i<n;i++) Expr[i]=*(var+i); *(var+i)='\0'; free(var); } /*Elimina el £ltimo elemento de Text*/ void Rec_Exp_Pre(char Text[]){ int n; n=length(Text); Text[n-1]='\0';} /*Convierte una expresion EI (Infija) a una espresi¢n EPRE (Prefija)*/ void Conv_Pre(char EI[],char EPRE[]){ int TOPE,n; char Simbolo,PILA[50]; Clear(PILA,50); /*Hacer TOPE <- -1*/ TOPE=-1; n=length(EI); /*Mientras EI sea diferente de la cadena vac¡a*/ while(EI[0]!='\0'){ n-=1; /*Tomamos el s¡mbolo m s a la derecha*/ Simbolo=EI[n]; /*Recortamos la expresi¢n*/ Rec_Exp_Pre(EI); /*Si el s¡mbolo es par‚ntesis derecho*/ if(Simbolo==')'){ TOPE+=1; /*Colocamos el s¡mbolo en la pila*/ PILA[TOPE]=Simbolo; } else /*Si el s¡mbolo es izquierdo*/ if(Simbolo=='('){ while(PILA[TOPE]!=')'){ Append(EPRE,PILA[TOPE]); PILA[TOPE]='\0'; TOPE-=1; } /*Sacamos el par‚ntesis de la pila*/ PILA[TOPE]='\0'; TOPE-=1; } else /*Si es operando*/ if(IfSimb(Simbolo)==False){ Append(EPRE,Simbolo); } else{ /*Si la pila contiene algo*/ if(length(PILA)>0){ /*Mientras el operador sea < al que se encuentra al tope de la pila*/ while(Priority(Simbolo,PILA[TOPE])<0){ /*Agregar lo que hay en el tope de la pila*/ Append(EPRE,PILA[TOPE]); /*Eliminamos lo que hay en el tope de la pila*/ PILA[TOPE]='\0'; TOPE-=1; if(TOPE<0) break; } } TOPE+=1; /*Agregamos el s¡mbolo al tope de la pila*/ PILA[TOPE]=Simbolo; } } /*Agregamos lo que qued¢ en la pila*/ while(TOPE>=0){ Append(EPRE,PILA[TOPE]); TOPE-=1; } } /*Elimina el primer elemento*/ void Rec_Exp_Pos(char Text[]){ int i,n; n=length(Text); for(i=0;i<(n-1);i++) Text[i]=Text[i+1]; Text[i]='\0';} /*Convierte una epresion EI (Infija) a una expresion EPOS (Postfija)*/ void Conv_Pos(char EI[],char EPOS[]){ int TOPE,n; char Simbolo,PILA[50]; Clear(PILA,50); /*Hacer TOPE <- -1*/ TOPE=-1; n=length(EI); /*Repetir Mientras EI sea diferente a cadena vac¡a*/ while(EI[0]!='\0'){ /*Tomar el s¡mbolo m s a la izquierda de EI*/ Simbolo=EI[0]; /*Recortamos la Expresi¢n*/ Rec_Exp_Pos(EI); n-=1; /*Si el s¡mbolo es par‚ntesis izquierdo*/ if(Simbolo=='('){ /*Poner s¡mbolo en la pila*/ TOPE+=1; PILA[TOPE]=Simbolo; } else /*Si el s¡mbolo es par‚ntesis derecho*/ if(Simbolo==')'){ while(PILA[TOPE]!='('){ /*Agregamos lo que hay en el tope de la pila*/ Append(EPOS,PILA[TOPE]); PILA[TOPE]='\0'; TOPE-=1; } /*Sacamos el par‚ntesis izquierdo de la pila*/ PILA[TOPE]='\0'; TOPE-=1; } else /*Si es operando*/ if(IfSimb(Simbolo)==False){ /*Agregar contenido de Simbolo a EPOS*/ Append(EPOS,Simbolo); } else{ /*Si la Pila contiene algo*/ if(length(PILA)>0){ /*Mientras el operador sea <= al que se encuentra al tope de la pila*/ while(Priority(Simbolo,PILA[TOPE])<=0){ /*Agregar lo que hay al tope de la pila*/ Append(EPOS,PILA[TOPE]); /*Borramos lo que hay al tope de la pila*/ PILA[TOPE]='\0'; TOPE-=1; if(TOPE<0) break; } } /*Agregamos el s¡mbolo al tope de la pila*/ TOPE+=1; PILA[TOPE]=Simbolo; } } /*Agregamos lo que qued¢ en la pila*/ while(TOPE>=0){ Append(EPOS,PILA[TOPE]); TOPE-=1; } }



este es el que nesecitas
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

RE:convertir notacion Infija a postfija

Publicado por Yo (1 intervención) el 23/01/2011 21:52:05
Este código no puede compilar tal cual está en C++
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:convertir notacion Infija a postfija

Publicado por pex peli.dj_cesar@yahoo.com (1 intervención) el 16/03/2012 19:10:20
Una cosa es que no compile y otra que no sepas

solo hay que cambiar
clrscr();

por
system ("cls");
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:convertir notacion Infija a postfija

Publicado por asdf (1 intervención) el 11/06/2012 07:35:50
Gracias si compila muy bien el codigo =)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:convertir notacion Infija a postfija

Publicado por emi (2 intervenciones) el 18/06/2012 22:28:11
Por favor es urgente, alguien me puede dar el codigo resuelto para crear un arbol en postfija?? y si tienen el codigo de evaluar la expresion seria fabuloso!!!!! muchas gracias y disculpas las molestias!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

ARBOL DE EXPRESIONES

Publicado por emi (2 intervenciones) el 18/06/2012 22:30:32
PERDON EL TITULO NO ES NOTACION INFIJA A POSTFIJA es el de arbol de expresiones xd
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

ARBOL DE EXPRESIONES

Publicado por Juan C (2 intervenciones) el 21/06/2012 02:48:53
Hola alguien me puede dar pautas para poder pasar este codigo NOTACION INFIJA A POSTFIJA a Visual Basic
gracias o es lo mismo por fa ayuda
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:convertir notacion Infija a postfija

Publicado por Juan C (2 intervenciones) el 21/06/2012 03:45:37
Hola alguien me puede dar pautas para poder pasar este codigo NOTACION INFIJA A POSTFIJA a Visual Basic
gracias o es lo mismo por fa ayuda
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:convertir notacion Infija a postfija

Publicado por uno que agradece (1 intervención) el 22/04/2014 17:36:21
Va de muerte!

XD

Gracias!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar