MAB 240 - Computação II

Laboratório 6 - 26/10/2016

Uma calculadora RPN é uma calculadora na qual entramos com as operações após os operandos, e temos um comando que vai guardando operandos em uma espécie de “pilha”. Nesse laboratório vamos construir o modelo de uma calculadora RPN, e usá-lo com a interface (visão+controlador) feita em sala.

Antes de começar, baixe o projeto BlueJ da calculadora feita em sala, já modificado para não usar novos recursos de Java 1.8. Se você estiver usando Eclipse, crie um novo projeto Java no Eclipse e depois copie os arquivos .java que estão dentro do arquivo de Calculadora.zip para a pasta de arquivos fonte do projeto.

Uma calculadora RPN tem as mesmas operações de uma calculadora padrão, mas o funcionamento por trás é bem diferente. Ela funciona com uma pilha de operandos; toda que vez o botão = (chamada de store em uma calculadora RPN) é apertado o valor do display é empilhado, e qualquer outro dígito após isso começa a entrada de outro número. Por exemplo, se o display é 1234 e se faz = o número 1234 é empilhado e o display continua mostrando 1234. Se depois pressiona-se o número 5 o valor do display passa a ser 5, e pressionando o número 3 o valor do display passa a ser 53.

As operações aritméticas todas funcionam da mesma forma: o operando da esquerda é removido do topo da pilha (ou é 0 se a pilha estiver vazia), e o operando da direita é o valor do display. A operação é feita, e o resultado vira o novo valor do display. Qualquer outro dígito após isso começa a entrada de outro número, do mesmo modo que em uma operação de store.

Um exemplo de uso: 2, =, 3, =, 5, *, + faz a operação 2+(3*5), deixando 17 no display e a pilha vazia.

Chame a classe principal do modelo de CalcRPN. Podemos representar uma calculadora RPN com espaço para quatro números usando quatro campos: P0, P1, P2 e P3. O campo P0 é o display, e os outros três campos são a pilha. Os valores iniciais são todos 0.

Como vamos usar esse modelo com a a interface gráfica feita em sala, esse modelo também precisa implementar a mesma interface Calc que a classe CalcQF implementa.

O que muda é o comportamento de cada operação da interface:

1. A operação igual move o valor que estava em P2 para P3, o que estava em P1 para P2, o que estava em P0 para P1, e zera P0.

2. As operações soma, sub, mult e div respectivamente somam, subtraem, multiplicam e dividem o valor de P0 pelo de P1, armazenando o resultado em P0, depois copiando o valor de P2 para P1, de P3 para P2, zerando P3.

3. A operação digito corresponde à entrada de dígitos na calculadora, multiplicando o valor atual de P0 por 10 e somando o dígito correspondente.

4. A operação reset volta a calculadora a seu estado inicial, com todas as variáveis de seu estado iguais a 0.

Depois de implementado o modelo da calculadora RPN, conecte ele com a interface gráfica feita em sala e teste o resultado. Para conectar o novo modelo com a interface, basta mudar a linha em Calculadora que instancia a classe CalcQF para instanciar sua classe CalcRPN no lugar dela.

Agora adicione memória à calculadora, com quatro novas funções (métodos na interface Calc e botões na interface): memPlus (botão M+) adiciona o valor do display à memória interna, memSub (botão M-) subtrai o valor do display da memória interna, memRecall (botão MR) copia o valor da memória para o display, e memClear (botão MC) zera a memória. Esses botões ficarão na primeira fileira; lembre de aumentar a altura da janela para ter espaço para os novos botões.

Você deve implementar a memória tanto no modelo CalcQF quanto no modelo CalcRPN. Note que as implementações são idênticas, exceto talvez pelo detalhe do nome do campo que guarda o display mudar de um modelo para outro. Provavelmente a implementação de outros métodos dos dois modelos também é bastante parecida.


Última Atualização: 2016-12-09 11:49