You are on page 1of 4

INSTITUTO TECNOLOGICO

DE TAPACHULA

NOMBRE:

ERICK JONATHAN BURGUETE LOPEZ

MATERIA:

AUTOMATAS

DOCENTE:

TERESA DEL CARMEN CABRERA GOMEZ

TRABAJO:

REPORTE DEL PROGRAMA DE

PREFIJA E INFIJA

TAPACHULA, CHIAPAS; A 08 DE OCTUBRE DEL 2018


Conversión de Infijo a Postfijo usando pilas

Codigo:

//Conversión de notación Infija a Postfija mediante uso de


pilas
package infixpostfix4;

import java.util.Scanner;
import java.util.Stack;

public class InfixPostfix4 {


public static void main(String[] args) {

//Entrada de datos
System.out.println("*Escribe una expresión algebraica:
");
Scanner leer = new Scanner(System.in);

//Depurar la expresion algebraica


String expr = depurar(leer.nextLine());
String[] arrayInfix = expr.split(" ");

//Declaración de las pilas


Stack < String > E = new Stack < String > (); //Pila
entrada
Stack < String > P = new Stack < String > (); //Pila
temporal para operadores
Stack < String > S = new Stack < String > (); //Pila
salida

//Añadir la array a la Pila de entrada (E)


for (int i = arrayInfix.length - 1; i >= 0; i--) {
E.push(arrayInfix[i]);
}

try {
//Algoritmo Infijo a Postfijo
while (!E.isEmpty()) {
switch (pref(E.peek())){
case 1:
P.push(E.pop());
break;
case 3:
case 4:
while(pref(P.peek()) >= pref(E.peek())) {
S.push(P.pop());
}
P.push(E.pop());
break;
case 2:
while(!P.peek().equals("(")) {
S.push(P.pop());
}
P.pop();
E.pop();
break;
default:
S.push(E.pop());
}
}

//Eliminacion de `impurezas´ en la expresiones


algebraicas
String infix = expr.replace(" ", "");
String postfix = S.toString().replaceAll("[\\]\\[,]",
"");

//Mostrar resultados:
System.out.println("Expresion Infija: " + infix);
System.out.println("Expresion Postfija: " + postfix);

}catch(Exception ex){
System.out.println("Error en la expresión algebraica");
System.err.println(ex);
}
}

//Depurar expresión algebraica


private static String depurar(String s) {
s = s.replaceAll("\\s+", ""); //Elimina espacios en
blanco
s = "(" + s + ")";
String simbols = "+-*/()";
String str = "";

//Deja espacios entre operadores


for (int i = 0; i < s.length(); i++) {
if (simbols.contains("" + s.charAt(i))) {
str += " " + s.charAt(i) + " ";
}else str += s.charAt(i);
}
return str.replaceAll("\\s+", " ").trim();
}

//Jerarquia de los operadores


private static int pref(String op) {
int prf = 99;
if (op.equals("^")) prf = 5;
if (op.equals("*") || op.equals("/")) prf = 4;
if (op.equals("+") || op.equals("-")) prf = 3;
if (op.equals(")")) prf = 2;
if (op.equals("(")) prf = 1;
return prf;
}
}

Resultado:

run:
*Escribe una expresión algebraica:
2*(23+6)-1
Expresion Infija: (2*(23+6)-1)
Expresion Postfija: 2 23 6 + * 1 -
BUILD SUCCESSFUL (total time: 4 seconds)

You might also like