Link Log

Una manera de perder el tiempo…

Posts Tagged ‘infijo

Java Infijo a Posfijo

with 2 comments

Bueno, ya conociendo el algoritmo, se puede hacer en Java:

class converpostultima{
 public static void main (String args[])
  {

    String expr = new String("");
    String exprpost = new String("");
    char ch;
    int max;
    System.out.print("Dame la Expresion en Infijo: ");
    expr =Leer.dato();
    max=expr.length();
    operapilaschar obj1 = new operapilaschar(max);
    System.out.println();
    System.out.println();
    System.out.println("La Expresion en Postfijo es :");
    obj1.push('('); // inserta '(' a la PILA
    expr+=')'; // inserta ')' al final de Q
    for (int i=0;i=precedencia(ch) && obj1.pila[obj1.tope]!='('))
 	  	   {
 	  	    obj1.pop();
 	  	    exprpost+=obj1.dret;
 	  	   }
 	  	   obj1.push(ch);
                break;
 	case ')': while (obj1.pila[obj1.tope] != '(')
 	          {
 	  	    obj1.pop();
 	  	    exprpost+=obj1.dret;
 	  	  }
 	  	   obj1.pop();
 	  	  break;
 	  	  default : exprpost+=ch;
    } 	       	    	                     

  }
  while (!(obj1.pila_Vacia(obj1.tope)))
    {
      obj1.pop();
      if (obj1.dret!= '(')
      exprpost+=obj1.dret;
    }
  System.out.println(exprpost);
} 	

 public static int precedencia(char ch)
 {
 	int aux = 0;
 	switch (ch)
 	 {
 	 	case '^' : aux = 4;
 	 	           break;
 	 	case '*' : case '/' : aux = 3;
 	 	           break;
 	 	case '+' : case '-' : aux = 2;
 	 	           break;
 	 	case '(' : aux = 1;
 	 	           break;
 	 }
 	 return aux;
 }
}

Cabe aclarar que el código no lo hice yo, si no que me lo pasaron para entender el algoritmo.

Read the rest of this entry »

Written by Link X

April 29, 2008 at 11:48 pm

Posted in Java

Tagged with , , ,

Infijo a Posfijo

without comments

Bueno, ya después del programa de pilas que puse hace poco (es el articulo pasado), sigue lo de pasar una expresión infija a posfija (luego pongo la de posfija a infija) que también se hace mediante pilas, pero en esta se hace manualmente (es decir, lápiz y papel). Aquí están los pasos (algoritmo) que hay que seguir:

ALGORITMO: POLACA(Q,P). Suponemos que Q es una expresión aritmética escrita en notación infija. Este algoritmo encuentra su expresión postfija P.

1.- Meter “(” en PILA y añadir “)” al final de Q.
2.- Examinar Q de izquierda a derecha y repetir los pasos 3 a 6 para cada elemento de Q hasta que la PILA esté vacía.
3.- Si se encuentra PARÉNTESIS IZQ., meterlo en PILA.
4.- Si se encuentra un OPERADOR entonces:
(a) Repetidamente sacar de PILA y añadir a P cada operador (de la cima de PILA) que tenga la misma precedencia o mayor que el operador.
(b) Añadir OPERADOR a PILA.
[FIN de condicional]
5.- Si se encuentra un PARÉNTESIS DER., entonces:
(a) Repetidamente sacar de PILA y añadir a P cada operador (de la cima de PILA) hasta que se encuentre un paréntesis izquierdo.
(b) Eliminar el PARÉNTESIS IZQ.(no añadir el paréntesis izquierdo a P).
[Fin de condicional]
6.- Si se encuentra un OPERANDO, añadirlo a P.

[Fin del Bucle]
7.- Salir.

Los operadores siguen la siguiente jerarquía (El de arriba es el que tiene mayor jerarquía hasta abajo el que tiene la menor):
^
* /
+ -
(

Ejemplo:

A+(X/Y)*B^C
Cuadro infijo a posgijo

Este es un ejemplo demasiado sencillo, pero explica los pasos a seguir, y como se puede ver en la ultima fila de la tabla esta el resultado.

Written by Link X

April 14, 2008 at 6:06 pm

Posted in Programación

Tagged with , ,