Dev - C++ - Transformar notacion infija a postfija

 
Vista:

Transformar notacion infija a postfija

Publicado por wonck (1 intervención) el 30/11/2006 19:52:08
Hola a todos
Alguien me puede pasar un ejemplo de Transformacion infija a postfija en c++
Espero ke me puedan ayudar
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:Transformar notacion infija a postfija

Publicado por Alberto (4 intervenciones) el 03/12/2006 03:42:51
aqui te dejo un ejemplo que dada la cantidad de expresiones infijas y las expresiones las convierte a posfijas...

ejemplo:

entrada
3
(a+(b*c))
((a+b)*(z+x))
((a+t)*((b+(a+c))^(c+d)))

salida
abc*+
ab+zx+*
at+bac++cd+^*

te dejo con el codigo...

#include <stdio.h>

bool isOperator(char c)
{
if (c=='+' || c=='-' || c=='*' || c=='/' || c=='^' || c=='(' || c==')')
return true;

return false;
}

int precedencia (char x, char y)
{
int prec1, prec2;

switch(x)
{
case '+':
prec1=1;
break;

case '-':
prec1=2;
break;

case '*':
prec1=3;
break;

case '/':
prec1=4;
break;

case '^':
prec1=5;
}

switch(y)
{
case '+':
prec2=1;
break;

case '-':
prec2=2;
break;

case '*':
prec2=3;
break;

case '/':
prec2=4;
break;

case '^':
prec2=5;
}

return prec1-prec2;
}

int main()
{
char *inf = new char[401];
char *post = new char[401];
char *pila = new char[200];
int ptr=0;

int n, j=0;

scanf("%d", &n);

while(n>0)
{
scanf("%s", inf);

for(int i=0; inf[i]!='\0'; i++)
{
if (!isOperator(inf[i]))
{
post[j]=inf[i];
j++;
}
else if (inf[i]=='(')
{
pila[++ptr]='(';
}
else if (inf[i]==')')
{
while(pila[ptr]!='(' && ptr>0)
{
post[j]=pila[ptr--];
j++;
}
if (pila[ptr]=='(')
ptr--;
}
else
{
while(precedencia(inf[i], pila[ptr]) < 0 && pila[ptr]!='(' && ptr>0)
{
post[j]=pila[ptr--];
j++;
}
pila[++ptr]=inf[i];
}

}

while(ptr>0)
{
post[j]=pila[ptr--];
j++;
}
post[j]='\0';
printf("%s\n", post);

j=0;ptr=0;
n--;
}
return 0;
}
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

Transformar notacion infija a postfija

Publicado por giovani (1 intervención) el 05/05/2013 19:42:40
oieee que significa ptr
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

Transformar notacion infija a postfija

Publicado por Fulano de tal (2 intervenciones) el 08/05/2015 02:57:38
ptr es un apuntador.
otro ejemplo para hacer push y pop la pila es:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
//STACK
struct stack{
	char st[MAX];
	int tope;
};
 
void push(struct stack* s, char c){
	s->st[s->tope] = c;
	s->tope++;
}
 
char pop(struct stack* s){
	char r = s->st[s->tope];
	s->tope--;
	return r;
}
 
int isEmpty(struct stack* s){
	return s->tope<1;
}
 
void inicializa(struct stack* s){
	for(int i=0;i<MAX;i++)
		s->st[i] = ' ';
	s->tope=0;
}
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