import math

print(math.pi / 4)


# Serie de Leibniz usando FOR
r = 0
s = 1

for i in range(1,1200000,2):
	r += 1.0 / (i * s)
	s *= -1
print(r)




# Serie de Leibniz usando WHILE
r = 0
s = 1
i = 1

while i < 1200000:
	r += 1.0 / (i * s)
	s *= -1
	i += 2
print(r)



# Definicion de la funcion de la serie de Leibniz indicando el numero maximo de iteraciones y tolerancia minima
def LeibnizFor(maxIter, tol):
	r = 0
	s = 1
	Valor = math.pi / 4
	# con For
	for i in range(1,maxIter,2):
		r += 1.0 / (i * s)
		s *= -1
		if math.fabs(r - Valor) < tol:
			break
	return r


# Definicion de la funcion de la serie de Leibniz indicando el numero maximo de iteraciones y tolerancia minima
def LeibnizWhile(maxIter, tol):
	r = 0
	s = 1
	Valor = math.pi / 4
	# con While
	i = 1
	while i < maxIter:
		r += 1.0 / (i * s)
		s *= -1
		i += 2
		if math.fabs(r - Valor) < tol:
			break
	return r
	
# llamado de la funcion
print (LeibnizFor(1200000, 1e-4))
print (LeibnizWhile(1200000, 1e-4))
