2019. 1. 6. 15:17ㆍ카테고리 없음
문제
직각삼각형에서 직각을 이루는 두 변의 길이를 입력받고, 함수를 통해 빗변의 길이를 반환값으로 돌려받아 출력하는 프로그램을 작성하시오. 이 함수의 매개변수 및 반환값은 double로 하시오.
이전 프로그램의 경우, 화면에 출력된 값이 실제 빗변의 길이와 다소 오차가 존재했다. 그것은 double 자료형이 제한된 용량을 갖고 있고, 또 실제로 화면에 출력할 수 있는 정도에도 분명한 한계가 있기 때문이다. 무한한 성격의 실수를 표현해야하기 때문에 발생하는 불가피한 한계에도 불구하고 화면에 출력된 값을 충분히 신뢰할 수 있기 위해서는 적어도 출력값이 double의 유효숫자 안에서만 표현되어야 한다. 다음은 이러한 한계점을 보완하기 위해 출력 방법을 보완한 프로그램이다.
핵심 아이디어
ㅡ 제곱과 제곱근
ㅡ 실수와 근삿값 (double 자료형의 유효숫자 15)
※ 결과
ㅡ 기존의 프로그램은 매우 큰 수나 매우 작은 수를 입력했을 때, 유효숫자가 15인 double 자료형의 특징 때문에 출력된 값을 어느 정도까지 신뢰해야하는지 불분명한 문제점이 있었다.
ㅡ 본 프로그램에서는 너무 큰 수를 입력했을 경우, 초기에 제시한 적당한 구간 내에 값을 입력하도록 요구하고, 너무 작은 수를 입력했을 때에는 main 함수의 반환값을 통해 빗변 길이의 가수의 크기를 제시하여 직접 유효숫자를 통한 판단을 가능케 한다.
<main 함수>
※ 내부 함수
1. endl 함수
ㅡ printf("\n")으로 출력시 줄바꿈을 수행한다. 내용에 직접적인 연관은 없다.
2. Inab_Outc 함수
ㅡ 기존에는 a 와 b , 두 개의 변수를 선언하고 따로따로 입력받았지만, 두 변수의 속성이 서로 같기 때문에 하나의 배열을 선언하여 값을 차례대로 입력받는 것도 가능하다.
ㅡ 만약 계산되어 나온 빗변의 길이 c가 double의 유효숫자 이상, 즉 10^15 이상의 값을 가지면 다시 입력하도록 하고, 적절한 값으로 판단되면 반환한다.
3. Error_correction 함수
ㅡ 매개변수로 입력받은 빗변의 길이 result 를 10^k 로 나누면서 자릿수를 판단한다.
ㅡ 그렇게 판단한 자릿수와 유효숫자 15를 고려하여 각 case에 알맞은 출력을 진행한다.
ㅡ <math.h> 헤더파일에 존재하는 sqrt(k), pow(a, b) 함수 활용
ㅡ do while 문으로 조건에 맞는 입력값 받기
ㅡ switch case 문으로 각기 다른 경우를 다루기