Resolver ecuaciones de segundo grado.

6. March 2008 02:02 by Oscar.SS in Desarrollo Windows  //  Tags:   //   Comments (0)

Esta pequeña aplicación de consola puede resultarle útil a alguien. Bien porque estudie matemáticas, o como parte de una calculadora casera, o por…¡que se yo!. El caso es que resuelve ecuaciones de segundo grado.

El proyecto costa de dos clases separadas en dos archivos, uno “Program.cs” que es el principal de la aplicación, el que contiene el método Main(). Y otra clase en un archivo “ECgrado2.cs”.

Este es el código de la clase ECgrado2:

 

class ECgrado2 //Definición de la clase que realiza los calculos de la ecuación
{
    
private double A, B, C;

    
//Definición de un constructor de clase que recibe como parámetros los valores
    //introcucidos por pantalla (coeficientes de la ecuación)
    
public ECgrado2(double a, double b, double c)
    {
        A 
a;
        
b;
        
c;
    
}

    
public double masSqrt() //Método que resuelve la raiz positiba
    
{
        
double result ((-B + System.Math.Sqrt(B * B - * A * C)) / (* A));
        return 
result;
    
}

    
public double menosSqrt() //Método que resuelve la raiz negativa
    
{
        
double result ((-B - System.Math.Sqrt(B * B - * A * C)) / (* A));
        return 
result;
    
}
}
Y este es el código, sensible de ser mejorado, del cuerpo principal del programa:

class Program
    {
        
static void Main(string[] args)
        {
            
//Inicialización de las variables que contienen los valores (coeficientes)
            //introducidos por pantalla
            
double coefA 0, coefB 0, coefC 0;

            
/*Comienzo de la repetición del cuerpo pricipal del programa. Este bucle 
             *se repite cuando al final del programa, despúes de realizar y mostrar
             *todos los calculos, se le pregunta al usuario si quiere seguir calculando
             */
            
bool control = true;
            while 
(control == true)
            {
                Console.Clear()
;
                
Console.WriteLine("Resolver ecuaciones de segundo grado.");
                
Console.WriteLine("Ecuaciones del tipo: Ax^2 + Bx + C = 0");

                
/*En primer lugar se comprueba (bloque try{}) que los valores de los 
                 * coeficientes sean del tipo correcto. En el caso que no lo sean, se
                 * captura la excepción producida (bloque catch{}) y se repite todo
                 * el bloque try/catch hasta que los datos introducidos por el usuario
                 * sean del formato correcto
                 */
                
bool repTryCatch = true;
                while 
(repTryCatch == true)
                {
                    
try
                    
{
                        Console.WriteLine(
"\nIntroducir coeficiente A:");
                        
coefA Double.Parse(Console.ReadLine());

                        
Console.WriteLine("\nIntroducir coeficiente B:");
                        
coefB Double.Parse(Console.ReadLine());

                        
Console.WriteLine("\nIntroducir coeficiente C:");
                        
coefC Double.Parse(Console.ReadLine());

                        
repTryCatch = false;
                    
}
                    
catch (FormatException)
                    {
                        Console.Clear()
;
                        
Console.WriteLine("¡ERROR!. Introducir solo valores numéricos.");
                        
repTryCatch = true;
                    
}
                }

                
//Valores internos de la raiz cuadrada
                
double Bcuadrado coefB * coefB;
                double 
cuatroAC * coefA * coefC;
                
//Comprobación de que las operaciones con los valores internos de la raiz
                //no dan un resultado negativo. No existe la raiz de un número negativo
                
if (Bcuadrado < cuatroAC && coefA > && coefC > 0)    
                {
                    Console.Clear()
;
                    
Console.WriteLine("La ecuación no tiene solución." 
                        
"\nSe ha intentado la raiz de un valor negativo.");
                
}
                
else
                
{
                    
//Llamada al constructor de la clase ECgrado2
                    
ECgrado2 ecuacion = new ECgrado2(coefA, coefB, coefC);
                    
//Llamada a los métodos de calculo de clase ECgrado2
                    
Console.WriteLine("\nValor 1 = {0}",
                        ecuacion.masSqrt().ToString())
;
                    
Console.WriteLine("Valor 2 = {0}",
                        ecuacion.menosSqrt().ToString())
;
                
}

                Console.WriteLine(
"\n¿Desea seguir calculando? (y/n)");

                
//Este último bloque se repite siempre que el usuario no introduzca el
                //formato correcto (y/n) para la pregunta anterior
                
bool repSwitch = true;
                while 
(repSwitch == true)
                {
                    
string SioNO Console.ReadLine();
                    switch 
(SioNO)
                    {
                        
case "y"case "Y":
                            control 
= true; //Repite el bloque principal del programa
                            
repSwitch = false;
                            break;
                        case 
"n"case "N":
                            control 
= false; //Termina el bucle principal del programa
                            
repSwitch = false;
                            break;
                        default
:
                            Console.WriteLine(
                                
"\nLa entrada no es correcta. Pulse \"y\" o \"n\".");
                            
repSwitch = true;
                            break;
                    
}
                }
            }
        }
    }

A continuación dejo algunas salidas por pantalla.


Recent Comments

Comment RSS

Month List