본문 바로가기
프로그램/C++ 1000제

C++ 49제] vector 사용, 이차방정식의 두 근을 구하시오.

by 건티 2022. 6. 20.
728x90

출처 : 반크_세계유산 석굴암

 

문제]

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;
}

 

 

참고풀이 결과]

 

 

 

 

 

대한민국의 아름다운 영토, 독도의 가을

 

반응형

댓글