Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package Practico2;
- import java.util.Random;
- import java.util.Scanner;
- import java.util.Stack;
- public class PreubaEje3 {
- static Random aleatorio = new Random();
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- menu();
- }
- public static void menu() {
- Stack<Character> pila = new Stack<Character>();
- int opcion, seguir;
- String expres;
- do {
- System.out.println("1 - Ingresar una expresion por consola");
- System.out.println("2 - Generar una expresion aleatoria");
- opcion = Helper.getPositiveInt("Ingrese una opcion valida");
- switch(opcion){
- case 1:
- System.out.println("Ingrese una expresion");
- expres = cargarExpresion();
- if(validarExpr(expres)){
- System.out.println("La expresion " + expres + " en notacion PostFija es:");
- interFijaAPost(expres, pila);
- }else {
- System.out.println("Error: se debe ingresa una expresion matematica");
- }
- break;
- case 2:
- expres = generarExpresion();
- System.out.println("La expresion " + expres + " en notacion PostFija es:");
- interFijaAPost(expres, pila);
- break;
- default:
- System.out.println("Opcion no valida");
- }
- seguir=Helper.getPositiveInt("Desea ingresar otra expresion??(1=Si//2=No)");
- }while(seguir !=2);
- System.out.println("Gracias :D");
- }
- public static String cargarExpresion() {
- Scanner sc = new Scanner(System.in);
- String aux;
- aux = sc.nextLine();
- return aux;
- }
- public static String generarExpresion() {
- String[] expr= {"2+5", "(a*b)+c", "((2*6)/3)+9",
- "(4/2)+6", "7-8", "3*x/2+7",
- "(2*a)+ b", "(3*b)-a"};
- int i =aleatorio.nextInt(expr.length-1);
- return expr[i];
- }
- public static Boolean validarExpr(String expres) {
- boolean aux=false;
- for (int i = 0; i < expres.length(); i++) {
- if(expres.contains("+")||expres.contains("-")||expres.contains("*")||expres.contains("/")) {
- aux = true;
- }else {
- aux = false;
- }
- }return aux;
- }
- public static boolean Operadores(char ch1) {
- if (ch1>='*' && ch1<='/') {
- return true;
- }else {
- return false;
- }
- }
- public static int prioridadesOperadores(char ch1){
- int aux=0;
- switch(ch1){
- case '*':
- aux=2;
- break;
- case '/':
- aux=2;
- break;
- case '+':
- aux=1;
- break;
- case '-':
- aux=1;
- break;
- }
- return aux;
- }
- public static boolean Operandos(char ch1) {
- if(ch1>='0'&&ch1<='9'||ch1>='a'&&ch1<='z') {
- return true;
- }
- return false;
- }
- public static void interFijaAPost(String ecuacion, Stack<Character> pila) {
- char aux;
- String salida="";
- for(int i=0;i<ecuacion.length();i++) {
- aux=ecuacion.charAt(i);
- if(Operandos(aux)) {
- salida+=aux;
- }else
- if(Operadores(aux)) {
- if(pila.isEmpty()) {
- pila.push(aux);
- }else {
- if(prioridadesOperadores(aux)>prioridadesOperadores(pila.peek())){
- pila.push(aux);
- }else {
- if(prioridadesOperadores(aux)<=prioridadesOperadores(pila.peek())) {
- salida+=(pila.pop());
- if(Operadores(aux)) {
- if(pila.isEmpty()) {
- pila.push(aux);
- }else {
- if(prioridadesOperadores(aux)>prioridadesOperadores(pila.peek())){
- pila.push(aux);
- }else {
- if(prioridadesOperadores(aux)<=prioridadesOperadores(pila.peek())) {
- salida +=(pila.pop());
- pila.push(aux);
- }
- }
- }
- }
- }
- }
- }
- }
- }
- while(!pila.empty()) {
- salida+=(pila.pop());
- }
- System.out.println(salida);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement