Advertisement
s00rk

[Expresiones Matematica]

Oct 1st, 2011
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.29 KB | None | 0 0
  1. package Tarea;
  2.  
  3. import java.util.Scanner;
  4.  
  5. public class Principal
  6. {
  7.     public static void main(String[] args)
  8.     {
  9.         Scanner leer = new Scanner(System.in);
  10.         SOP("Expresion Matematica: ");
  11.         String EXPRESION = leer.nextLine();
  12.        
  13.         if(EXPRESION.length() > 25)
  14.         {
  15.             SOP("La Expresion no debe ser mayor a 25 Caracteres");
  16.             return;
  17.         }
  18.        
  19.         int s = 0;     
  20.        
  21.         do{
  22.             SOP("1.- Infija - PostFija");
  23.             SOP("2.- Infija - PreFija");
  24.             s = leer.nextInt();
  25.             if(s == 1)
  26.             {
  27.                 ConvertirAPostFija(EXPRESION);
  28.             }else if(s == 2){
  29.                 ConvertirAPreFija(EXPRESION);
  30.             }
  31.         }while(s != 1 && s != 2);
  32.     }
  33.    
  34.     public static void ConvertirAPostFija(String EXPRESION)
  35.     {
  36.         String sol = "";
  37.         Pila P01 = new Pila(25);
  38.         char letra;
  39.         SOP("Recorremos la EXPRESION de izquierda a derecha");
  40.         for(int i = 0; i < EXPRESION.length(); i++)
  41.         {
  42.             letra = EXPRESION.charAt(i);
  43.             if(letra == '('){
  44.                 SOP("El caracter es ( asi que va directo a la pila");
  45.                 P01.InsertarPila(letra);
  46.             }else if(letra == ')')
  47.             {
  48.                 SOP("El caracter es ) asi que saca todos los elementos de la pila hacia la solucion hasta encontrar ( y lo saca de la pila");
  49.                 while(P01.VerPila() && P01.DatoPila != '(')
  50.                 {
  51.                     sol = sol + (char)P01.DatoPila;
  52.                     P01.RemoverPila();
  53.                 }
  54.                 P01.RemoverPila();
  55.             }else if(!EsOperador(letra)){
  56.                 SOP("Si es operando va directo a la solucion");
  57.                 sol = sol + letra;
  58.             }else{
  59.                 if(!P01.VerPila()){
  60.                     SOP("Si es operando y la pila esta vacia va directo a la pila");
  61.                     P01.InsertarPila(letra);
  62.                 }else{
  63.                     SOP("Si es operando y la pila no esta vacia se sacan los operando que esten en ella que sean menor o igual valor al que sea decea insertar");
  64.                     while(P01.VerPila() && Valor(letra) <= Valor((char)P01.DatoPila))
  65.                     {
  66.                         sol = sol + (char)P01.DatoPila;
  67.                         P01.RemoverPila();
  68.                     }
  69.                     SOP("Y se inserta a la pila");
  70.                     P01.InsertarPila(letra);
  71.                 }
  72.             }
  73.         }
  74.         SOP("Al terminar de recorrer la EXPRESION");
  75.         SOP("Se sacan todos los elementos de la pila y van directo a la solucion");
  76.         while(P01.RemoverPila())
  77.             sol = sol + (char)P01.DatoPila;
  78.        
  79.         System.out.println("Solucion Final: " + sol);
  80.     }
  81.    
  82.     public static void ConvertirAPreFija(String EXPRESION)
  83.     {
  84.         String sol = "", sol1 = "";
  85.         Pila P01 = new Pila(25);
  86.         char letra;
  87.         for(int i = EXPRESION.length()-1; i >= 0; i--)
  88.         {
  89.             letra = EXPRESION.charAt(i);
  90.             if(letra == ')'){
  91.                 SOP("El caracter es ) asi que va directo a la pila");
  92.                 P01.InsertarPila(letra);
  93.             }else if(letra == '(')
  94.             {
  95.                 SOP("El caracter es ( asi que saca todos los elementos de la pila hacia la solucion hasta encontrar ) y lo saca de la pila");
  96.                 while(P01.VerPila() && (char)P01.DatoPila != ')')
  97.                 {
  98.                     sol = sol + (char)P01.DatoPila;
  99.                     P01.RemoverPila();
  100.                 }
  101.                 P01.RemoverPila();
  102.             }else if(!EsOperador(letra)){
  103.                 SOP("Si es operando va directo a la solucion");
  104.                     sol = sol + letra;
  105.             }else{
  106.                 if(!P01.VerPila()){
  107.                     SOP("Si es operando y la pila esta vacia va directo a la pila");
  108.                     P01.InsertarPila(letra);
  109.                 }else{
  110.                     SOP("Si es operando y la pila no esta vacia se sacan los operando que esten en ella que sean menor o igual valor al que sea decea insertar");
  111.                     while(P01.VerPila() && Valor(letra) <= Valor((char)P01.DatoPila))
  112.                     {
  113.                         sol = sol + (char)P01.DatoPila;
  114.                         P01.RemoverPila();
  115.                     }
  116.                     SOP("Y se inserta a la pila");
  117.                     P01.InsertarPila(letra);
  118.                 }
  119.             }  
  120.         }
  121.        
  122.         SOP("Al terminar de recorrer la EXPRESION");
  123.         SOP("Se sacan todos los elementos de la pila y van directo a la solucion");
  124.        
  125.         while(P01.RemoverPila())
  126.             sol = sol + (char)P01.DatoPila;
  127.        
  128.         SOP("Se invierte la expresion");
  129.         for(int i = sol.length()-1; i >= 0; i--)
  130.             sol1 = sol1 + sol.charAt(i);
  131.        
  132.         System.out.println("Solucion Final: " + sol1);
  133.     }
  134.    
  135.     private static void SOP(String mensaje)
  136.     {
  137.         System.out.println(mensaje);
  138.     }
  139.    
  140.     private static int Valor(char letra)
  141.     {
  142.         if(letra == '+' || letra == '-')
  143.             return 1;
  144.         if(letra == '*' || letra == '/')
  145.             return 2;
  146.         if(letra == '^')
  147.             return 3;
  148.         return 0;
  149.     }
  150.    
  151.     private static boolean EsOperador(char letra)
  152.     {
  153.         boolean resp = false;
  154.         if(letra == '+' || letra == '-' || letra == '*' || letra == '/' || letra == '^')
  155.             resp = true;
  156.         return resp;
  157.     }
  158.  
  159. }
  160.  
  161.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement