none
CALCULADORA DE WINDOWS 10 EN WINDOWS FORMS RRS feed

  • Pregunta

  • Buenas tardes, estoy haciendo una calculadora.
    Pero tengo dudas con varias funciones de ella, como por ejemplo: % , 1/x , C y CE 

    %      No se como hacer su operación 
    1/x    Hasta ahora tengo entendido que calcula el recíproco pero no me siento seguro 
    C       Tengo entendido que borra todo y hasta el calculo 
    CE     Borra solo el número que por error ingrese y conservo las operaciones 
    +/-    Me divide entre el mismo número pero negativo

    Claro, aquí les muestro el código que llevo, espero que puedan ayudarme o asesorarme y hacerme ver que estoy haciendo mal y como puedo solucionarlo, gracias por su tiempo.

            private void btn1_Click(object sender, EventArgs e)
            {
                this.txtPantalla.Text = this.txtPantalla.Text + "1";
            }

            private void btn2_Click(object sender, EventArgs e)
            {
                this.txtPantalla.Text = this.txtPantalla.Text + "2";
            }

            private void btn3_Click(object sender, EventArgs e)
            {
                this.txtPantalla.Text = this.txtPantalla.Text + "3";
            }

            private void btn4_Click(object sender, EventArgs e)
            {
                this.txtPantalla.Text = this.txtPantalla.Text + "4";
            }

            private void btn5_Click(object sender, EventArgs e)
            {
                this.txtPantalla.Text = this.txtPantalla.Text + "5";
            }

            private void btn6_Click(object sender, EventArgs e)
            {
                this.txtPantalla.Text = this.txtPantalla.Text + "6";
            }

            private void btn7_Click(object sender, EventArgs e)
            {
                this.txtPantalla.Text = this.txtPantalla.Text + "7";
            }

            private void btn8_Click(object sender, EventArgs e)
            {
                this.txtPantalla.Text = this.txtPantalla.Text + "8";
            }

            private void btn9_Click(object sender, EventArgs e)
            {
                this.txtPantalla.Text = this.txtPantalla.Text + "9";
            }

            private void btn0_Click(object sender, EventArgs e)
            {
                this.txtPantalla.Text = this.txtPantalla.Text + "0";
            }

            private void btnpunto_Click(object sender, EventArgs e)
            {
                calc.asignaPantalla = this.txtPantalla.Text;
                if(calc.verificaPunto == false)
                {
                    this.txtPantalla.Text = this.txtPantalla.Text + ".";
                }
            }


            Calculadora calc = new Calculadora();

            private void btnIgual_Click(object sender, EventArgs e)
            {
                calc.asignaValor2 = Convert.ToDouble(this.txtPantalla.Text);
                this.txtPantalla.Text = calc.realizaOperacion.ToString();
            }

            private void btnSuma_Click(object sender, EventArgs e)
            {
                calc.asignaValor1 = Convert.ToDouble(this.txtPantalla.Text);
                calc.asignaOperador = "suma";
                this.txtPantalla.ResetText();
                
            }

            private void btnResta_Click(object sender, EventArgs e)
            {
                calc.asignaValor1 = Convert.ToDouble(this.txtPantalla.Text);
                calc.asignaOperador = "resta";
                this.txtPantalla.ResetText();
            }

            private void btnMul_Click(object sender, EventArgs e)
            {
                calc.asignaValor1 = Convert.ToDouble(this.txtPantalla.Text);
                calc.asignaOperador = "multiplicacion";
                this.txtPantalla.ResetText();
            }

            private void btnDiv_Click(object sender, EventArgs e)
            {
                calc.asignaValor1 = Convert.ToDouble(this.txtPantalla.Text);
                calc.asignaOperador = "division";
                this.txtPantalla.ResetText();
            }


            bool secuencia = true;
            string borrado;
            double num1, resultado;

            private void btnRetroceso_Click(object sender, EventArgs e)
            {
                int x = 0;
                borrado = txtPantalla.Text;
                x = borrado.Length - 1;
                borrado = borrado.Substring(0, x);
                txtPantalla.Text = borrado;

                if (txtPantalla.Text == "")
                {
                    txtPantalla.Text = "0";
                    secuencia = true;
                }
                if (txtPantalla.Text == "-")
                {
                    txtPantalla.Text = "0";
                    secuencia = true;
                }
            }

            private void btnCE_Click(object sender, EventArgs e)
            {
                 // Aun no tengo codigo para este boton 
            }

            private void btnC_Click(object sender, EventArgs e)
            {
                txtPantalla.Text = "0"; 
            }

            private void btn1x_Click(object sender, EventArgs e)
            {
                num1 = double.Parse(txtPantalla.Text);
                resultado = 1 / num1;
                if (num1 < 0)
                {
                    MessageBox.Show("Error!!! No es posible la división por cero");
                }
                else
                {
                    txtPantalla.Text = resultado.ToString();
                }
            }

            private void btnMasMenos_Click(object sender, EventArgs e)
            {
                double num1 = double.Parse(txtPantalla.Text);
                num1 *= -1;
                txtPantalla.Text = num1.ToString();
            }

            private void btnRaiz_Click(object sender, EventArgs e)
            {
                if (num1 < 0)
                {
                    MessageBox.Show("El número no puede ser negativo");
                }
                else
                    num1 = double.Parse(txtPantalla.Text);
                resultado = Math.Sqrt(num1);
                txtPantalla.Text = resultado.ToString();
            }

    viernes, 20 de octubre de 2017 19:13

