Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

หาด้านและมุมของสามเหลี่ยมมุมฉากด้วย C++


ภาพรวมปัญหา

ได้รับจำนวนเต็ม a แทนด้านหนึ่งของสามเหลี่ยมมุมฉาก ต้องหาด้านอีกสองด้านและมุมทั้งสามมุม

ตัวอย่าง

อินพุต

a = 5

เอาต์พุต

Sides : 5, 12, 13
Angles : 67.38, 22.62, 90

คำอธิบาย

ด้าน: 5² + 12² = 13²
มุม: sin⁻¹(5/13) ≈ 22.62° และ 90° - 22.62° = 67.38°

วิธีแก้ปัญหา

1. หาด้าน b, c ด้วยสูตรเดียวกับบทความก่อนหน้า (Pythagorean Triples)

2. หามุมด้วยกฎโคไซน์ (Law of Cosines):

cos(A) = (b² + c² - a²) / (2bc)
cos(B) = (a² + c² - b²) / (2ac)
cos(C) = (a² + b² - c²) / (2ab) = 0 → C = 90°

โค้ดตัวอย่าง

#include <bits/stdc++.h>
#include <cmath>
using namespace std;

#define PI 3.1415926535

void printAngles(int a, int b, int c) {
    double x = (double)a;
    double y = (double)b;
    double z = (double)c;
    
    double A = acos((y*y + z*z - x*x) / (2*y*z)) * 180 / PI;
    double B = acos((x*x + z*z - y*y) / (2*x*z)) * 180 / PI;
    
    cout << "Angles: A = " << A << ", B = " << B << ", C = 90";
}

void printOtherSides(int n) {
    int b, c;
    if (n & 1) {
        if (n == 1)
            cout << -1 << endl;
        else {
            b = (n*n - 1) / 2;
            c = (n*n + 1) / 2;
        }
    } else {
        if (n == 2)
            cout << -1 << endl;
        else {
            b = n*n/4 - 1;
            c = n*n/4 + 1;
        }
    }
    cout << "Sides : a = " << n << ", b = " << b << ", c = " << c << endl;
    printAngles(n, b, c);
}

int main() {
    int a = 5;
    printOtherSides(a);
    return 0;
}

เอาต์พุต

Sides : a = 5, b = 12, c = 13
Angles: A = 22.6199, B = 67.3801, C = 90

สรุป

ขยายจากปัญหาหาด้าน โดยเพิ่มการคำนวณมุมด้วยกฎโคไซน์ ใช้ฟังก์ชัน acos() และแปลงจากเรเดียนเป็นองศา