Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++로 직각삼각형의 두 변 길이 구하기

이 문제에서는 직각삼각형의 빗변(H)넓이(A) 두 값이 주어지며, 이를 바탕으로 직각삼각형의 나머지 두 변의 길이를 구하는 것이 목표입니다.

직각삼각형(Right Angled Triangle)은 두 변이 서로 직각(90도)으로 만나는 특수한 형태의 삼각형입니다.

예시를 통해 문제를 살펴보겠습니다.

입력 : H = 7 , A = 8
출력 : 높이(height) = 2.43, 밑변(base) = 6.56

해결 접근 방법

이 문제는 수학적 공식을 활용하면 간단하게 해결할 수 있습니다. 공식을 하나씩 유도해 보겠습니다.

직각삼각형의 넓이와 피타고라스 정리는 다음과 같습니다.

A = (1/2) × h × b   (넓이 공식)

H² = h² + b²   (피타고라스 정리)

여기서 h는 높이(perpendicular), b는 밑변(base), H는 빗변(hypotenuse)입니다.

(h + b) 값 구하기

완전제곱 공식을 활용하면,

(h + b)² = h² + b² + 2hb

앞서 구한 두 식을 대입하면 2hb = 4A이므로,

(h + b)² = H² + 4A

h + b = √(H² + 4A)

(h − b) 값 구하기

마찬가지로 완전제곱 공식을 적용하면,

(h − b)² = h² + b² − 2hb

(h − b)² = H² − 4A

h − b = √(H² − 4A)

두 식을 연립하여 풀이

이제 위에서 구한 두 개의 방정식을 얻었습니다.

두 식을 더하면,

2h = √(H² + 4A) + √(H² − 4A)

h = [√(H² + 4A) + √(H² − 4A)] / 2

두 식을 빼면,

2b = √(H² + 4A) − √(H² − 4A)

b = [√(H² + 4A) − √(H² − 4A)] / 2

이렇게 유도한 두 공식에 값을 대입하면 높이 h와 밑변 b를 구할 수 있습니다. 단, H² < 4A인 경우에는 실수 범위에서 해가 존재하지 않으므로 예외 처리가 필요합니다.

구현 예제

아래 프로그램은 위 해결 방법이 실제로 동작하는 모습을 보여줍니다.

#include <iostream>
#include <math.h>
using namespace std;

void findDimensionsRightTriangle(int H, int A) {
    if (H * H < 4 * A) {
        cout<<"Not Possible\n";
        return;
    }
    float val1 = (float)sqrt(H * H + 4 * A);
    float val2 = (float)sqrt(H * H - 4 * A);
    float b = (float)(val1 + val2) / 2.0;
    float p = (float)(val1 - val2) / 2.0;
    cout<<"Perpendicular = "<<p<<endl;
    cout<<"Base = "<<b;
}

int main() {
    int H = 7;
    int A = 8;
    cout<<"The dimensions of the triangle are : \n";
    cout<<"Hypotenuse = "<<H<<endl;
    findDimensionsRightTriangle(H, A);
    return 0;
}

출력 결과

The dimensions of the triangle are :
Hypotenuse = 7
Perpendicular = 2.43845
Base = 6.56155

코드 설명

먼저 빗변의 제곱이 넓이의 4배보다 작은지 검사하여 해가 존재하는지 확인합니다. 조건을 만족하지 않으면 "Not Possible"을 출력하고 함수를 종료합니다. 조건을 만족하면 √(H² + 4A)와 √(H² − 4A)를 각각 계산한 뒤, 앞서 유도한 공식에 따라 높이(p)와 밑변(b)을 구해 출력합니다.