여러분은 5주차 강의에서 4주차 강의에 이어서 다소
복잡한 선택 구조로 if-else 체인 구조, 중첩 if 문, switch 문 등에 대해서 다루었다. 여기서는 이러한 다양한
선택 구조를 사용 가능한 프로그램 예제를 살펴본다.
분석
문제의 입력과 출력을 생각하고, 고려된 변수들간의 관계 식을 생각한다.
분석 사항
내용
문제
입력
3개의
정수(int a, b, c)
문제
출력
두
개의 실근(double root1, root2)
추가된
변수들
근을
계산하는데 사용되는 determinant(double d)
관계식
d
=
a=0이고 b=0이면 실근이 존재하지 않는다.
a=0이고 b≠0이면 root1 = -c/b이고, root2는 존재하지 않는다.
a=0, b≠0, d>0이면 두 개의 근이 존재한다.
root1 =( -b + d)/2a
root2 = ( -b - d)/2a
a=0, b≠0, d = 0이면 root1만이 존재한다.
root1 = -b/2a
a=0, b≠0, d = 0이면 실근이 존재하지 않는다.
여러분은 이미 주어진 2차방정식으로부터
실근을 구하는 방법을 알고 있기 때문에 분석 사항에서 관계 식 부분을 이해할 수 있겠다. a, b, c가 사용자로부터
입력되기 때문에, a, b, c의 값에 따라서 실근을 구하는 방법을 생각해야 한다.
설계
이제 분석 사항을 토대로 알고리즘을 최 상위 수준부터 작성하고, 각 단계의 복잡성을 고려하여 순차적으로 세분화시켜
간다.
다음은 문제에 대한 최 상위 수준의 알고리즘이다.
알고리즘
5-4-1
1.
사용자로부터 a, b, c의 정수 값을 입력받는다.
2. 두 개의 실근, root1, root를 구한다.
3. root1, root2를 출력한다.
위의 알고리즘에서 두 번째 단계가 사용자로부터 입력받은 a, b, c로부터 생성된 2차방정식으로부터
실근을 구하는 과정이다. 이 과정은 분석의 관계 식에서 기술된 사항으로부터 다음과 같이 다이어그램으로 나타낼 수 있다.
알고리즘 5-4-1의 단계 2의 행동이 위의 다이어그램으로
표현되기 때문에, 이를 반영하여 다음과 같이 알고리즘 5-4-1을 세분화시킨다.
2차 방정식의 근이 a, b의 조건에 따라서 다르게 계산되므로, 단계 3을 단계 2에 포함시키고,
단계 2의 각 조건의 행동에 root1, root의 출력을 포함시켰음을 알 수 있다.
알고리즘
5-4-2에서 단계 2.6은 단순한 C 문장으로 번역되기에는 너무 복합한 수준이다. 이 단계는 다음과 같은
행동을 수행한다.