Olá Galera,
Sou novo aqui no forum e qualquer coisa que eu fiz errado me avisem, por favor.
Sou iniciante em programação!
Então...
Eu estou tentando fazer um programinha que converta uma expressão da forma infixa para forma posfixa. Eu fiz uma parte(acho que da forma errada) que está funcionando com as expressões que coloquei manualmente, mas se a expressão é alterada ele converte errado.
Gostaria de saber se alguém pode me explicar como fazer ou mostrar um algoritmo de algum que esteja funcionando.
Segue abaixo o que fiz a té agora.
Desde já agradeço a colaboração galera.
public class InfPos{
public static void main(String [] args){
Pilha pilhaI=new Pilha();
Pilha pilhaT=new Pilha();
Pilha pilhaP=new Pilha();
Pilha pilhaPrint=new Pilha();
int cont=0, cont2=0;
char tmp=' ';
//Insere a expressão de forma infixa na pilhaI
// A+B*C-D+E/F
// ABC*+D-EF/+
System.out.println("Infixa: A+B*C-D+E/F");
System.out.println("Posfixa: ABC*+D-EF/+");
System.out.print("Programa: ");
pilhaI.push('F');
pilhaI.push('/');
pilhaI.push('E');
pilhaI.push('+');
pilhaI.push('D');
pilhaI.push('-');
pilhaI.push('C');
pilhaI.push('*');
pilhaI.push('B');
pilhaI.push('+');
pilhaI.push('A');
// (A+B)*(C/D)-(E+F)
// AB+CD/*EF+-
/* System.out.println("Infixa: (A+B)*(C/D)-(E+F)");
* System.out.println("Correto: AB+CD/*EF+-");
* System.out.print("Programa: ");
* pilhaI.push(')');
* pilhaI.push('F');
* pilhaI.push('+');
* pilhaI.push('E');
* pilhaI.push('(');
* pilhaI.push('-');
* pilhaI.push(')');
* pilhaI.push('D');
* pilhaI.push('/');
* pilhaI.push('C');
* pilhaI.push('(');
* pilhaI.push('*');
* pilhaI.push(')');
* pilhaI.push('B');
* pilhaI.push('+');
* pilhaI.push('A');
* pilhaI.push('(');*/
* // (A+B)*((C/D)-(E+F))
* // AB+CD/EF+-*
/* System.out.println("Infixa: (A+B)*((C/D)-(E+F))");
* System.out.println("Correto: AB+CD/EF+-*");
* System.out.print("Programa: ");
* pilhaI.push(')');
* pilhaI.push(')');
* pilhaI.push('F');
* pilhaI.push('+');
* pilhaI.push('E');
* pilhaI.push('(');
* pilhaI.push('-');
* pilhaI.push(')');
* pilhaI.push('D');
* pilhaI.push('/');
* pilhaI.push('C');
* pilhaI.push('(');
* pilhaI.push('(');
* pilhaI.push('*');
* pilhaI.push(')');
* pilhaI.push('B');
* pilhaI.push('+');
* pilhaI.push('A');
* pilhaI.push('(');*/
//Transforma a expressão de infixa para posfixa
while(!(pilhaI.isEmpty())){
char aux=pilhaI.pop();
switch(aux){
case '(':{
pilhaT.push(aux);
}
break;
case ')':{
//Enquanto naum encontrar "(" transfere os operadores da pilhaT para pilhaP
//Quando encontrar ele para
tmp=pilhaT.pop();
while(tmp!='('){
pilhaP.push(tmp);
tmp=pilhaT.pop();
break;
}
}
break;
case '+':{
//Ele verifica se na pilhaT tem algum operador "*" ou "/"
//Se tiver, ele tira da pilhaT e coloca na pilhaP e depois empilha o "+" na pilhaT
//Se naum tiver ele apenas empilha o "+" na pilhaT
if(!(pilhaT.isEmpty())){
tmp=pilhaT.pop();
if(tmp=='('){
pilhaT.push(tmp);
pilhaT.push(aux);
}
else{
if((tmp=='*')||(tmp=='/')){
pilhaP.push(tmp);
tmp=pilhaT.pop();
while((tmp!='*')||(tmp!='/')){
pilhaP.push(tmp);
tmp=pilhaT.pop();
break;
}
pilhaT.push(tmp);
pilhaT.push(aux);
}
else{
if((tmp=='+')||(tmp=='-')){
pilhaP.push(tmp);
pilhaT.push(aux);
}
}
}
}
else{
pilhaT.push(aux);
}
}
break;
case '-':{
//Ele verifica se na pilhaT tem algum operador "*" ou "/"
//Se tiver, ele tira da pilhaT e coloca na pilhaP e depois empilha o "-" na pilhaT
//Se naum tiver ele apenas empilha o "-" na pilhaT
if(!(pilhaT.isEmpty())){
tmp=pilhaT.pop();
if(tmp=='('){
pilhaT.push(tmp);
pilhaT.push(aux);
}
else{
if((tmp=='*')||(tmp=='/')){
pilhaP.push(tmp);
tmp=pilhaT.pop();
while((tmp!='*')||(tmp!='/')){
pilhaP.push(tmp);
tmp=pilhaT.pop();
break;
}
pilhaT.push(tmp);
pilhaT.push(aux);
}
else{
if((tmp=='+')||(tmp=='-')){
pilhaP.push(tmp);
pilhaT.push(aux);
}
}
}
}
else{
pilhaT.push(aux);
}
}
break;
case '*':{
//Apenas empilha o "*" na pilhaT
pilhaT.push(aux);
}
break;
case '/':{
//Apenas empilha o "/" na pilhaT
pilhaT.push(aux);
}
break;
default :{
//Empilha na pilhaP a letra encontrada na pilhaI
pilhaP.push(aux);
}
break;
}
}
//Transfere o que sobrou na pilhaT para pilhaP
if(pilhaI.isEmpty()){
while(!(pilhaT.isEmpty())){
tmp=pilhaT.pop();
if((tmp=='(')||(tmp=='0')){
}
else{
pilhaP.push(tmp);
}
}
}
//Inverte os valores da pilha
while(!(pilhaP.isEmpty())){
pilhaPrint.push(pilhaP.pop());
}
//Imprime a expressão de forma Pósfixa
while(!(pilhaPrint.isEmpty())){
char auxPrint=pilhaPrint.pop();
if(auxPrint=='0'){
}
else{
System.out.print(auxPrint);
}
}
}
}