import math

# --------------------------------------------------------------------------------------
# ENTRADA
xi = float(input('Ingrese el valor del punto xi (límite inferior): '))
xs = float(input('Ingrese el valor del punto xs (límite superior): '))
es = float(input('Ingrese el error estimado: '))
# --------------------------------------------------------------------------------------

# --------------------------------------------------------------------------------------
# PROCESO
# --------------------------------------------------------------------------------------
def funcion(x):
    return math.exp(x) - 3 * x

if funcion(xi) * funcion(xs) > 0:
    print('Elegir otro intervalo, no contiene una raíz o contiene un número par de raíces')
else:
    print('El intervalo [' + str(xi) + ', ' + str(xs) + '] contiene por lo menos una raíz')

    ea = 1
    i = 0  
    xr = xi  
    while ea > es:
        xr_prev = xr  
        xr = (xi + xs) / 2  

        if funcion(xr) == 0:                 # Si xr es la raíz exacta
            break
        elif funcion(xi) * funcion(xr) < 0:  # La raíz está en el intervalo [xi, xr]
            xs = xr
        else:                                # La raíz está en el intervalo [xr, xs]
            xi = xr

        # Calcular el error aproximado relativo si no es la primera iteración
        if i > 0:
            ea = abs((xr - xr_prev) / xr) * 100

        i += 1  
# --------------------------------------------------------------------------------------

# --------------------------------------------------------------------------------------
# SALIDA
    print('xr: ', xr)
    print('Error aproximado: ', ea)
    print('Número de iteraciones: ', i)
# --------------------------------------------------------------------------------------