Dúvidas Cálculo

4 respostas
F

Olá,

Tenho que fazer um algoritmo, que faça cálculos com precedência, exemplo:

1+3*5 - teria que efetuar a multiplicação e depois a soma

1+(3*5) = 1+15 = 16…

No meu problema de trabalho tenho uma String com essa expressão:

String s = "1+2*3";

Ouvi falar que já existe esse algoritmo pronto alguém sabe onde procurar?

Se alguém puder me ajudar, desde já agradeço!

4 Respostas

R

Cara, acho que o java já tem esta precedencia…

Ex: 1 + 2 * 3 = 7.

Flw…

D

Ae Felipe, o jeito q eu conheço de resolver esse tipo de problema eh usando arvores. Voce vai criando a arvore e depois percorre ela pra saber o resultado, mas naum me lembro muito bem qaul eh o jeito de percorrer. Bom, no seu caso a arvore ficaria assim:

raiz
           /   |    \
          1   +  / | \
                  2 *  3
R

Olá!
Darkseid, não precisa de uma estrutra tão complexa para se cálcular com precedência, se bem que a árvore é a mais confiável…
Pode-se usar uma pilha de execução…
pilha 1 - guarda os números
pilha 2 - operandos
pilha 3 - auxiliar (para transição)

vc primiero empilha os dados na pilha, pode ser usado em forma de vetor, e depois pelos sinais vc pega eles por ordem e testa a precedência dos sinais… certo??

[]'s

H

Transforma a expressão para a notação polonesa reversa, que depois é só ler da esquerda para a direita calculando o resultado. Isso pode ser feito porque a notação já leva em conta a precedência dos operadores. Sua expressão 1 + 2 * 3 ficaria 1 2 3 * +, que seria avaliada da seguinte forma:

1 2 3 * +

1 6 +

7

Procura no Google “algoritmo polonesa pós fixa” que você deve achar.
Até mais,

Criado 5 de outubro de 2004
Ultima resposta 17 de out. de 2004
Respostas 4
Participantes 5