def serie1_1(x,epsilon):

    # els dos primers termes
    term_ant = 1
    term_act = x
    # sumem el primer, el segon depèn de si és "diferent"
    suma = 1
    n = 1
    while abs(term_ant-term_act)>=epsilon:
        suma = suma + term_act
        term_ant = term_act
        n = n + 1
        term_act = x**n
    return suma

def serie1_2(x,epsilon):
    term_ant = 1
    term_act = x
    suma = 1
    while abs(term_ant-term_act)>=epsilon:
        suma = suma + term_act
        term_ant = term_act
        # càlcul del terme actual en funció de l'anterior: estalvia càlculs
        term_act = term_ant* x
    return suma

# tria l'opció que vulguis
serie1 = serie1_1
#serie1 = serie1_2


def serie2_1(x,epsilon):
    # els dos primers termes
    term_ant = x
    term_act = -x**3/3
    # sumem el primer, el segon depèn de si és "diferent"
    suma = x
    n = 1
    while abs(term_ant-term_act)>=epsilon:
        suma = suma + term_act
        term_ant = term_act
        n = n + 1
        term_act = x**(2*n+1)/(2*n+1)
        term_act = term_act*(-1)**n
    return suma
    
def serie2_2(x,epsilon):
    term_ant = x
    num_act = -x**3
    den_act = 3
    term_act = num_act / den_act
    suma = x
    while abs(term_ant-term_act)>=epsilon:
        suma = suma + term_act
        term_ant = term_act
        # càlcul del terme actual en funció de l'anterior: estalvia càlculs
        num_act = - num_act*x**2
        den_act = den_act + 2
        term_act = num_act / den_act
    return suma
    
# tria l'opció que vulguis
serie2 = serie2_1
#serie2 = serie2_2

