기록장

[C++] 이차방정식의 해를 구하는 클래스 본문

코딩 공부/C++

[C++] 이차방정식의 해를 구하는 클래스

민j 2023. 3. 23. 00:22

<C++로 시작하는 객체지향 프로그래밍> 402p 실습 9.6번 문제

2차 방정식 ax^2 + bx + c = 0 에 대한 QuadraticEquation 이라는 클래스를 설계하여라

class 에서

- 세 개의 계수를 나타내는 a, b, c 데이터 필드

- a, b, c 를 인수로 갖는 생성자

- a, b, c 에 대한 세 개의 get 함수 (반환)

- 판별식 b^2 - 4ac 를 반환하는 getDiscriminant() 함수

- 방정식의 두 근을 반환하는 함수 getRoot1() 와 getRoot2(). 근의 공식을 사용한다. 판별식이 음수가 아닐 경우에만 성립, 판별식이 음수인 경우 0을 반환

 

main함수에서

- 사용자로부터 a, b, c의 값을 입력받아 판별식에 근거한 결과를 화면에 출력

- 판별식이 양수일 경우 : 두 개의 근 출력

- 판별식이 0일 경우 : 한 개의 근 출력

- 판별식이 음수일 경우 : "The equation has no real roots" 출력

 


UML 다이어그램


코드

#include <iostream>
#include <cmath>
using namespace std;

class QuadraticEquation
{
private:
	double a;
	double b;
	double c;

public:
	QuadraticEquation(double A, double B, double C) {
		a = A;
		b = B;
		c = C;
	}

	double getA() {
		return a;
	}
	double getB() {
		return b;
	}
	double getC() {
		return c;
	}

	// 판별식을 반환하는 함수
	double getDiscriminant()
	{
		return (b * b) - (4 * a * c);
	}
	// 두 근을 반환하는 함수, 판별식이 0보다 작을 경우 0을 반환한다.
	double getRoot1()
	{
		if (getDiscriminant() < 0)
			return 0;
		else
		{
			double r1 = (((- 1) * b) + sqrt((b * b) - (4 * a * c))) / (2 * a);
			return r1;
		}
	}
	double getRoot2()
	{
		if (getDiscriminant() < 0)
			return 0;
		else {
			double r2 = (((-1) * b) + (-1) * sqrt((b * b) - (4 * a * c))) / (2 * a);
			return r2;
		}
	}
};

int main()
{
	cout << "ax^2 + bx + c = 0" << endl;
	cout << "Enter a: ";
	double a;
	cin >> a;

	cout << "Enter b: ";
	double b;
	cin >> b;

	cout << "Enter c: ";
	double c;
	cin >> c;

	QuadraticEquation Equation(a, b, c);

	if (Equation.getDiscriminant() > 0)
		cout << "Two roots are " << Equation.getRoot1() << " and " << Equation.getRoot2() << endl;
	else if (Equation.getDiscriminant() == 0)
		cout << "Root is " << Equation.getRoot1() << endl;
	else
		cout << "The equation has no real roots" << endl;

	return 0;
}

결과 (출력)

판별식 == 0
판별식 < 0
판별식 > 0