/////////////////////////////////////////////
//
//PRACTICA 1: Ejemplo 3
//Resolucion de una ecuacion de 2o. grado
//
/////////////////////////////////////////////

#include <iostream>
#include <stdlib.h>

using namespace std;

int main ()
{
    float a, b, c; //coeficientes
    float discr; //discriminante
    float x1, x2; //soluciones
    int tipo; //tipo de solucion, 1..4
    
    //ENTRADA
    cout << "Resolucion de una ecuacion de 2o. grado" << endl;
    cout << "en la forma A.x2 + B.x + C = 0" << endl;
    cout << "Introducir a continuacion el valor de los coeficientes A, B, C." << endl;
    cout << "Coef. A: ";
    cin >> a;
    cout << "Coef. B: ";
    cin >> b;
    cout << "Coef. C: ";
    cin >> c;
    
    //CALCULO DE SOLUCIONES
    if ((a == 0) && (b == 0))
        tipo = 1;
    else
        if (a == 0)
        {
                x1 = -c / b;
                tipo = 2;
        }
        else
        {
                discr = b*b - 4*a*c;
                if (discr < 0)
                                tipo = 3;
                else
                {
                                x1 = -b + sqrt (discr) / (2*a);
                                x2 = -b - sqrt (discr) / (2*a);
                                tipo = 4;
                }
        }
        
    //SALIDA DE RESULTADOS EN FUNCION DEL TIPO DE ECUACION        
    if (tipo == 1) //No es ecuacion
        cout << "Error en los coeficientes." << endl;
    else
        if (tipo == 2) //Ecuacion de 1er. grado
                cout << "Solucion x = " << x1 << endl;
        else
                if (tipo == 3) //Soluciones complejas
                                cout << "Las soluciones a la ecuacion son numeros complejos." << endl;                
                else //Soluciones reales
                {
                                cout << "Las soluciones a la ecuacion son:" << endl;
                                cout << "x1 = " << x1 << endl;
                                cout << "x2 = " << x2 << endl;
                }
                
    system ("PAUSE");
    return 0;
}
