Foros del Web » Programación para mayores de 30 ;) » .NET »

[C#] Algunas preguntas sobre el lenguaje

Estas en el tema de [C#] Algunas preguntas sobre el lenguaje en el foro de .NET en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 16/04/2006, 02:15
 
Fecha de Ingreso: marzo-2006
Mensajes: 41
Antigüedad: 18 años, 1 mes
Puntos: 0
[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?)?
  #2 (permalink)  
Antiguo 16/04/2006, 08:59
Avatar de metalkr  
Fecha de Ingreso: julio-2005
Mensajes: 17
Antigüedad: 18 años, 9 meses
Puntos: 0
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.
  #3 (permalink)  
Antiguo 16/04/2006, 10:09
 
Fecha de Ingreso: marzo-2006
Mensajes: 41
Antigüedad: 18 años, 1 mes
Puntos: 0
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.
  #4 (permalink)  
Antiguo 17/04/2006, 09:12
Avatar de metalkr  
Fecha de Ingreso: julio-2005
Mensajes: 17
Antigüedad: 18 años, 9 meses
Puntos: 0
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
  #5 (permalink)  
Antiguo 17/04/2006, 15:25
 
Fecha de Ingreso: marzo-2006
Mensajes: 41
Antigüedad: 18 años, 1 mes
Puntos: 0
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.
  #6 (permalink)  
Antiguo 18/04/2006, 22:05
Avatar de metalkr  
Fecha de Ingreso: julio-2005
Mensajes: 17
Antigüedad: 18 años, 9 meses
Puntos: 0
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
  #7 (permalink)  
Antiguo 26/04/2006, 14:22
 
Fecha de Ingreso: abril-2006
Ubicación: Acapulco Gro. México
Mensajes: 483
Antigüedad: 18 años
Puntos: 2
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.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:29.