• Viernes 26 de Abril de 2024, 01:39

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Temas - ooAlvar0oo

Páginas: [1]
1
Java / infijo a prefijo y posfijo
« en: Domingo 21 de Septiembre de 2008, 21:31 »
Amigos q tal soy nuevo en este foro. Necesito hacer un programa en java que me pase de notacion infija una ecuacion a prefijo y postfija. He hecho lo que verán abajo, pero el metodo sufijo(postfijo) y prefijo no me imprimen nada. Ayudenme please.

Código: Text
  1. import javax.swing.JOptionPane;
  2.     public class Calculadora{
  3.     public static int menu(){
  4.         String input=JOptionPane.showInputDialog("1.Introducir ecuacion infijan2. Mostrar Prefijon3.Mostrar Sufijon4.Resolver operaciones(mediante pilas)n5.Salir");
  5.         int in=Integer.parseInt(input);
  6.         return in;
  7.     }
  8.     public static void main(String[]args){
  9.         int x=0;
  10.         String []pila_final=new String[20],pila_temporal=new String[20];
  11.         String infijo="";
  12.         Metodos obj=new Metodos();
  13.         while(x!=5){
  14.         x=menu();
  15.         switch(x){
  16.         case 1:infijo=JOptionPane.showInputDialog("Introduce la ecuación");break;
  17.         case 2:obj.prefijo(infijo, pila_temporal, pila_final); break;
  18.         case 3:obj.sufijo(infijo, pila_temporal, pila_final); break;
  19.         case 4:obj.operaciones(infijo); break;
  20.         case 5:System.exit(0);break;
  21.         }
  22.         }
  23.     }
  24. }
  25.     class Metodos{
  26.         public void operaciones(String infijo){
  27.             char a[]=new char[20];
  28.             int b[]=new int[20];
  29.             int resultado=0, contador=0;
  30.             for(int i=0; i<infijo.length();i++){
  31.                 switch(infijo.charAt(i)){
  32.                     case '+':a[0]=infijo.charAt(i);break;
  33.                     case '-':a[0]=infijo.charAt(i);break;
  34.                     case '*':a[0]=infijo.charAt(i);break;
  35.                     case '/':a[0]=infijo.charAt(i);break;
  36.                     default:b[contador]=(infijo.charAt(i));
  37.                             contador++;
  38.                             break;
  39.                 }
  40.             if(contador==2){
  41.             if(a[0]=='+'){
  42.                 resultado+=((b[contador-1])+(b[contador]));
  43.                 b[0]=resultado;}
  44.             if(a[0]=='-'){
  45.                 resultado+=((b[0])-(b[1]));
  46.                 b[0]=resultado;}
  47.             if(a[0]=='/'){
  48.                 resultado+=((b[0])/(b[1]));
  49.                 b[0]=resultado;}
  50.             if(a[0]=='*'){
  51.                 resultado+=((b[0])*(b[1]));
  52.                 b[0]=resultado;}
  53.             contador=1;}
  54.             }
  55.             JOptionPane.showMessageDialog(null,resultado);
  56.                
  57.         }
  58.         public void sufijo(String infijo, String [] pila_temporal, String [] pila_final){
  59.             infijo+="(";
  60.             pila_temporal[infijo.length()+1]+=")";
  61.             String cad="";
  62.                 for(int i=infijo.length()+1;i>-1;i--){
  63.                     char temporal=infijo.charAt(i);
  64.                         switch(temporal){
  65.                             case ')':pila_temporal[i]+=temporal; break;
  66.                             case '+':case'-':case'/':case'*':case'^':
  67.                                 while((Jerarquia(temporal))>=(Jerarquia_ant(infijo,i)));
  68.                                         pila_temporal[i]+=temporal;
  69.                                 break;
  70.                             case '(':
  71.                                 while(pila_temporal[i-1]!=")");
  72.                                     pila_final[i]=pila_temporal[i];
  73.                                     pila_temporal[i]=null;
  74.                                     break;
  75.                             default:pila_final[i]+=temporal;
  76.                         }
  77.                 }
  78.                 for(int j=0;j>infijo.length();j++)
  79.                     cad+=pila_final[j];
  80.                 JOptionPane.showMessageDialog(null,cad,"SUFIJO",JOptionPane.PLAIN_MESSAGE);
  81.         }
  82.             public void prefijo(String infijo, String [] pila_temporal, String [] pila_final){
  83.                     infijo+=")";
  84.                     pila_temporal[infijo.length()+1]+="(";
  85.                     String cad="";
  86.                         for(int i=0;i<infijo.length();i++){
  87.                             char temporal=infijo.charAt(i);
  88.                                 switch(temporal){
  89.                                     case '(':pila_temporal[i]+=temporal; break;
  90.                                     case '+':case'-':case'/':case'*':case'^':
  91.                                         while((Jerarquia(temporal))>=(Jerarquia_sig(infijo,i)));
  92.                                                 pila_temporal[i]+=temporal;
  93.                                         break;
  94.                                     case ')':
  95.                                         while(pila_temporal[i-1]!=")");
  96.                                             pila_final[i]=pila_temporal[i];
  97.                                             pila_temporal[i]=null;
  98.                                             break;
  99.                                     default:pila_final[i]+=temporal;
  100.                                 }
  101.                         }
  102.                         for(int j=0;j<infijo.length();j++)
  103.                             cad+=pila_final[j];
  104.                         JOptionPane.showMessageDialog(null,cad,"PREFIJO",JOptionPane.PLAIN_MESSAGE);       
  105.         }
  106.         public char Jerarquia(char temporal){
  107.             if(temporal==')')
  108.                 temporal=5;
  109.             if(temporal=='^')
  110.                 temporal=4;
  111.             if(temporal=='*'||temporal=='/')
  112.                 temporal=3;
  113.             if(temporal=='+'||temporal=='-')
  114.                 temporal=2;
  115.             if(temporal=='(')
  116.                 temporal=1;
  117.             return temporal;
  118.         }
  119.         public char Jerarquia_ant(String infijo, int i){
  120.             char aux=0;
  121.             if(infijo.charAt(i-1)==')')
  122.                 aux=5;
  123.             if(infijo.charAt(i-1)=='^')
  124.                 aux=4;
  125.             if(infijo.charAt(i-1)=='*'||infijo.charAt(i-1)=='/')
  126.                 aux=3;
  127.             if(infijo.charAt(i-1)=='+'||infijo.charAt(i-1)=='-')
  128.                 aux=2;
  129.             if(infijo.charAt(i-1)=='(')
  130.                 aux=1;
  131.             return aux;
  132.         }
  133.         public char Jerarquia_sig(String infijo, int i){
  134.             char aux=0;
  135.             if(infijo.charAt(i+1)==')')
  136.                 aux=5;
  137.             if(infijo.charAt(i+1)=='^')
  138.                 aux=4;
  139.             if(infijo.charAt(i+1)=='*'||infijo.charAt(i+1)=='/')
  140.                 aux=3;
  141.             if(infijo.charAt(i+1)=='+'||infijo.charAt(i+1)=='-')
  142.                 aux=2;
  143.             if(infijo.charAt(i+1)=='(')
  144.                 aux=1;
  145.             return aux;
  146.         }
  147.     }
  148.  

