Added exercise 7
This commit is contained in:
parent
fb538f3bf6
commit
559bd5dc6f
74
ex_07.py
Normal file
74
ex_07.py
Normal file
|
@ -0,0 +1,74 @@
|
||||||
|
#!/usr/bin/python3
|
||||||
|
|
||||||
|
from math import sqrt
|
||||||
|
|
||||||
|
from util.io import readvalue
|
||||||
|
|
||||||
|
def solution_count(a, b, c):
|
||||||
|
"""
|
||||||
|
Calculates the number of real solutions
|
||||||
|
for a*x**2 + b*x + c = 0.
|
||||||
|
|
||||||
|
Returns: 0 or 1 or 2
|
||||||
|
|
||||||
|
Method:
|
||||||
|
|
||||||
|
After doing some fiddling you can get the equation
|
||||||
|
|
||||||
|
(x + b/(2*a))**2 = (b/(2*a))**2 - c/a
|
||||||
|
|
||||||
|
You can derive that the equation has
|
||||||
|
no real solution, if (b/(2*a))**2 - c/a < 0
|
||||||
|
one real solution, if (b/(2*a))**2 - c/a = 0,
|
||||||
|
two real solutions, if (b/(2*a))**2 - c/a > 0.
|
||||||
|
"""
|
||||||
|
|
||||||
|
rterm = (b/(2*a))**2 - c/a
|
||||||
|
|
||||||
|
if(rterm < 0):
|
||||||
|
return 0
|
||||||
|
if(rterm == 0):
|
||||||
|
return 1
|
||||||
|
if(rterm > 0):
|
||||||
|
return 2
|
||||||
|
|
||||||
|
def solutions(a, b, c):
|
||||||
|
"""
|
||||||
|
Returns the solution(s) of a*x**2 + b*x + c = 0.
|
||||||
|
|
||||||
|
If the equation has no solution, it returns None,
|
||||||
|
a tuple of the soltions, otherwise.
|
||||||
|
"""
|
||||||
|
# Get the number of solutions:
|
||||||
|
number_of_solutions = solution_count(a, b, c)
|
||||||
|
|
||||||
|
if(not number_of_solutions):
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
if(number_of_solutions == 1):
|
||||||
|
return (-b / (2*a), )
|
||||||
|
else:
|
||||||
|
rterm = sqrt((b/(2*a))**2 - c/a)
|
||||||
|
return (-b / (2*a) + rterm, -b / (2*a) - rterm)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if( __name__ == "__main__"):
|
||||||
|
print("Program to find the solution(s) for a*x**2 + b*x + c = 0")
|
||||||
|
a = readvalue("a > ", float)
|
||||||
|
b = readvalue("b > ", float)
|
||||||
|
c = readvalue("c > ", float)
|
||||||
|
|
||||||
|
number_of_solutions = solution_count(a, b, c)
|
||||||
|
|
||||||
|
messages = ["There are no real solutions."
|
||||||
|
, "There is exactly one real solution."
|
||||||
|
, "There are exactly two real solutions."]
|
||||||
|
print(messages[number_of_solutions])
|
||||||
|
|
||||||
|
if(number_of_solutions == 1):
|
||||||
|
print("The solution is:", solutions(a, b, c)[0])
|
||||||
|
if(number_of_solutions == 2):
|
||||||
|
print("The first solution is:", solutions(a, b, c)[0])
|
||||||
|
print("The second solution is:", solutions(a, b, c)[1])
|
Loading…
Reference in New Issue
Block a user