private void buttonCalcular_Click(object sender, EventArgs e) { string auxTexto = textBoxEquacao.Text.Replace("\r", null); string[] linhas = auxTexto.Split('\n'); if (linhas[linhas.Length - 1].Length > 0) { pilhaOperadores = new Pilha(); pilhaNumeros = new Pilha(); saida = new Fila(); PolonesInvertido(linhas[linhas.Length - 1]); Resultado(); textBoxEquacao.AppendText(Environment.NewLine); textBoxEquacao.Select(textBoxEquacao.Text.Length, 0); } }
public static Expressao TraduzirParaPosfixa(Expressao expressaoInfixa) { String infixa = expressaoInfixa.expressao; Pilha <char> p = new Pilha <char>(); String posfixa = ""; for (int i = 0; i < infixa.Length; i++) { bool unario = false; if (isOperador(infixa[i])) { if (infixa[i] == '-') { if (i == 0 || infixa[i - 1] == '(') { p.Empilhar('@'); unario = true; } } if (!unario) { bool parar = false; while (!parar && !p.EstaVazia() && Precedencia(p.OTopo(), infixa[i])) { char operadorComMaiorPrec = p.OTopo(); if (operadorComMaiorPrec == '(') { parar = true; } else { posfixa += operadorComMaiorPrec; p.Desempilhar(); } } if (infixa[i] != ')') { p.Empilhar(infixa[i]); } else { p.Desempilhar(); } } } else { posfixa += infixa[i]; } } while (!p.EstaVazia()) { char operadorComMaiorPrec = p.Desempilhar(); if (operadorComMaiorPrec != '(') { posfixa += operadorComMaiorPrec; } } return(new Expressao(posfixa, expressaoInfixa.dicionario)); }