Tính diện tích của tam giác khi nhập ba cạnh bằng ngôn ngữ C/C++
Đề bài: Viết chương trình nhập vào ba số thực là ba cạnh của một tam giác. Kiểm tra ba cạnh được nhập có hợp lệ hay không. Nếu hợp lệ, hãy cho biết loại tam giác và tính diện tích tam giác đó.
Ví dụ:
Enter a: 3
Enter b: 4
Enter c: 5
Area: 6.000000
Hướng dẫn giải
Với a, b, c lần lượt là ba cạnh của một tam giác thì ta sẽ có các biểu thức sau luôn đúng:
- a < b + c
- b < a + c
- c < a + b
Ta sẽ dùng các biểu thức trên để kiểm tra xem ba cạnh a, b, c có phải là một canh của tam giác hay không.
bool isRectangle(float a, float b, float c) {
if(a >= b + c) return false;
if(b >= a + c) return false;
if(b >= a + b) return false;
return true;
}
Tiếp theo để tính diện tích tam giác ta sẽ dùng công thức Heron
:
s = sqrt(p * (p - a) * (p - b) * (p - c));
Với p
là một nửa chu vi của tam giác. sqrt
là hàm tính căn bậc hai trong thư viện math.h
.
float (float a, float b, float c){
float p = (a + b + c) / 2;
return sqrt(p * (p - a) * (p - b) * (p - c));
}
Code
Các bạn có thể tham khảo đoạn code dưới đây:
#include <stdio.h>
#include <math.h>
bool isRectangle(float a, float b, float c) {
if(a >= b + c) return false;
if(b >= a + c) return false;
if(c >= a + b) return false;
return true;
}
float area(float a, float b, float c){
float p = (a + b + c) / 2;
return sqrt(p * (p - a) * (p - b) * (p - c));
}
int main() {
float a, b, c;
printf("Enter a: ");
scanf("%f", &a);
printf("Enter b: ");
scanf("%f", &b);
printf("Enter c: ");
scanf("%f", &c);
if (isRectangle(a, b, c)){
printf("Area: %04f\n", area(a, b, c));
} else {
printf("a, b, c are invalid\n");
}
}