Retroceder   Foros del Web > Programación para sitios web > .NET > win forms

Respuesta
 
Herramientas Desplegado
Antiguo 16-abr-2006, 02:15   #1 (permalink)
CID@Devs ha deshabilitado el karma
 
Fecha de Ingreso: marzo-2006
Ubicación: Santa Fe, Argentina
Mensajes: 34
[C#] Algunas preguntas sobre el lenguaje

Tomando en cuenta éste ejemplo:

Código:
void Button1Click(object sender, System.EventArgs e)
{
	double a, b, c, x1, x2;
	a = Convert.ToDouble(textBox1.Text);
	b = Convert.ToDouble(textBox2.Text);
	c = Convert.ToDouble(textBox3.Text);
	x1 = (-b + Math.Sqrt(Math.Pow(b,2)-4*a*c))/(2*a);
	x2 = (-b - Math.Sqrt(Math.Pow(b,2)-4*a*c))/(2*a);
	MessageBox.Show("x1 = " + x1.ToString() + "\nx2 = " + x2.ToString(), "Resultados");
}
1) No existe el namespace System.Math? Tengo que usar Math.Sqrt(...), de que manera puedo escribir solo Sqrt(...) ??

2) Si se intenta convertir a = Convert.ToDouble(textBox1.Text); pero textBox1.Text contiene un caracter no numerico, no se dispara una excepcion, simplemente se cierra el programa. Como se suele actuar en tal caso?

3) Además cuando se divide sobre cero, o se calcula la raiz cuadrada de un numero negativo (por poner unos casos), y el resultado de tal expresion se almacena en una variable que posteriormente imprimo en pantalla, se almacena el error en la variable, en lugar de disparar una excepcion. Como se captura la excepción (try la captura?)?
CID@Devs está desconectado   Responder Citando
Antiguo 16-abr-2006, 08:59   #2 (permalink)
metalkr ha deshabilitado el karma
 
Avatar de metalkr
 
Fecha de Ingreso: julio-2005
Mensajes: 17
1.- System.Math no es un cualificador de espacio de nombre, Math es una clase con métodos estatáticos contenida en el espacio de nombre System.
Sólo la puedes utilizar usando toda la ruta(System.Math.Sqrt...) o importando (using System;...Math.Sqrt)

2.- Pues en este caso, no es necesario crear un bloque try-catch, ya que puedo validar en el textbox mediante su evento keypress, que se introduzcan sólo números, incluso números decimales.

3.- a la hora de la operación, encierrala en un bloque try cath y maneja el error: alguna manera de indicar que la operación no puede realizarse.
metalkr está desconectado   Responder Citando
Antiguo 16-abr-2006, 10:09   #3 (permalink)
CID@Devs ha deshabilitado el karma
 
Fecha de Ingreso: marzo-2006
Ubicación: Santa Fe, Argentina
Mensajes: 34
1) Entendido.
2) Y si fuera en consola?
3) Entonces try la captura. Preguntaba porque no se detenia la ejecución, simplemente se asignaba a la variable el valor NaN o Infinito.
CID@Devs está desconectado   Responder Citando
Antiguo 17-abr-2006, 09:12   #4 (permalink)
metalkr ha deshabilitado el karma
 
Avatar de metalkr
 
Fecha de Ingreso: julio-2005
Mensajes: 17
2.- Se me ocurre dos formas
* Encerrar el cast en un bloque try catch, en caso de error, mandar que no es un numero lo que se introdujo
* Examinar con el método de la clase Char, IsNUmber(), cada uno de las posiciones de lo introducido.
3.-. Ese cierto!!! Te recomiendo validar tu resultado antes de realizar la operacion.Aunque me parecio ver alguna vez que se lanzaba una exepcion de ese tipo
metalkr está desconectado   Responder Citando
Antiguo 17-abr-2006, 15:25   #5 (permalink)
CID@Devs ha deshabilitado el karma
 
Fecha de Ingreso: marzo-2006
Ubicación: Santa Fe, Argentina
Mensajes: 34
Toda la vida validé con las excepciones (no la validacion de rangos de datos claro), si se producia alguna excepcion se le informaba al usuario el error.
Tu forma es la "purista" (no me lo tomes a mal, por las dudas). Cuando tengo que programar rapido uso el bloque try, asi que la pregunta cambia ahora...
Según tu punto de vista, porque preferis el "metodo purista" (caracter a caracter) al de validar por error?

PD: Voy a probar si puedo capturar la exepcion del NaN y del Infinito.
CID@Devs está desconectado   Responder Citando
Antiguo 18-abr-2006, 22:05   #6 (permalink)
metalkr ha deshabilitado el karma
 
Avatar de metalkr
 
Fecha de Ingreso: julio-2005
Mensajes: 17
La 2da forma no es la más óptima para el performance del programa, pero a veces tienes que decidir si kieres mas performance o mayor precision (refiriendose a lo "purista"). OK. Busca en system.math
metalkr está desconectado   Responder Citando
Antiguo 26-abr-2006, 14:22   #7 (permalink)
Nivel7 no se puede cailificar en este momento
 
Fecha de Ingreso: abril-2006
Ubicación: Acapulco Gro. México
Mensajes: 483
en el caso de convercion prueba con Double.Parse(textBox1.Text);
en el caso de asignacion de null, puedes usar variables nullables si es que usas, C# 2.0.

double? x1, x2;
o
Nullable<double> x1, x2;

prueba checked() y uncheked(), uno de ellos activa una escepcion encaso de divicion por 0 y desbordamineto.
Nivel7 está desconectado   Responder Citando
Respuesta
No hay votos aún.


Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder temas
No puedes subir archivos adjuntos
No puedes editar tus mensajes

BB code is Activado
Caritas están Activado
[IMG] está Activado
Código HTML está Desactivado


La Zona horaria es GMT -6. Ahora son las 01:07.


Message Board Statistics

LinkBacks Enabled by vBSEO 3.1.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93