import sys
import cmath
class Quadratic:
domain: str = f"(-∞, ∞)"
def __init__(self, a: float, b: float, c: float):
self.a: float = a
self.b: float = b
self.c: float = c
self.h: float = self.b / 2 * self.a
self.k: float = (self.a * self.h**2) + (b * self.h) + self.c
self.zero_first: complex = ( -self.b + cmath.sqrt((self.b ** 2) - 4 * self.a * self.c)) / 2 * self.a
self.zero_second: complex = ( -self.b - cmath.sqrt((self.b ** 2) - 4 * self.a * self.c)) / 2 * self.a
self.zeroes: list[str] = [
f"{self.zero_first.real if self.zero_first.imag == 0 else self.zero_first}",
f"{self.zero_second.real if self.zero_second.imag == 0 else self.zero_second}"
]
self.quad_form: str = f"f(x) = {a if a != 1 else ''}x^2 + {f"{b}x" if b != 0 else '0'} + {c}"
self.vert_form: str = f"f(x) = {a if a != 1 else ''}(x - {self.h})^2 + {self.k}"
self.vertex: str = f"({self.h}, {self.k})"
self.axis_symmetry: str = f"x={self.h}"
if self.a < 0:
self.range = f"(-∞, {self.k})"
elif self.a > 0:
self.range = f"({self.k}, ∞)"
else:
raise Exception
def __str__(self):
return self.quad_form
def print(self) -> None:
print(f"Quadratic Form: {self.quad_form}")
print(f"Vertex Form: {self.vert_form}")
print(f"Vertex: {self.vertex}")
print(f"Axis of Symmetry: {self.axis_symmetry}")
print(f"Zeroes:")
for zero in set(self.zeroes):
print(f"\t{zero}")
print(f"Domain: {self.domain}")
print(f"Range: {self.range}")
def solve(self, x: float) -> float:
return self.a * x**2 + self.b * x + self.c
def main() -> int:
if len(sys.argv) >= 4:
try:
a = float(sys.argv[1])
b = float(sys.argv[2])
c = float(sys.argv[3])
except Exception as error:
print("Invalid arguments. The first through third arguments must be numbers.")
print(error)
return 1
else:
try:
a = float(input("a > "))
b = float(input("b > "))
c = float(input("c > "))
except Exception as error:
print("Invalid arguments. a-c must be numbers.")
print(error)
return 1
print()
Quadratic(a, b, c).print()
return 0
if __name__ == '__main__':
try:
sys.exit(main())
except KeyboardInterrupt:
sys.exit(130)
except Exception as e:
print(f"FATAL: {e}")
sys.exit(1)