Bài toán

Đề 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");
  }
}