Uso de raiz cuadrada en C#

Iniciado por Riudo, 28 Febrero 2011, 03:04 AM

0 Miembros y 1 Visitante están viendo este tema.

Riudo

Hol amigos, estoy haciendo un proyecto de la uni, debo hacer una calculadora sencilla en c#, debe restar, sumar, mult, div, sacar potencias y raiz cuadrada ya tengo casi todas las clases sin embargo tengo problemas con la raiz cuadrada, no se si estoy usando mal la clase pero no logro correrla me da error, pero no tengo idea de que debo corregir a ver si me ayudan, En la linea del evento  butRaiz_Click, arroja el error: La cadena de entrada no tiene el formato correcto. aca esta el codigo:


Código (csharp) [Seleccionar]
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace Proyectogestor
{
   public partial class Form1 : Form
   {

       //Variables globales...

       float num1;
       string op;
 


       public Form1()
       {
           InitializeComponent();
       }
       

       //Boton igual...

       private void butIgual_Click(object sender, EventArgs e)
       {
           float num2;
           

           try
           {
               num2 = float.Parse(textVisor.Text);

               switch (op)
               {
                   case "sumar":
                       textVisor.Text = "" + suma(num1, num2);
                       break;

                   case "restar":
                       textVisor.Text = "" + resta(num1, num2);
                       break;

                   case "multiplicar":
                       textVisor.Text = "" + multi(num1, num2);
                       break;

                   case "dividir":
                       textVisor.Text = "" + divi(num1, num2);
                       break;

                   case "potenciar":
                       textVisor.Text = "" + Math.Pow(num1,num2);
                       break;

                   case "raiz":
                       textVisor.Text = "" + Math.Sqrt(num1);
                        break;


               }  
           }
           catch (Exception aviso)
           {
               MessageBox.Show(aviso.Message, "Advertencia", MessageBoxButtons.OK, MessageBoxIcon.Information);
               throw;
           }

       }


       //Metodos de las operaciones...

       public float suma(float num3, float num4)
       {
           try
           {
               return (num3 + num4);
           }
           
           catch (Exception ex1)
           {
               MessageBox.Show(ex1.Message, "Advertencia", MessageBoxButtons.OK, MessageBoxIcon.Information);
               throw;
           }
           
       }
       public float resta(float num3, float num4)
       {
           try
           {
               return (num3 - num4);
           }
           
           catch (Exception ex1)
           {
               MessageBox.Show(ex1.Message, "Advertencia", MessageBoxButtons.OK, MessageBoxIcon.Information);
               throw;
           }
           
       }
       public float multi(float num3, float num4)
       {
           try
           {
               return (num3 * num4);
           }
           
           catch (Exception ex1)
           {
               MessageBox.Show(ex1.Message, "Advertencia", MessageBoxButtons.OK, MessageBoxIcon.Information);
               throw;
           }
           
       }
       public float divi(float num3, float num4)
       {
           try
           {
               return (num3 / num4);
           }
           
           catch (Exception ex1)
           {
               MessageBox.Show(ex1.Message, "Advertencia", MessageBoxButtons.OK, MessageBoxIcon.Information);
               throw;
           }
       }

       
       //Numeros...

       private void but0_Click(object sender, EventArgs e)
       {
           textVisor.Text = textVisor.Text + "0";
       }

       private void butComa_Click(object sender, EventArgs e)
       {
           textVisor.Text = textVisor.Text + ",";
           butComa.Enabled = false;
       }

       private void but1_Click(object sender, EventArgs e)
       {
           textVisor.Text = textVisor.Text + "1";
       }

       private void but2_Click(object sender, EventArgs e)
       {
           textVisor.Text = textVisor.Text + "2";
       }

       private void but3_Click(object sender, EventArgs e)
       {
           textVisor.Text = textVisor.Text + "3";
       }

       private void but4_Click(object sender, EventArgs e)
       {
           textVisor.Text = textVisor.Text + "4";
       }

       private void but5_Click(object sender, EventArgs e)
       {
           textVisor.Text = textVisor.Text + "5";
       }

       private void but6_Click(object sender, EventArgs e)
       {
           textVisor.Text = textVisor.Text + "6";
       }

       private void but7_Click(object sender, EventArgs e)
       {
           textVisor.Text = textVisor.Text + "7";
       }

       private void but8_Click(object sender, EventArgs e)
       {
           textVisor.Text = textVisor.Text + "8";
       }

       private void but9_Click(object sender, EventArgs e)
       {
           textVisor.Text = textVisor.Text + "9";
       }


       //Botones adicionales...

       private void butSalir_Click(object sender, EventArgs e)
       {
           Close();
       }

       private void butLimpiar_Click(object sender, EventArgs e)
       {
           textVisor.Text = "";
       }


       //Botones de operaciones...

       private void butMas_Click(object sender, EventArgs e)
       {
           butComa.Enabled = true;

           try
           {
               num1 = float.Parse(textVisor.Text);
           }
           catch (Exception aviso)
           {
               MessageBox.Show(aviso.Message, "Advertencia", MessageBoxButtons.OK, MessageBoxIcon.Information);
               throw;
           }
           textVisor.Text = "";
           op = "sumar";
       }

       private void butMenos_Click(object sender, EventArgs e)
       {
           butComa.Enabled = true;

           try
           {
               num1 = float.Parse(textVisor.Text);
           }
           catch (Exception aviso)
           {
               MessageBox.Show(aviso.Message, "Advertencia", MessageBoxButtons.OK, MessageBoxIcon.Information);
               throw;
           }
           textVisor.Text = "";
           op = "restar";
       }

       private void butPor_Click(object sender, EventArgs e)
       {
           butComa.Enabled = true;

           try
           {
               num1 = float.Parse(textVisor.Text);
           }
           catch (Exception aviso)
           {
               MessageBox.Show(aviso.Message, "Advertencia", MessageBoxButtons.OK, MessageBoxIcon.Information);
               throw;
           }
           textVisor.Text = "";
           op = "multiplicar";
       }

       private void butDivis_Click(object sender, EventArgs e)
       {
           butComa.Enabled = true;

           try
           {
               num1 = float.Parse(textVisor.Text);
           }
           catch (Exception aviso)
           {
               MessageBox.Show(aviso.Message, "Advertencia", MessageBoxButtons.OK, MessageBoxIcon.Information);
               throw;
           }
           textVisor.Text = "";
           op = "dividir";
       }

       private void butPot_Click(object sender, EventArgs e)
       {
           butComa.Enabled = true;

           try
           {
               num1 = float.Parse(textVisor.Text);
           }
           catch (Exception aviso)
           {
               MessageBox.Show(aviso.Message, "Advertencia", MessageBoxButtons.OK, MessageBoxIcon.Information);
               throw;
           }
           textVisor.Text = "";
           op = "potenciar";
       }

       private void butRaiz_Click(object sender, EventArgs e)
       {
           butComa.Enabled = true;

           try
           {
               num1 = float.Parse(textVisor.Text);
           }
           catch (Exception aviso)
           {
               MessageBox.Show(aviso.Message, "Advertencia", MessageBoxButtons.OK, MessageBoxIcon.Information);
               throw;  
           }
           textVisor.Text = "";
           op = "raiz";
       }


       private void Form1_Load(object sender, EventArgs e)
       {

       }


   }
}

