Projete e implemente as classes adequadas para manipular expressões aritméticas, oferecendo as seguintes funcionalidades:
a) validação(consistência) da expressão aritmética na forma INFIXA, apontando os erros;
b) conversão da expressão aritmética em notação INFIXA para notação POSFIXA;
b) avaliação da expressão aritmética em notação POSFIXA.
As expressões aritméticas podem ser constituídas de:
· OPERADORES : +, -, /, *
· OPERANDOS: variáveis (apenas uma letra) e constantes (apenas um dígito sem sinal).
· PARÊNTESES: para alterar a precedência
Obs: tamanho máximo 60 caracteres, incluindo os brancos.
O programa deve ler de um arquivo texto uma série de expressões aritméticas em notação INFIXA. Para cada expressão lida do arquivo:
- deve exibir a expressão na forma original (notação INFIXA).
- deve exibir a expressão transformada (notação POSFIXA).
- deve permitir a entrada de valores para os operandos que são variáveis.
- deve exibir o resultado da avaliação.
Obs.: em caso de erro (somente o primeiro erro precisa ser detectado), exiba a mensagem de erro correspondente, rejeite a expressão errada e leia a próxima expressão.
EXEMPLOS DE EXPRESSÕES ARITMÉTICAS:
notação INFIXA notação POSFIXA
A + B A B +
A + B - C * B A B + C B * -
( B - C ) * D B C - D *
A - C - H / B * C A C - H B / C * -
A - ( C - H ) / ( B * C ) A C H - B C * / -
5 + A * 3 5 A 3 * +
-VALIDAÇÃO (consistência) DA EXPRESSÃO NA FORMA INFIXA:
Erros que devem ser detectados:
falta operando Ex: + B * C , (- X * Y), A + B * ) …
parênteses inválidos Ex: ( ) , ) A …
dois operandos juntos Ex: A B * X
falta operador Ex: A (B +C)
dois operadores juntos Ex: A * - B
caractere inválido Ex: A * B %
número de parênteses que abre diferente do número de parênteses que fecha Ex: (5*(A -B)
expressão incompleta Ex: A*
- CONVERSÃO DA EXPRESSÃO DE INFIXA PARA PÓSFIXA:
Percorrer a expressão infixa, da esquerda para direita, analisando cada token:
· Se operando, inserir na pósfixa
· Se operador, testar a sua precedência com o operador que está no topo da pilha e:
- se a pilha está vazia, o operador é empilhado.
- se o operador corrente tem precedência maior que o do topo, então empilha o operador corrente. (ver obs.)
- caso contrário, o operador do topo da pilha é retirado e inserido na pósfixa. E o operador corrente é novamente testado…
· Se abre-parênteses, empilhar.
· Se fecha-parênteses, os operadores que estão na pilha são retirados e inseridos na pósfixa até que um abre parêntese fique no topo da pilha. Este também é retirado e ambos são descartados.
· Se terminar a expressão, transferir todos os operadores da pilha para a pósfixa.
Obs. qualquer operador tem precedência maior que abre abre-parênteses
- AVALIAÇÃO DA EXPRESSÃO NA NOTAÇÃO PÓSFIXA:
Percorrer a expressão pósfixa, da esquerda para direita, analisando cada token:
· Se operando, empilhar.
· Se operador, efetuar a operação do subtopo com o topo, nesta ordem, retirando-os da pilha e empilhando o resultado.
Obs. : antes da avaliação, o usuário deve entrar com os valores para as variáveis.
Atenção! se a variável aparecer mais de uma vez, solicite o valor apenas uma vez.
Não to conseguindo fazer e eu preciso entregar amanhã , alguem me ajuda por favor !!!
Eita matéria boa… :lol: T+