Calculadora HP

2 respostas
D

Preciso fazer uma calculadora similar a calculadora HP.
Mas nao estou conseguindo achar a logica de programacao que devo usar, nem a estrutura de dados para armazenar os numeros e operadores.

O programa precisa realizar calculo de equações grandes, além de considerar parenteses, e precedência de operações.

12-43*(54-8*(2-9))+(8/5)=

além de calculo de funções pré definidas: sen, cos, lim. etc…

Preciso de idéias ou exemplos.
Obrigado!
ps: nao posso usar componentes

2 Respostas

L

O que seriam compontentes?!?!

A equação que você passou esta em uma notação infixa, você tem que converter para notaçao pos fixa e depois realizar a operação usando pilha. Dessa forma sua equação iria virar isso (em notação pos fixa):

12,43,-,54,8,-,2,9,-,,,8,5,/,+

Sendo a , apenas para separar os elementos

O negocio é você fazer o programa para converter e depois realizar a operação que é: enquanto achar número, empilha, qdo achar operador, desempilha os dois ultimos, faz a operacao e empilha o resultado, nesse exemplo:
empilha 12, empilha 43, achou operador, desempilha 43, desempilha 12, realiza a operacao, empilha o resultado -31, empilha 54, empilha 8, achou operador, desempilha 8, desempilha 54, realiza operacao, empilha o resultado 46, empilha 2, empilha 9, achou operador, desempilha 9, desempilha 2, realiza operacao, empilha resultado -11, achou operador, desempilha -11, desempilha 46, realiza operação… e assim vai.

Da uma pesquisada sobre notação pós fixa e infixa.

http://www.dca.fee.unicamp.br/cursos/EA876/apostila/HTML/node75.html
http://www.ime.usp.br/~pf/mac0122-2002/aulas/stacks.html

B

Ola,

Acho que é pelo caminho que o luBS explicou, mas como um append ao que ele falou, preste atenção a prioridade das operações, tipo * vem antes de +, eu a muito tempo fez um interpretador para resolveristo, mas considerei como um compilador, pois tinha que ser mais abrangente, mas é pelo uso de pilha que se resolve.

Criado 9 de dezembro de 2008
Ultima resposta 15 de dez. de 2008
Respostas 2
Participantes 3