NPR para numeros com mais de 1 algarismo e casas decimais

0 respostas
Leandro_Santana

Estou montando um projeto onde ele devo digitar uma expressão e ele deve fazer o calculo, consegui fazer para um algarismo, a ideia agora é fazer para 2 algarismo e casas decimais, estou com dificuldades pra implantar a logica podem me ajudar?? O mesmo usa Notação polonesa reversa juntamente com pilha dinamica.

Segue abaixo o que já foi feito!!

Att

Leandro

import javax.swing.*;
import java.util.*;
public class NPR_Numeros {

    //public class NPR_Numeros() {
    	  public static float avaliaExpressao(String npr){
		Stack p = new Stack();
		char letra;
		float valor=0, x, y;
		String valor2="";
		for(int i=0;i<npr.length(); i++){
			letra = npr.charAt(i);
			if(letra>='0' && letra <='9'){
				//valor2= JOptionPane.showInputDialog(null, "Entre com o valor da leta "+letra);
				p.push(letra);
			}
			else if(letra=='+' ||letra=='-' ||letra=='*' ||letra=='/'){

				x=Float.parseFloat(p.pop().toString());
				y=Float.parseFloat(p.pop().toString());
				switch(letra){
					case '+': valor = y+x; break;
					case '-' : valor =y-x; break;
					case '*': valor = y*x; break;
					case '/' : valor =y/x; break;
				}
				p.push(valor);
			}
		}
		valor = Float.parseFloat(p.pop().toString());
	//	String valor3="";
	//	valor3=valor.toString();
		return valor;
    }

  public static int prio (char op){
    	int resp=0;
    	switch(op){
    		case '(': resp=1; break;
    		case '+': resp=2; break;
    		case '-': resp=2; break;
    		case '*': resp=3; break;
    		case '/': resp=3;
    	} return resp;

    }

    public static String toNPR2(String a){
    	a = a.toUpperCase();
    	Stack pri = new Stack();
    	String saida="";
    	char ch;
    	for (int i=0; i<a.length();i++){
    		ch = a.charAt(i);
    	if(ch>='0' && ch<='9'){
    			saida+=ch;
    		}
     	else if(ch=='+' || ch=='-' || ch=='*' || ch=='/'){
				while(!pri.empty() && prio(pri.peek().toString().charAt(0)) >= prio(ch)){
					saida+=pri.pop();	}
				pri.push(ch + "");
    		}
    	else if (ch=='('){
    		pri.push(ch);
    	}
    	else if (ch==')'){
    		while(!pri.peek().toString().equals("(")){
    			saida+=pri.pop().toString();}
    			pri.pop();
    	}

    	}do{
    		saida+=pri.pop().toString();
    	}while(!pri.empty());
    		 return saida;
    }
    public static void main(String args[]){
    	String x ="";
       String resp="";
       x= JOptionPane.showInputDialog(null, "Entre com a equação: ");
       resp = toNPR2(x);
	JOptionPane.showMessageDialog(null,"Resposta= " + avaliaExpressao(resp));
    }

    }
Criado 30 de maio de 2012
Respostas 0
Participantes 1