
/* PROGRAMA DE POSFIJA */

  #include<conio.h>
  #include<stdlib.h>
  #include<stdio.h>
  #include<string.h>

  int limite,limite1,cuenta;
  int a,b;
  int i,j,l,k;
  long char cade[200],posf[200];
  long char pila[200];

  main()
  {
   clrscr();
   limite=-1;
   printf("Da una ecuacion: ");gets(cade);
   cuenta=0;
   for (i=0;i<=strlen(cade)-1;i++)
   {
    if(cade[i]=='(')
    {
     limite=limite+1;
     pila[limite]=cade[i];
    }
    else
    {
     if(cade[i]==')')
     {
      while(pila[limite]!='(')
      {
       posf[cuenta]=posf[cuenta]+pila[limite];
       limite=limite-1;cuenta++;
      }
       limite=limite-1;
     }
     else
     {
      if(!((cade[i]=='*')||(cade[i]=='+')||(cade[i]=='/')||(cade[i]=='-')||(cade[i]=='^')))
      {
       posf[cuenta]=posf[cuenta]+cade[i];
       cuenta++;
      }
       else
       {
	a=b=0;
	if(limite>-1)
	{
	if(((cade[i]=='*')||(cade[i]=='/')||(cade[i]=='+')||(cade[i]=='-') || (cade[i]=='^')))
	{
	 if((cade[i]=='+')||(cade[i]=='-')) a=1;
	 if((cade[i]=='*')||(cade[i]=='/')) a=2;
	 if(cade[i]=='^') a=3;
	 if((pila[limite]=='+')||(pila[limite]=='-')) b=1;
	 if((pila[limite]=='*')||(pila[limite]=='/')) b=2;
	 if(pila[limite]=='^') b=3;
	 limite1=limite;
	 while((limite1>-1)&&(a<=b))
	 {
	  if(((pila[limite1]=='*')||(pila[limite1]=='/')||(pila[limite1]=='+')||(pila[limite1]=='-')||(pila[limite1]=='^')))
	  {
	   posf[cuenta]=posf[cuenta]+pila[limite1];
	   limite1=limite1-1;cuenta++;
	   limite=limite-1;
	  }
	  else
	  {
	   limite1=-1;
	  }
	 }
	}
       }
	limite=limite+1;
	 pila[limite]=cade[i];
      }
     }
    }
   }
      while(limite>-1)
      {
       posf[cuenta]=posf[cuenta]+pila[limite];
       limite=limite-1;
       cuenta++;
      }

       printf("\nLa ecuaci˘n en en recorrido posfijo es:%s",posf);
       getch();

 }
