#include <iostream>
#include <cmath>
using namespace std;
void nhap_so(double&, double&, double&); // Hàm nhập ba cạnh
void loai_tam_giac(double, double, double); // Hàm xác định loại tam giác
int main() {
double a, b, c;
nhap_so(a, b, c);
loai_tam_giac(a, b, c);
return 0;
}
void nhap_so(double &a, double &b, double &c) {
// Dùng vòng lặp để bắt người dùng nhập lại nếu nhập sai
do {
cout << "Nhap so cho canh dau tien : ";
cin >> a;
cout << "Nhap so cho canh thu hai : ";
cin >> b;
cout << "Nhap so cho canh thu ba : ";
cin >> c;
// Nếu có cạnh <= 0 thì thông báo lỗi
if (a <= 0 || b <= 0 || c <= 0)
cout << "Canh khong hop le! Moi nhap lai.\n";
} while (a <= 0 || b <= 0 || c <= 0);
}
void loai_tam_giac(double a, double b, double c) {
const double eps = 1e-6; // Sai số cho so sánh số thực (để tránh lỗi do làm tròn)
// Bước 1: Kiểm tra điều kiện tồn tại của tam giác
// Tổng hai cạnh phải lớn hơn cạnh còn lại
// Dùng "eps" để xử lý trường hợp sai số dấu phẩy động (floating point error)
if (a + b <= c + eps || a + c <= b + eps || b + c <= a + eps) {
cout << "Khong ton tai tam giac\n";
return;
}
// Bước 2: Xác định loại tam giác
bool deu = false; // Biến đánh dấu tam giác đều
bool can = false; // Biến đánh dấu tam giác cân
bool vuong = false; // Biến đánh dấu tam giác vuông
// So sánh bằng "fabs(... ) < eps" để tránh sai số khi nhập số thực
// Kiểm tra tam giác đều
if (fabs(a - b) < eps && fabs(b - c) < eps)
deu = true;
// Kiểm tra tam giác cân
else if (fabs(a - b) < eps || fabs(b - c) < eps || fabs(a - c) < eps)
can = true;
// Kiểm tra tam giác vuông
// Gọi maxSide là cạnh lớn nhất (vì cạnh lớn nhất sẽ là cạnh huyền nếu vuông)
double maxSide = max(a, max(b, c));
// Tổng bình phương 3 cạnh = 2 * bình phương cạnh lớn nhất nếu tam giác vuông
double sum = a*a + b*b + c*c;
if (fabs(2 * maxSide * maxSide - sum) < eps)
vuong = true;
// Bước 4: In kết quả
// Ưu tiên phân loại đặc biệt trước (đều, vuông cân)
if (deu)
cout << "Tam giac deu\n";
else if (vuong && can)
cout << "Tam giac vuong can\n";
else if (vuong)
cout << "Tam giac vuong\n";
else if (can)
cout << "Tam giac can\n";
else
cout << "Tam giac thuong\n";
}