import javax.swing.JOptionPane;
public class Calculadora{
public static int menu(){
String input=JOptionPane.showInputDialog("1.Introducir ecuacion infijan2. Mostrar Prefijon3.Mostrar Sufijon4.Resolver operaciones(mediante pilas)n5.Salir");
int in=Integer.parseInt(input);
return in;
}
public static void main(String[]args){
int x=0;
String []pila_final=new String[20],pila_temporal=new String[20];
String infijo="";
Metodos obj=new Metodos();
while(x!=5){
x=menu();
switch(x){
case 1:infijo=JOptionPane.showInputDialog("Introduce la ecuación");break;
case 2:obj.prefijo(infijo, pila_temporal, pila_final); break;
case 3:obj.sufijo(infijo, pila_temporal, pila_final); break;
case 4:obj.operaciones(infijo); break;
case 5:System.exit(0);break;
}
}
}
}
class Metodos{
public void operaciones(String infijo){
char a[]=new char[20];
int b[]=new int[20];
int resultado=0, contador=0;
for(int i=0; i<infijo.length();i++){
switch(infijo.charAt(i)){
case '+':a[0]=infijo.charAt(i);break;
case '-':a[0]=infijo.charAt(i);break;
case '*':a[0]=infijo.charAt(i);break;
case '/':a[0]=infijo.charAt(i);break;
default:b[contador]=(infijo.charAt(i));
contador++;
break;
}
if(contador==2){
if(a[0]=='+'){
resultado+=((b[contador-1])+(b[contador]));
b[0]=resultado;}
if(a[0]=='-'){
resultado+=((b[0])-(b[1]));
b[0]=resultado;}
if(a[0]=='/'){
resultado+=((b[0])/(b[1]));
b[0]=resultado;}
if(a[0]=='*'){
resultado+=((b[0])*(b[1]));
b[0]=resultado;}
contador=1;}
}
JOptionPane.showMessageDialog(null,resultado);
}
public void sufijo(String infijo, String [] pila_temporal, String [] pila_final){
infijo+="(";
pila_temporal[infijo.length()+1]+=")";
String cad="";
for(int i=infijo.length()+1;i>-1;i--){
char temporal=infijo.charAt(i);
switch(temporal){
case ')':pila_temporal[i]+=temporal; break;
case '+':case'-':case'/':case'*':case'^':
while((Jerarquia(temporal))>=(Jerarquia_ant(infijo,i)));
pila_temporal[i]+=temporal;
break;
case '(':
while(pila_temporal[i-1]!=")");
pila_final[i]=pila_temporal[i];
pila_temporal[i]=null;
break;
default:pila_final[i]+=temporal;
}
}
for(int j=0;j>infijo.length();j++)
cad+=pila_final[j];
JOptionPane.showMessageDialog(null,cad,"SUFIJO",JOptionPane.PLAIN_MESSAGE);
}
public void prefijo(String infijo, String [] pila_temporal, String [] pila_final){
infijo+=")";
pila_temporal[infijo.length()+1]+="(";
String cad="";
for(int i=0;i<infijo.length();i++){
char temporal=infijo.charAt(i);
switch(temporal){
case '(':pila_temporal[i]+=temporal; break;
case '+':case'-':case'/':case'*':case'^':
while((Jerarquia(temporal))>=(Jerarquia_sig(infijo,i)));
pila_temporal[i]+=temporal;
break;
case ')':
while(pila_temporal[i-1]!=")");
pila_final[i]=pila_temporal[i];
pila_temporal[i]=null;
break;
default:pila_final[i]+=temporal;
}
}
for(int j=0;j<infijo.length();j++)
cad+=pila_final[j];
JOptionPane.showMessageDialog(null,cad,"PREFIJO",JOptionPane.PLAIN_MESSAGE);
}
public char Jerarquia(char temporal){
if(temporal==')')
temporal=5;
if(temporal=='^')
temporal=4;
if(temporal=='*'||temporal=='/')
temporal=3;
if(temporal=='+'||temporal=='-')
temporal=2;
if(temporal=='(')
temporal=1;
return temporal;
}
public char Jerarquia_ant(String infijo, int i){
char aux=0;
if(infijo.charAt(i-1)==')')
aux=5;
if(infijo.charAt(i-1)=='^')
aux=4;
if(infijo.charAt(i-1)=='*'||infijo.charAt(i-1)=='/')
aux=3;
if(infijo.charAt(i-1)=='+'||infijo.charAt(i-1)=='-')
aux=2;
if(infijo.charAt(i-1)=='(')
aux=1;
return aux;
}
public char Jerarquia_sig(String infijo, int i){
char aux=0;
if(infijo.charAt(i+1)==')')
aux=5;
if(infijo.charAt(i+1)=='^')
aux=4;
if(infijo.charAt(i+1)=='*'||infijo.charAt(i+1)=='/')
aux=3;
if(infijo.charAt(i+1)=='+'||infijo.charAt(i+1)=='-')
aux=2;
if(infijo.charAt(i+1)=='(')
aux=1;
return aux;
}
}