Respuestas

  • Buenas,

    Tienes una clase calculadora en la que imagino que tienes las operaciones, podrias ponerla tambien por favor?

    por otro lado esto

    private void btn1x_Click(object sender, EventArgs e)
    {
        num1 = double.Parse(txtPantalla.Text);
        resultado = 1 / num1;
        if (num1 < 0)
        {
            MessageBox.Show("Error!!! No es posible la división por cero");
        }
        else
        {
            txtPantalla.Text = resultado.ToString();
        }
    }

    generara una excepcion, ya que estas intentando dividir entre cero antes del if,

    podrias hacerlo asi

    private void btn1x_Click(object sender, EventArgs e)
    {
        num1 = double.Parse(txtPantalla.Text);
        
        if (num1 == 0)
        {
            MessageBox.Show("Error!!! No es posible la división por cero");
        }
        else
        {
            resultado = 1 / num1;
            txtPantalla.Text = resultado.ToString();
        }
    }

    Quedo a la espera de el codigo de la clase calculadora

    Atte


    No olvides votar mi comentario si te ha ayudado y marcarlo como respuesta si ha sido la solución, con eso ayudas a mejorar mi reputación en la comunidad y a identificar la respuesta a la gente que tenga el mismo problema.

    Para obtener una respuesta lo más rápida y concisa posible, te recomiendo:

    • Marcado como respuesta ProgramadorAECF viernes, 20 de octubre de 2017 19:35
    viernes, 20 de octubre de 2017 19:30
  • Vale,

    Para el botón C:

    calc.AsignaValor1 = 0;
    calc.AsignaValor2 = 0;

    Para el CE, el cual solo borrara el numero en pantalla

    txtPantalla.Text = "";

    Para el porcentaje no tengo claro que es lo que quieres hacer

    el 1/x  ya lo hemos resuelto antes

    Para +/- entiendo que lo que se trata es de cambiar el signo al textbox

    para eso puedes hacer esto:

    //Comprueba si el primer caracter es '-'
    if(txtPantalla.Text.Substring(0,1) == "-")
    {
        //en caso de que sea, lo quitamos
        txtPantalla.Text = txtPantalla.Text.Substring(1, txtPantalla.Text.Length - 1);
    }
    else
    {
        //en caso de que no este, lo ponemos
        txtPantalla.Text = "-" + txtPantalla.Text;
    }

    Con esto, solo faltaría definir que quieres que haga %, si nos lo comentas, te pongo como hacer.

    Por otro lado, agradezco que hayas marcado mi respuesta, pero te recomendaría desmarcara hasta que hayamos conseguido resolver el problema del todo, te digo esto, porque muchas veces, si vemos que la pregunta ya tiene respuesta. Si quieres valorarme, puedes votar mi respuesta justo a la izquierda de ella, eso también ayuda a mejorar mi reputación, pero no marca el hilo como resuelto.

    Quedo a la espera de que nos comentes que quieres hacer en %

    Atte


    No olvides votar mi comentario si te ha ayudado y marcarlo como respuesta si ha sido la solución, con eso ayudas a mejorar mi reputación en la comunidad y a identificar la respuesta a la gente que tenga el mismo problema.

    Para obtener una respuesta lo más rápida y concisa posible, te recomiendo:

    • Marcado como respuesta ProgramadorAECF viernes, 20 de octubre de 2017 20:08
    viernes, 20 de octubre de 2017 19:57
  • Hola

    Dale formato de 2 decimales ya que por ejemplo si ingresas un valor 5000, al dividir entre 100 te dará sin decimales, entonces obliga a que siempre tenga dicho formato:

     num1 = double.Parse(txtPantalla.Text);
     double resultado = num1 / 100;
     txtPantalla.Text = resultado.ToString("N2");
    Saludos


    Brayan De la Cruz
    Lima - Perú

    • Marcado como respuesta ProgramadorAECF sábado, 21 de octubre de 2017 6:09
    sábado, 21 de octubre de 2017 5:27
  • Si, en efecto, como lo mencionas
    .ToString("N3") = .000
    
    //otra alternativa:
    .ToString("#.000") = .000;

    Saludos

    Brayan De la Cruz
    Lima - Perú

    • Propuesto como respuesta Jorge TurradoMVP sábado, 21 de octubre de 2017 7:52
    • Marcado como respuesta ProgramadorAECF sábado, 21 de octubre de 2017 15:50
    sábado, 21 de octubre de 2017 7:05

