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
Crear cuenta

Algoritmia - convertir notacion Infija a postfija

Vista:
Me gusta: Está pregunta es útil y esta clara
0
No me gusta: Está pregunta no esta clara o no es útil
 
Asunto:convertir notacion Infija a postfija
Autor:Alex (2 intervenciones)
Fecha: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 +
Responder Subir
información
Otras secciones de LWP con contenido similar...
Me gusta: Está respuesta es útil y esta clara
0
No me gusta: Está respuesta no esta clara o no es útil
 
Asunto:RE:convertir notacion Infija a postfija
Autor:Néstor (3 intervenciones)
Fecha: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%
Comentar Subir
Me gusta: Está respuesta es útil y esta clara
0
No me gusta: Está respuesta no esta clara o no es útil
 
Asunto:RE:convertir notacion Infija a postfija
Autor:tengo (1 intervención)
Fecha: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).
Comentar Subir
Me gusta: Está respuesta es útil y esta clara
0
No me gusta: Está respuesta no esta clara o no es útil
 
Asunto:RE:convertir notacion Infija a postfija
Autor:paoly (1 intervención)
Fecha:21/09/2007 19:59:10
por favor necesito urgente el programa para convertir de notacion infija a posfija
Comentar Subir
Me gusta: Está respuesta es útil y esta clara
0
No me gusta: Está respuesta no esta clara o no es útil
 
Asunto:RE:convertir notacion Infija a postfija
Autor:Albeiro (1 intervención)
Fecha: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
Comentar Subir
Me gusta: Está respuesta es útil y esta clara
0
No me gusta: Está respuesta no esta clara o no es útil
 
Asunto:RE:convertir notacion Infija a postfija
Autor:david (1 intervención)
Fecha:12/11/2010 02:22:36
necesito la conversion de infija a postfija
Comentar Subir
Me gusta: Está respuesta es útil y esta clara
0
No me gusta: Está respuesta no esta clara o no es útil
 
Asunto:RE:convertir notacion Infija a postfija
Autor:maria elena (1 intervención)
Fecha:28/03/2006 02:40:17
oyes si conseguistes el programa para que me lo pases si por fis.
Comentar Subir
Me gusta: Está respuesta es útil y esta clara
0
No me gusta: Está respuesta no esta clara o no es útil
 
Asunto:RE:convertir notacion Infija a postfija
Autor:rafa (1 intervención)
Fecha: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.
Comentar Subir
Me gusta: Está respuesta es útil y esta clara
0
No me gusta: Está respuesta no esta clara o no es útil
 
Asunto:RE:convertir notacion Infija a postfija
Autor:daniel (2 intervenciones)
Fecha: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
Comentar Subir
Me gusta: Está respuesta es útil y esta clara
0
No me gusta: Está respuesta no esta clara o no es útil
 
Asunto:RE:convertir notacion Infija a postfija
Autor:daniel (2 intervenciones)
Fecha: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
Comentar Subir
Me gusta: Está respuesta es útil y esta clara
0
No me gusta: Está respuesta no esta clara o no es útil
 
Asunto:RE:convertir notacion Infija a postfija
Autor:randy (1 intervención)
Fecha:10/03/2009 14:31:10
me urge el programa mas tardar hoy.....................
Comentar Subir
Me gusta: Está respuesta es útil y esta clara
0
No me gusta: Está respuesta no esta clara o no es útil
 
Asunto:RE:convertir notacion Infija a postfija
Autor:Alberto Hondal Hernandez (1 intervención)
Fecha:19/06/2009 21:51:24
Necesito en C# el codigo de convertir a notacion posfija,gracias.
Comentar Subir
Me gusta: Está respuesta es útil y esta clara
0
No me gusta: Está respuesta no esta clara o no es útil
 
Asunto:RE:convertir notacion Infija a postfija
Autor:Yaneit (1 intervención)
Fecha: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...
Comentar Subir
Me gusta: Está respuesta es útil y esta clara
0
No me gusta: Está respuesta no esta clara o no es útil
 
Asunto:RE:convertir notacion Infija a postfija
Autor:dios (1 intervención)
Fecha: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
Comentar Subir
Me gusta: Está respuesta es útil y esta clara
0
No me gusta: Está respuesta no esta clara o no es útil
 
Asunto:RE:convertir notacion Infija a postfija
Autor:Yo (1 intervención)
Fecha:23/01/2011 21:52:05
Este código no puede compilar tal cual está en C++
Comentar Subir
Me gusta: Está respuesta es útil y esta clara
0
No me gusta: Está respuesta no esta clara o no es útil
 
Asunto:RE:convertir notacion Infija a postfija
Autor:pex peli.dj_cesar@yahoo.com (1 intervención)
Fecha: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");
Comentar Subir
Me gusta: Está respuesta es útil y esta clara
0
No me gusta: Está respuesta no esta clara o no es útil
 
Asunto:RE:convertir notacion Infija a postfija
Autor:asdf (1 intervención)
Fecha:11/06/2012 07:35:50
Gracias si compila muy bien el codigo =)
Comentar Subir
Me gusta: Está respuesta es útil y esta clara
0
No me gusta: Está respuesta no esta clara o no es útil
 
Asunto:RE:convertir notacion Infija a postfija
Autor:emi (2 intervenciones)
Fecha: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!!
Comentar Subir
Me gusta: Está respuesta es útil y esta clara
0
No me gusta: Está respuesta no esta clara o no es útil
 
Asunto:ARBOL DE EXPRESIONES
Autor:emi (2 intervenciones)
Fecha:18/06/2012 22:30:32
PERDON EL TITULO NO ES NOTACION INFIJA A POSTFIJA es el de arbol de expresiones xd
Comentar Subir
Me gusta: Está respuesta es útil y esta clara
0
No me gusta: Está respuesta no esta clara o no es útil
 
Asunto:ARBOL DE EXPRESIONES
Autor:Juan C (2 intervenciones)
Fecha: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
Comentar Subir
Me gusta: Está respuesta es útil y esta clara
0
No me gusta: Está respuesta no esta clara o no es útil
 
Asunto:RE:convertir notacion Infija a postfija
Autor:Juan C (2 intervenciones)
Fecha: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
Comentar Subir