기록장
[C++] 이차방정식의 해를 구하는 클래스 본문
<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;
}
결과 (출력)
'코딩 공부 > C++' 카테고리의 다른 글
[C++] string 클래스 함수들 정리 (0) | 2023.03.29 |
---|---|
[C++][자료구조] HW03 (0) | 2023.03.28 |
[C++] Date클래스: time(0)으로 현재 날짜 구하기 (구조체사용 안 함) (0) | 2023.03.23 |
[C++] 객체지향과 절자지향 코드 비교 (TV 전원, 볼륨, 채널) (0) | 2023.03.19 |
[C++ 자료구조] ch2 프로그래밍 프로젝트 1번 : 다항식 클래스 테스트 프로그램 (0) | 2023.03.14 |