Y otro con unas mejoras me ha quedado asi

Código: Text
  1. import javax.swing.JOptionPane;
  2. public class Infijo2Sufijo {
  3.     public static int menu(){
  4.         String input=JOptionPane.showInputDialog("1.Introducir ecuacion infijan2. Mostrar Prefijon3.Mostrar Sufijon4.Resolver operaciones(mediante pilas)n5.Salir");
  5.         int in=Integer.parseInt(input);
  6.         return in;
  7.     }
  8.     public static void main(String[] args) {
  9.         int x=0;
  10.         Operaciones obj=new Operaciones();
  11.         String infijo="";
  12.         while(x!=5){
  13.             x=menu();
  14.             switch(x){
  15.             case 1:infijo = JOptionPane.showInputDialog("Infijo"); break;
  16.             case 2:obj.Prefijo(infijo);break;
  17.             case 3:obj.Sufijo(infijo); break;
  18.             case 4: break;
  19.             case 5:System.exit(0); break;
  20.             }
  21.             }
  22.         }   
  23. }
  24. class Operaciones{
  25.     public void Sufijo(String infijo){
  26.         infijo+=')';
  27.         int longitud= infijo.length();
  28.         String result="";
  29.         char Pa[] = new char[longitud];
  30.         char Pb[] = new char[longitud++];
  31.         Pb[longitud++]='(';
  32.         for (int i = 0; i < longitud; i++) {
  33.             char temporal = infijo.charAt(i);
  34.                 switch (temporal) {
  35.                
  36.                 case '(':Pa[i++]=(temporal);break;
  37.                 case '+':case '-':case '^':case '*':case '/':
  38.                     while (Jerarquia(temporal) <= Jerarquia(Pb[i-1]))
  39.                         Pa[i++]=temporal;
  40.                     Pb[i]=(Pb[(i-1)-1]);
  41.                     Pb[i++]=temporal;
  42.                 break;
  43.                 case ')':
  44.                     while (Pb[i-1] != '(')
  45.                         Pa[i++]=Pb[i--];
  46.                     Pa[i]=(Pb[(i-1)-1]);
  47.                     Pb[(i-1)-1]=Pb[i];
  48.                 break;
  49.                 default:Pa[i++]=temporal;
  50.                 break;
  51.                 }
  52.         }
  53.        for(int z=0;z<3;z++)
  54.             result+=Pa[z];
  55.             System.out.println(result);
  56.     }
  57.     public static int Jerarquia(char operador) {
  58.         int valor = 0;
  59.         switch (operador) {
  60.             case ')':valor= 5;break;
  61.             case '^':valor= 4;break;
  62.             case '*':case '/':valor= 3; break;
  63.             case '+':case '-':valor= 2;break;
  64.             case '(':valor= 1;break;
  65.         }
  66.         return valor;
  67.     }
  68.     public void Prefijo(String infijo){
  69.         infijo+='(';
  70.         int longitud= infijo.length();
  71.         String result="";
  72.         char Pa[] = new char[longitud];
  73.         char Pb[] = new char[longitud+1];
  74.         Pb[longitud+1]=')';
  75.         for (int i = longitud; i > -1; i--) {
  76.             char temporal = infijo.charAt(i);
  77.                 switch (temporal) {
  78.                
  79.                 case ')':Pa[i]=(temporal);break;
  80.                 case '+':case '-':case '^':case '*':case '/':
  81.                     while (Jerarquia(temporal) >= Jerarquia(Pb[i+1]))
  82.                         Pa[i++]=temporal;
  83.                         Pb[i]=(Pb[(i+1)+1]);
  84.                         Pb[i++]=temporal;
  85.                 break;
  86.                 case '(':
  87.                     while (Pb[i-1] != ')')
  88.                         Pa[i]=Pa[i++];
  89.                         Pb[i]=(Pb[(i+1)+1]);
  90.                         Pb[i]=Pb[(i+1)+1];
  91.                 break;
  92.                 default:Pa[i++]=temporal;
  93.                 break;
  94.                 }
  95.         }
  96.        for(int z=0;z<3;z++)
  97.             result+=Pa[z];
  98.             System.out.println(result);
  99.     }
  100. }
  101.  
  102.  

Páginas: [1]