예제 #1
0
        private void escreverSeq(FilaLista <string> inf, FilaLista <string> pos)
        {
            char letra = 'A';

            string[] vet = pos.ToArray(); //lista de pósfixa
            lblExpres.Text += "Posfixa: ";

            for (int i = 0; i < vet.Length; i++) //enquanto não acabou o vetor
            {
                if (IsOp(vet[i]))                //se for operação
                {
                    lblExpres.Text += vet[i];    //armazena na string
                }
                else //se não for operação
                {
                    lblExpres.Text += letra++; //armazena a letra e incrementa
                }
            }

            lblExpres.Text += "\n" + "Infixa: ";
            letra           = 'A';
            vet             = inf.ToArray();     //lista de infixa

            for (int i = 0; i < vet.Length; i++) //enquanto não acabou o vetor
            {
                if (IsOp(vet[i]))                //se for operação
                {
                    lblExpres.Text += vet[i];    //armazena na string
                }
                else //se não for operação
                {
                    lblExpres.Text += letra++; //armazena a letra e incrementa
                }
            }
        }
예제 #2
0
        private void escreverSeq(FilaLista <string> inf, FilaLista <string> pos)
        {
            char letra = 'A';

            string[] vet = pos.ToArray();
            lblExpres.Text += "Posfixa: ";
            for (int i = 0; i < vet.Length; i++)
            {
                if (IsOp(vet[i]))
                {
                    lblExpres.Text += vet[i];
                }
                else
                {
                    lblExpres.Text += letra++;
                }
            }
            lblExpres.Text += "\n" + "Infixa: ";;
            letra           = 'A';
            vet             = inf.ToArray();
            for (int i = 0; i < vet.Length; i++)
            {
                if (IsOp(vet[i]))
                {
                    lblExpres.Text += vet[i];
                }
                else
                {
                    lblExpres.Text += letra++;
                }
            }
        }
예제 #3
0
        private double CalcularResultado(FilaLista <string> expre)
        {
            PilhaLista <double> valores = new PilhaLista <double>();
            double v1 = 0, v2 = 0, result = 0;

            string[] vet = expre.ToArray();

            for (int c = 0; c < vet.Length; c++)                              //for até o fim do vetor
            {
                if (!IsOp(vet[c]))                                            //se não for operação
                {
                    valores.Empilhar(double.Parse(vet[c].Replace('.', ','))); //empilha e troca ponto por vírgula
                }
                else
                {
                    v1 = valores.Desempilhar();        //desempilha o 1º valor
                    v2 = valores.Desempilhar();        //desempilha o 2º valor

                    switch (vet[c])                    //switch do valor caso seja operção
                    {
                    case "+": result = v2 + v1; break; //se for + soma

                    case "-": result = v2 - v1; break; //se for - subtrai

                    case "*": result = v2 * v1; break; //se for * multiplica

                    case "/":                          //se for divisão
                        if (v1 == 0)
                        {
                            throw new DivideByZeroException("Divisão por 0"); //se for 0 joga exceção
                        }
                        result = v2 / v1; break;                              //se não for zero calcula

                    case "^": result = Math.Pow(v2, v1); break;               //se for ^ faz potência
                    }
                    valores.Empilhar(result);                                 //empilha o resultado
                }
            }

            return(valores.Desempilhar()); //no fim desempilha o resultado final
        }
예제 #4
0
        private double CalcularResultado(FilaLista <string> expre)
        {
            PilhaLista <double> valores = new PilhaLista <double>();
            double v1 = 0, v2 = 0, result = 0;

            string[] vet = expre.ToArray();

            for (int c = 0; c < vet.Length; c++)
            {
                if (!IsOp(vet[c]))
                {
                    valores.Empilhar(double.Parse(vet[c].Replace('.', ',')));
                }
                else
                {
                    v1 = valores.Desempilhar();
                    v2 = valores.Desempilhar();
                    switch (vet[c])
                    {
                    case "+": result = v2 + v1; break;

                    case "-": result = v2 - v1; break;

                    case "*": result = v2 * v1; break;

                    case "/":
                        if (v1 == 0)
                        {
                            throw new DivideByZeroException("Divisão por 0");
                        }
                        result = v2 / v1; break;

                    case "^": result = Math.Pow(v2, v1); break;
                    }
                    valores.Empilhar(result);
                }
            }

            return(valores.Desempilhar());
        }