ayuda amigos codigo en java de notacion infija a postfija

pamebella
02 de Abril del 2005
Un super favor me marcaron un programa que permita una expresion aritmetica utilizando notacion infija y que devuelva la misma expresion en notacion postfija . El usuario podra repetir esta operacion cuantas veces desee. Se asume que los operandos son letras simples o numeros enteros de un solo digito (0-9) los operadores permitidos son ^,+,-,*,/. se debera utilizar es el stack basico cuya interfaz e implementacion esta en http://www.udlap.mx/~pgomez/is_207/tareas.htm

el_johna
02 de Abril del 2005
Saludos a todos:

En estos dias yo tuve el mismo problema de que necesitaba convertir una expresion infija a una expresion postfija, y al intentar ejecutar el codigo que JimJava te hizo el favor de hacer, me di cuenta de que a pesar de que yo modificara la linea
System.out.println(prueba2.pasarAPosfija("3*5+8*1+5-6/5+6"));

a por ejemplo:

System.out.println(prueba2.pasarAPosfija("3+5*8*1+5-6/5+6"));

me seguia convirtiendo la cadena "3*5+8*1+5-6/5+6".

No se si no supe ejecutar el programa de forma adecuado, pero pues tuve que crear otro codigo. Este codigo que a continuación transcribo convierte una expresion infija a una expresion postfija pero usando estructuras de datos (Pilas). Espero te sea de utilidad, y si tienes alguna duda, mi correo es [email protected]

/*
* ExpresionPostfija.java
*
* Created on 2 de abril de 2005, 12:36 AM
*/

package computaciónevolutiva;

/**
*
* @author N. Johnatan Flores Carmona
*/

public class ExpresionPostfija {
String Expresion;
Pila P = new Pila();

/** Creates a new instance of ExpPostfija */
public ExpresionPostfija() {
}

public boolean Operador(char C){
if (C == '^' || C == '/' || C == '*' || C == '+' || C == '-' || C == '(')
return true;
return false;
}

public boolean Operando(char C){
if (C == 'x' || C == '0' ||C == '1' ||C == '2' ||C == '3' ||C == '4' ||
C == '5' ||C == '6' ||C == '7' || C == '8' || C == '9')
return true;
return false;
}

// Prioridad del operador dentro de la pila
public int Pdp (Pila pila){
char op;
if (pila.esVacia() == false) {
op = pila.Cima().toCharArray()[0];
switch (op) {
case '^':
return 4;
case '*':
case '/':
return 2;
case '+':
case '-':
return 1;
case '(':
return 0;
default:
return -1;
}
}
else
return -1;
}

// Prioridad del operador en la expresión infija
public int Pdp (char Op){

switch (Op){
case '^':
return 4;
case '*':
case '/':
return 2;
case '+':
case '-':
return 1;
case '(':
return 0;
default:
return -1;
}
}

// En este método se lee la expresión en notación infija. El caracter
// que arbitrariamente determina el fin de la expresión es #. La expresión
// en postfija es almacenada en el vector Ar.

public String Postfija (String Q){
Q += ")";
char[] elementos = Q.toCharArray();

P.Meter("(");
String ExpPostfija = "";
int j = 0;
while (!P.esVacia()){
while (!P.esVacia()){
if (this.Operando(elementos[j])){
ExpPostfija += elementos[j];
j++;
break;
}
if (elementos[j] == '('){
P.Meter("(");
j++;
break;
}
if (this.Operador(elementos[j])){
while(this.Pdp(P) >= this.Pdp(elementos[j])){
ExpPostfija += P.Sacar();
}
P.Meter(String.valueOf(elementos[j]));
j++;
break;
}
if(elementos[j] == ')'){
while(P.Cima().toCharArray()[0] != '('){
ExpPostfija += P.Sacar();
}
P.Sacar();
j++;
break;
}
}
}
return ExpPostfija;
}

public class Pila {

Nodo ptrPila;

/** Creates a new instance of Pila */
public Pila() {
this.ptrPila = null;
//System.out.println("Pila vacia creada");
}

public boolean esVacia () {
if (this.ptrPila == null)
return true;
else
return false;
}

public String Cima(){
if (esVacia() == false)
return ptrPila.Elemento;
return " ";
}

public void Suprime(){
Nodo Q;

if (esVacia() == false){
Q = ptrPila;
ptrPila = ptrPila.Siguiente;
//System.out.println("Nodo borrado");
}
}

public String Sacar (){
Nodo Q;

if (esVacia() == false){
String x;
x = Cima();
Suprime();
//System.out.println("Se ha sacado el elemento: " + x);
return x;
}
return "";
}

public void Meter(String x){
Nodo Q = new Nodo(x,ptrPila);
ptrPila = Q;
//System.out.println("El nodo con el elemento " + x + " fue creado");
}

public class Nodo {

String Elemento;
Nodo Siguiente;

/** Creates a new instance of Nodo */
public Nodo(String pElemento, Nodo pSiguiente) {
this.Elemento = pElemento;
this.Siguiente = pSiguiente;
}

}

}

}



Para poder probar esta clase, se utiliza la clase Main siguiente:

*
* Main.java
*
* Created on 25 de marzo de 2005, 06:13 AM
*/

package computaciónevolutiva;

/**
*
* @author propietario
*/

import computaciónevolutiva.ExpresionPostfija;

public class Main {

ExpresionPostfija postfija;
String Expre = "1+(2*3-(4/5^6)*7)*8";

/** Creates a new instance of Main */
public Main() {
postfija = new ExpresionPostfija();
}

/**
* @param args the command line arguments
*/
public static void main(String[] args) {
System.out.println();
System.out.println();
System.out.println();

Main objPila = new Main();

System.out.println(objPila.postfija.Postfija(objPila.Expre.toString()));

System.out.println();
System.out.println();
}

}



mramirezc84
02 de Abril del 2005
y cual es la duda?.

pambella
02 de Abril del 2005
mi duda es como hacerlo o donde encontrarlo por que creo la miss me odia y me lo encargo solo a mi y necesito ayuda