miércoles, 21 de noviembre de 2007

PiLaPoStFiJa


/*Pila Posfija*/
#include {stdio.h}
#include {string.h}
#include {ctype.h}
#define N 40

void conv_posfija (char [], char []) ;
int prioridad (char) ;

main ()
{
char ei[N]={""} ;
char epos[N]={""} ;
printf ("\tPILA POSTFIJA\n") ;
printf("\n\n\tDame una expresion matematica: ") ;
gets(ei) ;
//ATRAPA DEL TECLADO UNA FUNCION MATEMATICA//
conv_posfija (ei, epos);
system("PAUSE") ;
return 0;
}

void conv_posfija (char ei [], char epos [])
{
int top=-1, i=0, c_pos=0;
char pila [N];

while (ei[i] != '\0')
{
//MIENTRAS NO SEA FIN DE LINEA//
if (ei[i] == '(')
{
pila[++top]=ei[i];
}
else
{
if (ei[i] == ')')
{

while (pila[top] != '(' && top > (-1))
epos[c_pos++]=pila[top--];
if (top > (-1))
top--;
}
else
{
if (!ispunct (ei [i]))
epos[c_pos++]=ei[i];
else
{
while (top > (-1) && prioridad(ei[i]) < prioridad(pila[top]))
{
//ABRE LA FUNCION PRIORIDAD PARA LO QUE NO SEA
//PARENTESIS//
if (pila[top] != '(')
epos[c_pos++]=pila[top];
--top;
}
top ++;
pila [top] = ei [i];
}
}
}
i++;
}
printf("\n\tla expresion postfija es: ") ;
while (top > (-1))
epos[c_pos++]=pila[top--];
epos[c_pos]='\0';
printf("\t\t");puts(epos);
}

int prioridad (char c)
{
int x;
switch (x)
{

case '^':x = 4;
break;
case '*':x = 3;
break;
case '/':x = 3;
break;
case '+':x = 2;
break;
case '-':x = 1;
break;
}
return x;
}

No hay comentarios: