출처 : 반크_세계유산 석굴암
문제]
2차 방정식 ax^2 + bx + c = 0의 세 계수 a, b, c의 값을 키보드로 입력받아 두 실근을 구하여 두 실근의 합을 소수 첫째자리까지 출력하는 프로그램을 작성하시오.
조건)
1. -50~50사이의 수가 입력되도록 하시오.
2. 입력되는 방정식은 항상 두 실근을 가진다.
b*b-4*a*c의 값이 항상 양수면 두 실근을 갖는다.
3. 결과값이 나오지 않으면 에러 메시지를 나타내고 다시 입력되도록 하시오.
4. 계속할 것인지의 여부를 물어 프로그램을 종료하시오.
출력 예)
세 계수를 입력하시오 : 2 4 2
입력된 세 계수의 값은 두 개의 실근을 갖지 않습니다.
b*b-4*a*c>0이어야 두 실근을 갖습니다.
다시 입력하세요.
세 계수를 입력하시오 : 1 4 -21
두 실근의 값 : 3, -7
계속하시겠습니까?(Y/N) N
수고하셨습니다.
참고풀이]
#include <iostream>
#include <vector>
#include <math.h>
#include <string>
using namespace std;
int main()
{
vector<double> v;
int a,b,c;
double x,y;
char ch;//계속여부 체크변수
while(1)
{
//vector에 조건에 맞는 세 계수의 값을 넣는다.
while(1)
{
cout << "세 계수를 입력하시오 : ";
cin >> a >> b >> c;
if((a>=-50 && a<=50) && (b>=-50 && b<=50) && (c>=-50 && c<=50))
if(b*b-4*a*c>0)
{
v.push_back((double)a);
v.push_back((double)b);
v.push_back((double)c);
break;
}
else
{
cout << "입력된 세 계수의 값은 두 개의 실근을 갖지 않습니다.\n";
cout << "b*b-4*a*c>0 이어야 두 실근을 갖습니다.\n";
}
else
cout << "a,b,c의 값이 범위를 벗어났습니다.\n";
cout << "다시 입력하세요.\n\n";
}
//두 실근의 값을 구한다.
x=(-v[1] + sqrt(v[1]*v[1]-4*v[0]*v[2]))/(2 * v[0]);
y=(-v[1] - sqrt(v[1]*v[1]-4*v[0]*v[2]))/(2 * v[0]);
cout << "두 실근의 값 : " << x << ", " << y << endl;
cout << "\n계속하시겠습니까?(Y/N) ";
cin >> ch;
if(tolower(ch)=='n') break;
cout << endl;
v.clear();//vector를 깨끗이 한다.
}
cout << "수고하셨습니다.\n";
return 0;
}
참고풀이 결과]
대한민국의 아름다운 영토, 독도의 가을
'프로그램 > C++ 1000제' 카테고리의 다른 글
C++ 51제] vector 사용, 최소값을 구하시오. (0) | 2022.06.21 |
---|---|
C++ 50제] vector 사용, 최대값을 구하시오. (0) | 2022.06.20 |
C++ 48제] vector 사용, 문제와 같이 출력하도록 하시오. (0) | 2022.06.17 |
C++ 47제] vector 사용, 10진수를 2진수로 변환하시오. (0) | 2022.06.17 |
C++ 46제] vector 사용, 조건에 맞는 진수와 승수값을 출력하시오. (0) | 2022.06.16 |
댓글