Alguem me ajuda com este trabalho de aula dee uma olhada

1 resposta
F

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 !!!

1 Resposta

I

Acho que consegues resolver usando expressões regulares ou mesmo montando um autômato de estado finito. Nada que um bom livro de compiladores não resolva :grin: Eita matéria boa… :lol: T+

Criado 1 de maio de 2007
Ultima resposta 2 de mai. de 2007
Respostas 1
Participantes 2