Expressão matemática?

2 respostas
N

Pessoal,

Achei alguns tópicos sobre validação de expressões aritméticas no guj, todos praticamente dão a mesma solução para validar expressões matemáticas, que é o seguinte:

Empilho ou insiro todo caracter que abre a expressão(EX:’(’,’[’,’{’). Quando achar um caracter que fecha a expressão verifico se se corresponde ao topo da pilha, se corresponde desempilho, se chegar ao final com a pilha vazia a expressão está correta. Mas no caso da expressão abaixo, como ficaria:

(Z+Y) * C+ [(B+D)]- A expressão está correta, mas se eu usar o caso acima não fecha, explico o pq:

empilho: ‘(’,’[’,’(’ sendo este último o topo da pilha.
desempilho e confiro: ‘)’(o primeiro confere com o top, então removo), agora fico com top igual ‘[’ e o próximo lido de fechamento é ‘)’, ou seja, não fecha se eu não desempilhar fico com elementos e teoricamente a expressão está incorreta, mas está correta… Se partir para o próximo de fechamento, que seria o último ‘]’ fecha com o top não removido, mas ainda fico com um ‘(’ não removido. Como posso resolver isso? Obrigado!!

2 Respostas

rogelgarcia

Seu algorítmo não está correto, não faz sentido empilhar todos os que abrem e depois desempilhar todos os que fecham…

Eu não sei o algoritmo de cabeça, mesmo porque ele é um pouco grande…
Mas o correto é voce ler todos os sinais… E sempre que achar um que fecha, voce desempilha…

Então a sequencia ficaria assim:
[b]color=blue * C+ [(B+D)]
Pilha: (

(Z+Y[color=red])[/color] * C+ [(B+D)]
Pilha:

(Z+Y) * C+ [b][color=blue][[/color]/b]
Pilha: [

(Z+Y) * C+ [[b]color=blue]
Pilha: [(

(Z+Y) * C+ [(B+D[color=red])[/color]]
Pilha: [

(Z+Y) * C+ [(B+D)[color=red]][/color]
Pilha:

N

Entendi…Realmente estava errado o algoritmo…Pq estava empilhando tudo e depois desempilhando…Quanto ao código que você não lembra,não tem problema, já me deu a lógica e bem explicada, o resto é comigo… Muito obrigado!!!

Criado 12 de novembro de 2011
Ultima resposta 12 de nov. de 2011
Respostas 2
Participantes 2