import math

def resoudreDegre1(a, b):
    """  Résout l'équation linéaire a*x+b=0 dans R
 
     :param a: coefficient de x
     :param b: coefficient constant
     :return: le tuple (nombre de solutions,solution)
    """
    n = None
    x = None
    if a != 0.0:
        n = 1
        x = -b / a
    elif b != 0.0:
        n = 0
    else:
        n = -1
    return (n, x)


def resoudreDegre2(a, b, c):
    """  Résout l'equation quadratique a*x^2+b*x+c=0 dans R (a non nul)
 
     :param a: coefficient de x^2
     :param b: coefficient de x
     :param c: coefficient constant
     :return: le tuple (nombre de solutions,première solution,deuxième solution)
    """
    n = None
    x1 = None
    x2 = None
    delta = b * b - 4 * a * c
    if delta > 0.0:
        n = 2
        x1 = (-b + math.sqrt(delta)) / (2 * a)
        x2 = (-b - math.sqrt(delta)) / (2 * a)
    elif delta < 0.0:
        n = 0
    else:
        n = 1
        x1 = (-b) / (2 * a)
    return (n, x1, x2)


def resoudre(a, b, c):
    """  Résout l'équation quadratique a*x^2+b*x+c=0 dans R
 
     :param a: coefficient de x^2
     :param b: coefficient de x
     :param c: coefficient constant
     :return: le tuple (nombre de solutions,première solution,deuxième solution)
    """
    n = None
    x1 = None
    x2 = None
    if a != 0.0:
        n, x1, x2 = resoudreDegre2(a, b, c)
    else:
        n, x1 = resoudreDegre1(b, c)
    return (n, x1, x2)


def afficherSolutions(n, x1, x2):
    """  Affiche les solutions de l'équation quadratique dans R
 
     :param n: nombre de solutions
     :param x1: première solution
     :param x2: deuxième solution
    """
    if n == 2:
        print("==> Deux racines: ", x1, " et ", x2, sep="")
    elif n == 1:
        print("==> Une racine: ", x1, sep="")
    elif n == 0:
        print("==> Aucune solution dans R")
    elif n == -1:
        print("==> L'ensemble R")


def test_quadratik1():
    """ @test """
    print("Coefficients a b c de l'equation? ", sep="", end="")
    a = float(input())
    b = float(input())
    c = float(input())
    ns, x1, x2 = resoudre(a, b, c)
    afficherSolutions(ns, x1, x2)


def resoudreDegre2C(a, b, c):
    """  Résout l'équation quadratique a*x^2+b*x+c=0 dans C
 
     :param a: coefficient de x^2
     :param b: coefficient de x
     :param c: coefficient constant
     :return: le tuple (nombre de solutions,partie réelle,partie imaginaire)
    """
    n = None
    x1 = None
    x2 = None
    n, x1, x2 = resoudreDegre2(a, b, c)
    if n == 0:
        delta = b * b - 4 * a * c
        n = -2
        x1 = (-b) / (2 * a)
        x2 = math.sqrt(-delta) / (2 * a)
    return (n, x1, x2)


def resoudreC(a, b, c):
    """  Résout l'équation quadratique a*x^2+b*x+c=0 dans C
 
     :param a: coefficient de x^2
     :param b: coefficient de x
     :param c: coefficient constant
     :return: le tuple (nb solutions,1ère sol/partie réelle,2ième sol/partie imaginaire)
    """
    n = None
    x1 = None
    x2 = None
    if a != 0.0:
        n, x1, x2 = resoudreDegre2C(a, b, c)
    else:
        n, x1 = resoudreDegre1(b, c)
    return (n, x1, x2)


def afficherSolutionsC(n, x1, x2):
    """  Affiche les solutions de l'équation quadratique dans C
 
     :param n: nombre de solutions
     :param x1: première solution ou partie réelle
     :param x2: deuxième solution ou partie imaginaire
    """
    if n == -2:
        print("==> Deux racines sur C: ", x1, "-", x2, "i et ", x1, "+", x2, "i", sep="")
    else:
        afficherSolutions(n, x1, x2)


def test_quadratik2():
    """ @test """
    print("Coefficients a b c de l'equation? ", sep="", end="")
    a = float(input())
    b = float(input())
    c = float(input())
    ns, x1, x2 = resoudreC(a, b, c)
    afficherSolutionsC(ns, x1, x2)


def PGQuadratik():
    test_quadratik1()
    test_quadratik2()

PGQuadratik()