Пример #1
0
        public bool Equals(Dados other)
        {
            Operador aux = (Operador)other;

            if (this.op.Equals(aux))
            {
                return(true);
            }
            else
            {
                return(false);
            }
        }
Пример #2
0
        static public bool Need2Numbers(Operador op)
        {
            string aux = "-+*/^";

            if (aux.Contains(op.Op))
            {
                return(true);
            }
            else
            {
                return(false);
            }
        }
Пример #3
0
        public int CompareTo(Dados other)
        {
            Operador aux = (Operador)other;

            if (this.Prioridade < aux.Prioridade)
            {
                return(-1);
            }
            else if (this.Prioridade == aux.Prioridade)
            {
                return(0);
            }
            else
            {
                return(1);
            }
        }
Пример #4
0
        /// <summary>
        /// Evento encargado de realizar las operaciones con los datos obtenidos
        /// </summary>
        private void operar(object sender, EventArgs e = null)
        {
            // Se comprueba que el texto tenga un formato correcto
            if (!string.IsNullOrEmpty(this.textBox1.Text))
            {
                // Se evalua el 'nombre' del boton presionado
                switch ((sender as Control).Tag)
                {
                // Operacion de suma
                case "Suma":
                    if (this.operadorActivo == null)
                    {
                        // Se asigna el nuevo operador
                        this.operadorActivo = Operador.Suma;
                    }

                    // En caso que cambie el operador se calcula el valor de la operacion en curso
                    if (this.operadorActivo != Operador.Suma)
                    {
                        resultado();
                    }
                    // Se asigna el nuevo operador
                    this.operadorActivo = Operador.Suma;
                    // Se comprueba que el primer valor no sea 0, en caso de serlo se asigna el valor ingresado
                    if (this.calculos.N1 == 0.00)
                    {
                        this.calculos.N1 = double.Parse(this.textBox1.Text);
                    }
                    // Sino se asigna a la variable 2 y se realiza el calculo
                    else
                    {
                        this.calculos.N2 = double.Parse(this.textBox1.Text);
                        realizarOperacion();
                    }
                    break;

                case "Resta":
                    if (this.operadorActivo == null)
                    {
                        // Se asigna el nuevo operador
                        this.operadorActivo = Operador.Resta;
                    }
                    // En caso que cambie el operador se calcula el valor de la operacion en curso
                    if (this.operadorActivo != Operador.Resta)
                    {
                        resultado();
                    }
                    // Se asigna el nuevo operador
                    this.operadorActivo = Operador.Resta;
                    // Se comprueba que el primer valor no sea 0, en caso de serlo se asigna el valor ingresado
                    if (this.calculos.N1 == 0.00)
                    {
                        this.calculos.N1 = double.Parse(this.textBox1.Text);
                    }
                    // Sino se asigna a la variable 2 y se realiza el calculo
                    else
                    {
                        this.calculos.N2 = double.Parse(this.textBox1.Text);
                        realizarOperacion();
                    }
                    break;

                case "Multiplicacion":
                    if (this.operadorActivo == null)
                    {
                        // Se asigna el nuevo operador
                        this.operadorActivo = Operador.Multiplicacion;
                    }
                    // En caso que cambie el operador se calcula el valor de la operacion en curso
                    if (this.operadorActivo != Operador.Multiplicacion)
                    {
                        resultado();
                    }
                    this.operadorActivo = Operador.Multiplicacion;
                    // Se comprueba que el primer valor no sea 0, en caso de serlo se asigna el valor ingresado
                    if (this.calculos.N1 == 0.00)
                    {
                        this.calculos.N1 = double.Parse(this.textBox1.Text);
                    }
                    // Sino se asigna a la variable 2 y se realiza el calculo
                    else
                    {
                        this.calculos.N2 = double.Parse(this.textBox1.Text);
                        realizarOperacion();
                    }
                    break;

                case "Division":
                    if (this.operadorActivo == null)
                    {
                        // Se asigna el nuevo operador
                        this.operadorActivo = Operador.Division;
                    }
                    // En caso que cambie el operador se calcula el valor de la operacion en curso
                    if (this.operadorActivo != Operador.Division)
                    {
                        resultado();
                    }
                    this.operadorActivo = Operador.Division;
                    // Se comprueba que el primer valor no sea 0, en caso de serlo se asigna el valor ingresado
                    if (this.calculos.N1 == 0.00)
                    {
                        this.calculos.N1 = double.Parse(this.textBox1.Text);
                    }
                    // Sino se asigna a la variable 2 y se realiza el calculo
                    else
                    {
                        this.calculos.N2 = double.Parse(this.textBox1.Text);
                        realizarOperacion();
                    }
                    break;
                }
                // Se limpia la entrada y se actualiza el valor superior
                this.textBox1.Clear();
                this.textBox2.Text = this.calculos.N1.ToString();
            }
        }