Sauruxum

Ves la parte del codigo:

case "raiz":
                        textVisor.Text = "" + Math.Sqrt(num1);
                         break;


Estas concadenando un string con un float ( o double? )
Tienes que convertir ese Math.Sqrt(num1) a un String, esto creo que se hace llamando el metodo toString() asi:

Math.Sqrt(num1).toString()

Prueba con todo y avisas como te fue.

Saludos

Riudo

No me funciono del todo, sin embargo al final le quite la propiedad "textVisor.text" al evento clic que tiene que ver con ese boton. Sin embargo tengo otra duda, el ejercicio se ha complicado mas xq ahora resulta que debe llevar clases, polimorfismo y herencia.

¿Como puedo hacer esto?, la verdad no tengo mucha experiencia programando, sin embargo se me ocurre que puedo hacer la potenciacion y la raiz cuadrada usando clases, y de alli mismo puedo hacr herencia y polimorfismo. ¿Es asi?

Edu

#3
Estas seguro q da error ahi donde dices? yo te digo por las dudas q probes hacer estos cambios:
Código (csharp) [Seleccionar]

textVisor.Text = "" + suma(num1, num2);

Por esto:
Código (csharp) [Seleccionar]

textVisor.Text = suma(num1, num2).ToString();


Ya q lo de "" + esta de mas porq se modifica todo el text asique no tienes q borrar nada, y luego tienes q poner un string por eso la conversion q de seguro se te olvido. Asi haces con todos, resta, muli, y en raiz lo mismo.
Despues cambiaria esto:
Código (csharp) [Seleccionar]

textVisor.Text = textVisor.Text + "8";

Por esto:
Código (csharp) [Seleccionar]

textVisor.Text += "8";

Y con eso queda muy bueno el codigo

Edit: me fui a comer y ya te habian contestado, primero trata de q te ande este codigo desp haces lo de herencia y polimorfismo

Riudo

Ahora si me corrio  ;D nada mas me falta lo demas

Riudo

Como puedo hcer la parte de la herencia,clases y polimorfismo. Aunq de por si ya estoy usando una clase principal...

[D4N93R]

Hola,

Puedes tener una clase para cada operación, y que cada clase implemente una interfaz o que implementen una clase base. Ambas soluciones son correctas, pero todo depende del alcance que le quieras dar.

INFO:

MSDN:
  - Herencia: http://msdn.microsoft.com/es-es/library/ms173149(v=VS.80).aspx
       - Interfaces: http://msdn.microsoft.com/es-es/library/ms173156(v=VS.80).aspx
       - Polimorfismo: http://msdn.microsoft.com/es-es/library/ms173152(v=VS.80).aspx
       - Clases: http://msdn.microsoft.com/es-es/library/ms173150(v=VS.80).aspx
  - Modificadores de acceso: http://msdn.microsoft.com/es-es/library/ms173121(v=VS.80).aspx

EL GUILLE:
   - http://www.elguille.info/NET/cursoCSharpErik/Entrega1/Entrega1.htm
   - http://www.elguille.info/NET/cursoCSharpErik/Entrega13/Entrega13.htm

Un saludo!