Todas las respuestas

  • Buenas,

    Tienes una clase calculadora en la que imagino que tienes las operaciones, podrias ponerla tambien por favor?

    por otro lado esto

    private void btn1x_Click(object sender, EventArgs e)
    {
        num1 = double.Parse(txtPantalla.Text);
        resultado = 1 / num1;
        if (num1 < 0)
        {
            MessageBox.Show("Error!!! No es posible la división por cero");
        }
        else
        {
            txtPantalla.Text = resultado.ToString();
        }
    }

    generara una excepcion, ya que estas intentando dividir entre cero antes del if,

    podrias hacerlo asi

    private void btn1x_Click(object sender, EventArgs e)
    {
        num1 = double.Parse(txtPantalla.Text);
        
        if (num1 == 0)
        {
            MessageBox.Show("Error!!! No es posible la división por cero");
        }
        else
        {
            resultado = 1 / num1;
            txtPantalla.Text = resultado.ToString();
        }
    }

    Quedo a la espera de el codigo de la clase calculadora

    Atte


    No olvides votar mi comentario si te ha ayudado y marcarlo como respuesta si ha sido la solución, con eso ayudas a mejorar mi reputación en la comunidad y a identificar la respuesta a la gente que tenga el mismo problema.

    Para obtener una respuesta lo más rápida y concisa posible, te recomiendo:

    • Marcado como respuesta ProgramadorAECF viernes, 20 de octubre de 2017 19:35
    viernes, 20 de octubre de 2017 19:30
  • Muchas gracias por tu tiempo, en verdad se agradece.
    Por otro lado, eso quiere decir que el código que estoy utlizando para 1/x es el correcto más las correcciones que me acabas de hacer?

    Esta es la clase que utilizo:

        class Calculadora
        {
            private double valor1;
            private double valor2;
            private double resultado;
            private string operador;
            private string pantalla;
            private bool colocarPunto;

            public double asignaValor1
            {
                set { valor1 = value; }
            }
            public double asignaValor2
            {
                set { valor2 = value; }
            }
            public string asignaOperador
            {
                set { operador = value; }
            }
            public double realizaOperacion
            {
                get
                {
                    switch(operador)
                    {
                        case "suma":
                            resultado = valor1 + valor2;
                            break;
                        case "resta":
                            resultado = valor1 - valor2;
                            break;
                        case "multiplicacion":
                            resultado = valor1 * valor2;
                            break;
                        case "division":
                            resultado = valor1 / valor2;
                            break;
                    }
                    
                    return resultado;
                }
            }
            public string asignaPantalla
            {
                set { pantalla = value; }
            }
            public bool verificaPunto
            {
                get
                {
                    if (pantalla.Contains('.') == true)
                    {
                        colocarPunto = true;
                    }
                    else
                    {
                        colocarPunto = false;
                    }
                    return colocarPunto;
                }
            }
                
        }
    viernes, 20 de octubre de 2017 19:35
  • Vale,

    Para el botón C:

    calc.AsignaValor1 = 0;
    calc.AsignaValor2 = 0;

    Para el CE, el cual solo borrara el numero en pantalla

    txtPantalla.Text = "";

    Para el porcentaje no tengo claro que es lo que quieres hacer

    el 1/x  ya lo hemos resuelto antes

    Para +/- entiendo que lo que se trata es de cambiar el signo al textbox

    para eso puedes hacer esto:

    //Comprueba si el primer caracter es '-'
    if(txtPantalla.Text.Substring(0,1) == "-")
    {
        //en caso de que sea, lo quitamos
        txtPantalla.Text = txtPantalla.Text.Substring(1, txtPantalla.Text.Length - 1);
    }
    else
    {
        //en caso de que no este, lo ponemos
        txtPantalla.Text = "-" + txtPantalla.Text;
    }

    Con esto, solo faltaría definir que quieres que haga %, si nos lo comentas, te pongo como hacer.

    Por otro lado, agradezco que hayas marcado mi respuesta, pero te recomendaría desmarcara hasta que hayamos conseguido resolver el problema del todo, te digo esto, porque muchas veces, si vemos que la pregunta ya tiene respuesta. Si quieres valorarme, puedes votar mi respuesta justo a la izquierda de ella, eso también ayuda a mejorar mi reputación, pero no marca el hilo como resuelto.

    Quedo a la espera de que nos comentes que quieres hacer en %

    Atte


    No olvides votar mi comentario si te ha ayudado y marcarlo como respuesta si ha sido la solución, con eso ayudas a mejorar mi reputación en la comunidad y a identificar la respuesta a la gente que tenga el mismo problema.

    Para obtener una respuesta lo más rápida y concisa posible, te recomiendo:

    • Marcado como respuesta ProgramadorAECF viernes, 20 de octubre de 2017 20:08
    viernes, 20 de octubre de 2017 19:57
  • Muchas gracias por tu tiempo y por las correciones que me has dado, me han ayudado mucho.
    En cuanto sepa con más detalle que tengo que hacer con el porcentaje, lo haré saber inmediatamente.
    De antemano muchas gracias.

    viernes, 20 de octubre de 2017 20:08
  • Bueno, primero que nada buenas noches y ya tengo la respuesta a la duda que surgió.
    Lo que pasa es que con el % tengo que dividir el resultado por 100, moviendo el punto decimal dos lugar hacia la izquierda, por ejemplo: 5916/100 = 59.16
    Realice este pequeño código y solo quiero cerciorarme de que sea correcto.

            private void btnPorcentaje_Click(object sender, EventArgs e)
            {
                num1 = double.Parse(txtPantalla.Text);
                resultado = num1 / 100;
                txtPantalla.Text = resultado.ToString();
            }
    
    

    Gracias por su tiempo.

    sábado, 21 de octubre de 2017 4:45
  • Hola

    Dale formato de 2 decimales ya que por ejemplo si ingresas un valor 5000, al dividir entre 100 te dará sin decimales, entonces obliga a que siempre tenga dicho formato:

     num1 = double.Parse(txtPantalla.Text);
     double resultado = num1 / 100;
     txtPantalla.Text = resultado.ToString("N2");
    Saludos


    Brayan De la Cruz
    Lima - Perú

    • Marcado como respuesta ProgramadorAECF sábado, 21 de octubre de 2017 6:09
    sábado, 21 de octubre de 2017 5:27
  • OH!!! 
    Entonces, si yo inserto N2 al momento de convertir a string puedo darle un formato para que siempre me tome 2 decimales, por lo cual supongo que también se puede con N3, N4, etc. etc. según como yo lo requiera?
    De antamano muchas gracias por la respuesta, se agradece.
    sábado, 21 de octubre de 2017 6:08
  • Si, en efecto, como lo mencionas
    .ToString("N3") = .000
    
    //otra alternativa:
    .ToString("#.000") = .000;

    Saludos

    Brayan De la Cruz
    Lima - Perú

    • Propuesto como respuesta Jorge TurradoMVP sábado, 21 de octubre de 2017 7:52
    • Marcado como respuesta ProgramadorAECF sábado, 21 de octubre de 2017 15:50
    sábado, 21 de octubre de 2017 7:05
  • Muchas gracias por este aprendizaje.
    sábado, 21 de octubre de 2017 15:50