Пример #5
0
        private void PolonesInvertido(string expressao)
        {
            if (expressao.Length != 0)
            {
                int  cont = 0;
                bool number = false, operador = false;

                while (cont < expressao.Length && (Valor.IsNumber(expressao[cont]) || expressao[cont].Equals(',')))
                {
                    cont++;
                    number = true;
                }

                while (cont < expressao.Length && Operador.IsEspecial(expressao[cont].ToString()) && Operador.IsOperator(expressao[cont].ToString()) && number == false)
                {
                    cont++;
                    operador = true;
                }

                if (cont < expressao.Length && !number && (expressao[cont].Equals('(') || !Operador.IsEspecial(expressao[cont].ToString())))
                {
                    operador = true;
                }

                if (operador == true)
                {
                    Operador aux;
                    if (cont > 0)
                    {
                        aux = new Operador(expressao.Substring(0, cont));
                    }
                    else
                    {
                        aux = new Operador(expressao.Substring(0, 1));
                    }

                    if (aux.Op.Equals("("))
                    {
                        pilhaOperadores.Empilhar(null);
                        operador = false;
                        if (cont > 0)
                        {
                            PolonesInvertido(expressao.Substring(cont));
                        }
                        else
                        {
                            PolonesInvertido(expressao.Substring(cont + 1));
                        }
                        return;
                    }

                    if ((pilhaOperadores.OlharTopo() == null || pilhaOperadores.OlharTopo().CompareTo(aux) < 0) && !aux.Op.Equals(")"))
                    {
                        pilhaOperadores.Empilhar(aux);
                        operador = false;
                        if (cont > 0)
                        {
                            PolonesInvertido(expressao.Substring(cont));
                        }
                        else
                        {
                            PolonesInvertido(expressao.Substring(cont + 1));
                        }
                        return;
                    }
                    else
                    {
                        Operador auxOp;
                        if (aux.Prioridade != 0)
                        {
                            do
                            {
                                if (pilhaOperadores.OlharTopo() != null)
                                {
                                    auxOp = (Operador)pilhaOperadores.Desempilhar();
                                }
                                else
                                {
                                    auxOp = null;
                                }

                                if (auxOp != null)
                                {
                                    saida.Inserir(auxOp);
                                }
                            } while (auxOp != null);

                            pilhaOperadores.Empilhar(aux);
                        }
                        else
                        {
                            do
                            {
                                auxOp = (Operador)pilhaOperadores.Desempilhar();

                                if (auxOp != null)
                                {
                                    saida.Inserir(auxOp);
                                }
                            } while (auxOp != null);
                        }
                        operador = false;
                        if (cont > 0)
                        {
                            PolonesInvertido(expressao.Substring(cont));
                        }
                        else
                        {
                            PolonesInvertido(expressao.Substring(cont + 1));
                        }
                        return;
                    }
                }

                if (number == true)
                {
                    string auxString = expressao.Substring(0, cont);
                    if (Valor.IsNumber(auxString))
                    {
                        saida.Inserir(new Valor(double.Parse(auxString)));
                        number = false;
                        PolonesInvertido(expressao.Substring(cont));
                        return;
                    }
                    else
                    {
                        erro   = true;
                        number = false;
                    }
                }
            }
            else
            {
                while (pilhaOperadores.OlharTopo() != null)
                {
                    saida.Inserir(pilhaOperadores.Desempilhar());
                }
            }
        }