private void btnIgual_Click(object sender, EventArgs e) { FilaLista <string> infixa = new FilaLista <string>(); FilaLista <string> posfixa = new FilaLista <string>(); PilhaLista <string> ops = new PilhaLista <string>(); //declara e instancia as 3 listas string expressao = txtVisor.Text; //expressão a ser calculada for (int i = 0; i < expressao.Length; i++) //for até o fim da expressão { string elemento = ""; if (!IsOp(expressao[i].ToString())) //se não for uma operção { elemento = ""; int inicial = i; while (inicial + elemento.Length < expressao.Length && (!IsOp(expressao[inicial + elemento.Length].ToString()) || expressao[inicial + elemento.Length] == '.')) //enquanto não acabou a expressão, não for operação ou não for ponto { elemento += expressao[inicial + elemento.Length]; //incrementa o elemento com o valor da posição específic da expressão } i = inicial + elemento.Length - 1; posfixa.Enfileirar(elemento); //enfileira na posfixa o elemento } else //se for operação { elemento = expressao[i] + ""; while (!ops.EstaVazia() && TemPrecedencia(ops.OTopo()[0], elemento[0])) //enquanto não estiver vazia e tiver precedência { char op = ops.OTopo()[0]; if (op == '(') { break; } else //se não for abre parenteses { posfixa.Enfileirar(op + ""); //enfileira ops.Desempilhar(); //desempilha } } if (elemento != ")") //se não for fecha parenteses { ops.Empilhar(elemento); //empilha } else //se for { ops.Desempilhar(); //desempilha } } if (elemento != "(" && elemento != ")") //se não for parenteses { infixa.Enfileirar(elemento); //enfileira o elemento } } while (!ops.EstaVazia()) //enquanto não estiver vazia { string op = ops.Desempilhar(); //pega o primeiro da pilha if (op != "(" && op != ")") //se não for parenteses { posfixa.Enfileirar(op); //enfileira } } escreverSeq(infixa, posfixa); //escreve na tela as sequências txtResultado.Text = CalcularResultado(posfixa).ToString(); //calcula e escreve o resultado }
private void btnIgual_Click(object sender, EventArgs e) { FilaLista <string> infixa = new FilaLista <string>(); FilaLista <string> posfixa = new FilaLista <string>(); PilhaLista <string> ops = new PilhaLista <string>(); string expressao = txtVisor.Text; for (int i = 0; i < expressao.Length; i++) { string elemento = ""; if (!IsOp(expressao[i].ToString())) { elemento = ""; int inicial = i; while (inicial + elemento.Length < expressao.Length && (!IsOp(expressao[inicial + elemento.Length].ToString()) || expressao[inicial + elemento.Length] == '.')) { elemento += expressao[inicial + elemento.Length]; } i = inicial + elemento.Length - 1; posfixa.Enfileirar(elemento); } else { elemento = expressao[i] + ""; while (!ops.EstaVazia() && TemPrecedencia(ops.OTopo()[0], elemento[0])) { char op = ops.OTopo()[0]; if (op == '(') { break; } else { posfixa.Enfileirar(op + ""); ops.Desempilhar(); } } if (elemento != ")") { ops.Empilhar(elemento); } else { ops.Desempilhar(); } } if (elemento != "(" && elemento != ")") { infixa.Enfileirar(elemento); } } while (!ops.EstaVazia()) { string op = ops.Desempilhar(); if (op != "(" && op != ")") { posfixa.Enfileirar(op); } } escreverSeq(infixa, posfixa); txtResultado.Text = CalcularResultado(posfixa).ToString(); }