GUJ Discussões   :   últimos tópicos   |   categorias   |   GUJ Respostas

Calculo de expressões matematicas!


#1

Ae galera susse????

meu problema eh o seguinte, tenho que criar um programa em java para calcular a expressão matematica que o usuario digitar, entao no programa eu tenho que verificar a equação e pa! isso eu consigo, ms o problema eh como resolver essa equação digitada....

olha o programa


#2

O java acho que tem uma classe pra isso, mas não é dificil tambem fazer...

Separa os dados por Espacos em um array

2 * (2 + 1)

Depois sai executando da esquerda pra direita (do 0 até o length) em ordem de prioridade ( { e [ .....depois executa tudo de novo por ordem de prioridade dos sinais.....e buenas...

if(chr == "*")

Etc


#3

Bom, primeiro, o código postado não ia funcionar, pois o trecho

for(i = j; i < str.length(); i++) {
    ch = str.charAt(i);
    if(strSimb.indexOf(ch) == -1) // verificando se tem símbolos inválidos
        v = -1;
}

só iria encontrar um símbolo inválido se ele fosse o último da expressão. Para consertar isso, use o código abaixo:

for(i = j; i < str.length(); i++) {
    ch = str.charAt(i);
    if(strSimb.indexOf(ch) == -1) { // verificando se tem símbolos inválidos
        v = -1;
        break; // saindo do for quando um erro é detectado
    }
}

Para dividir a expressão em unidades adequadas, ou seja, números e símbolos, pode-se usar o String.split(), disponível a partir do Java 1.4, e o java.util.StringTokenizer, disponível desde o 1.0. Usando o StringTokenizer:

public String[] getTokens(String expression) {
    // dividindo expression em tokens, usando os caracteres +, -, *, /, ( e )
    // como delimitadores, que também serão tokens
    StringTokenizer st = new StringTokenizer(expression, "+-*/()", true);
    String[] answer = new String[st.countTokens()];
    // jogando os tokens dentro do array de Strings
    for(int i = 0; i < answer.length; i++) {
        answer[i] = st.nextToken();
    }
    return answer;
}

Pelo que sei, tradicionalmente expressões matemáticas em programação são resolvidas primeiro escrevendo a expressão em notação polonesa reversa (pós-fixa) e depois lendo e calculando o valor. A notação pós-fixa é muito útil porque para resolver a expressão é só ir lendo e calculando da esquerda para a direita. Não me recordo completamente do algoritmo agora, mas é só fazer uma procura no Google por "algoritmo polonesa pós fixa" que você deve achar.


#4