A área de um triângulo qualquer pode ser calculada pelo Teorema de Heron:
A=\sqrt{s(s-a)(s-b)(s-c)}
onde \mathbf{A} é área do triângulo, \mathbf{a}, \mathbf{b} e \mathbf{c} são os lados do triângulo e \mathbf{s} é o semiperímetro do triângulo.
Escreva a função area_heron ( ), a qual recebe como parâmetros os lados dos triângulos e retorne o valor da área desse triângulo. Caso os valores de a, b e c não permitam a existência de um triângulo, a função area_heron() deverá retornar o valor -1.

Passo 1

O que o enunciado pede:
  • Escrever a função chamada area_heron() que receba como parâmetros os lados de um triângulo e retorne a área calculada pelo Teorema de Heron.
  • Caso os valores de a, b e c não permitam a existência de um triângulo, a função deve retornar -1.
Informações e condições dadas:
  • A fórmula de Heron para a área é A=\sqrt{s(s-a)(s-b)(s-c)}
  • O semiperímetro é s=\frac{a+b+c}{2}.
  • A função recebe como entrada os três lados (vou chamar de a, b e c).
  • O enunciado exige verificar existência do triângulo; ou seja, devemos validar as entradas antes de aplicar a fórmula.

Passo 2

Entendendo a fórmula e o que cada símbolo significa (aula rápida):
  • a, b e c são os comprimentos dos três lados do triângulo.
  • s é o semiperímetro: s=\frac{a+b+c}{2}.
  • A expressão dentro da raiz quadrada é D = s(s-a)(s-b)(s-c).
  • A área A é então A=\sqrt{D}.
Importante: para que \sqrt{D} faça sentido real, precisamos de D>0. Além disso, geometrically, os lados devem satisfazer as desigualdades do triângulo.

Passo 3

Condição de existência do triângulo (por que checar isso?):
  • Para três segmentos positivos formarem um triângulo, cada par somado deve ser maior que o terceiro. Ou seja, precisamos checar: a>0,\quad b>0,\quad c>0,e a+b>c,\quad a+c>b,\quad b+c>a.
  • Se alguma dessas condições falhar (por exemplo a+b\le c), os lados não formam um triângulo (caso limite a+b=c é degenerado, área zero) — o enunciado pede que nesses casos retornemos -1.
  • Portanto: antes de calcular s e D, verificamos as condições acima; se alguma não for satisfeita, retornamos -1.

Passo 4

Cuidados numéricos e decisão sobre casos degenerados:
  • Trabalhando com números reais (floats), pode aparecer erro de ponto flutuante. Mas como o enunciado pede claramente que, se os lados não permitirem um triângulo, retornemos -1, vamos:
    • exigir que as desigualdades do triângulo sejam estritas (por exemplo a+b>c, não \ge).
    • calcular D=s(s-a)(s-b)(s-c). Se D\le 0 (incluindo valores pequenos negativos por arredondamento), entendemos que não é um triângulo válido segundo o enunciado e retornamos -1.
  • Assim, o algoritmo fica robusto e consistente com o pedido.

Passo 5

Algoritmo passo a passo (procedimento que você vai programar):
  1. Tentar converter as entradas a, b, c para número real (float). Se não for possível, retornar -1.
  2. Verificar se a>0, b>0, c>0. Se alguma não for, retornar -1.
  3. Verificar as desigualdades do triângulo: a+b>c, a+c>b, b+c>a. Se alguma falhar, retornar -1.
  4. Calcular o semiperímetro s=\frac{a+b+c}{2}.
  5. Calcular D = s(s-a)(s-b)(s-c).
  6. Se D\le 0, retornar -1.
  7. Caso contrário, calcular A=\sqrt{D}
e retornar A (valor numérico, float).
Exemplo numérico rápido (para fixar): com lados a=3, b=4, c=5.
  • s=(3+4+5)/2=6.
  • D=6(6-3)(6-4)(6-5)=6\cdot 3\cdot 2\cdot 1 =36.
  • A=\sqrt{36}=6. (triângulo retângulo clássico)

Passo 6

Observações de implementação:
  • Em Python use o módulo math para a raiz quadrada: math.sqrt().
  • A função deve retornar -1 em todos os casos inválidos.
  • Retorne a área como float quando válida.
  • Abaixo está a função pronta que implementa exatamente o algoritmo explicado.

Resposta

def area_heron(a, b, c):
    import math
    try:
        a = float(a)
        b = float(b)
        c = float\text{(c)}
    except (TypeError, ValueError):
        return -1

    # lados devem ser positivos
    if a <= 0 or b <= 0 or c <= 0:
        return -1

    # desigualdades do triângulo (estritas)
    if not (a + b > c and a + c > b and b + c > a):
        return -1

    s = (a + b + c) / 2.0
    D = s * (s - a) * (s - b) * (s - c)

    if D <= 0:
        return -1

    return math.sqrt(D)

Exercícios relacionados