Skip to content

Instantly share code, notes, and snippets.

@neiesc
Last active September 25, 2015 05:08
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save neiesc/868394 to your computer and use it in GitHub Desktop.
Save neiesc/868394 to your computer and use it in GitHub Desktop.
Função quadrática (Quadratic function)
#! /usr/bin/env python3
# -*- coding: utf-8 -*-
from math import sqrt
def funcao_quadratica(a, b, c):
""" Resolve a equação do 2° grau com numeros complexos e reais.
Calculador Equação do 2° Grau http://www.profcardy.com/calculadoras/aplicativos.php?calc=2
http://www.brasilescola.com/matematica/equacao-2-grau.htm
exercicio tirado do site: http://www.brasilescola.com/matematica/numeros-complexos1.htm
>>> funcao_quadratica(6, 2, -20)
[-2.0, 1.6666666666666667]
>>> funcao_quadratica(3, -7, 2)
[0.3333333333333333, 2.0]
>>> funcao_quadratica(-1, 4, -4)
[2.0]
>>> funcao_quadratica(1, 8, 16)
[-4.0]
>>> funcao_quadratica(2, -16, 50)
[4.0, 4.0]
>>> funcao_quadratica(2, -10, 12)
[2.0, 3.0]
Complex number, with some issues
>>> funcao_quadratica(6, 2, 20)
[-0.16666666666666666, -0.16666666666666666]
>>> funcao_quadratica(5, -6, 5)
[0.6, 0.6]
>>> funcao_quadratica(1, -3, 4)
[1.5, 1.5]
Other
>>> funcao_quadratica(0, 8, 16)
[]
>>> funcao_quadratica(None, None, None)
[]
>>> funcao_quadratica(2, None, 3)
[]
"""
if a != 0 and [type(1)] == list(set([type(a), type(b), type(c)])):
if (a%2 + b%2 + c%2) == 0: # Verifica se todos são divisível por 2
a /= 2; b /= 2; c /= 2
delta = (b**2) - (4*a*c)
if delta > 0: # A equação tem duas raízes reais distintas
delta = sqrt(delta)
raiz1 = (-b - delta) / (2.0*a)
raiz2 = (-b + delta) / (2.0*a)
return [raiz1, raiz2]
elif delta == 0: # A equação tem exatamente uma raiz.
return [-b / (2.0*a)]
else: # A equação não possui qualquer raiz real, mais possui raiz em números complexo.
delta = sqrt(abs(delta))
raiz1 = (complex(-b,delta)) / (2*a)
raiz2 = (complex(-b,delta*-1)) / (2*a)
return [raiz1.real, raiz2.real]
else: return []
if __name__ == "__main__":
import doctest
doctest.testmod()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment