Dados três valores A , B e C , construa um programa em C para verificar se estes valores podem ser valores dos lados de um triângulo, e se for um triângulo retângulo, determinar (imprimir) os seus ângulos internos.
Passo 1
O programa em C deve receber três valores reais
,
e
. Primeiro vamos verificar se eles satisfazem as desigualdades de existência de um triângulo:
Se não satisfizerem, não formam triângulo. Caso formem, teste se é triângulo retângulo aplicando o teorema de Pitágoras ao maior lado. Se for retângulo, calcule os três ângulos internos (em graus) usando a Lei dos Cossenos:
e analogamente para os outros dois.
Passo 2
Verificação da existência de triângulo:
- Identificar
, , como os valores lidos. - Checar se
e e . - Se alguma falhar, imprimir mensagem de “não forma triângulo” e encerrar.
Passo 3
Teste de retângulo:
- Encontrar o maior lado, chamar de
, e os outros dois de e . - Verificar se
(com pequeno, e.g.\ ) para compensar erros de ponto flutuante. - Se não for retângulo, imprimir “não é triângulo retângulo” e encerrar.
Passo 4
Cálculo dos ângulos internos (em graus) quando for retângulo:
- Se
for o lado oposto a , então sabemos . - Calcular
e pelas fórmulas:
Ou, de modo simétrico, usar sempre a lei dos cossenos para cada um.
Passo 5
Estrutura geral do programa:
- Fazer
#include <stdio.h>
e#include <math.h>
. - Ler
, e via scanf
. - Aplicar os passos acima.
- Imprimir mensagens e, no caso do retângulo, os três ângulos com
printf("%.2f ", angulo);
.
Resposta
#include <stdio.h>
#include <math.h>
int main() {
double A, B, C;
const double EPS \(=1\)e-9;
// Leitura dos lados
scanf("%lf %lf %lf", &A, &B, &C);
// Passo 2: checar existência de triângulo
if (A + B <= C || A + C <= B || B + C <= A) {
printf("Nao forma triangulo
");
return 0;
}
// Identificar hipotenuza candidata
double h = A, x = B, y = C;
if (B > h) { h = B; x = A; y = C; }
if (C > h) { h = C; x = A; y = B; }
// Passo 3: testar retângulo
if (fabs(h*h - (x*x + y*y)) > EPS) {
printf("Nao eh triangulo retangulo
");
return 0;
}
// Passo 4: calcular ângulos internos
// ângulo oposto a h é 90 graus
double gamma \(=90.0\);
// ângulo oposto a x
double alpha = acos((y*y + h*h - x*x) / (2 * y * h)) * 180.0 / acos(-1.0);
// ângulo oposto a y
double beta \(=180.0\) - alpha - gamma;
// Impressão dos ângulos
printf("Angulo oposto ao lado de comprimento %.2f: %.2f graus
", x, alpha);
printf("Angulo oposto ao lado de comprimento %.2f: %.2f graus
", y, beta);
printf("Angulo oposto ao lado de comprimento %.2f: %.2f graus
", h, gamma);
return 0;
}