Solución a la Tarea 3: Triángulos acutángulos
Hay varias formas de resolver esta tarea. La más sencilla es tal
vez anidar tres ciclos for (uno para a, otro para b y otro para c) y
luego verificar que la terna producida satisface todas las condiciones
necesarias, a saber, a+b>c, b+c>a, c+a>b para que sea
triángulo y 0 < cos alfa < 1, 0 < cos beta < 1, 0
< cos gama < 1 para que sea acutángulo (recuerde que si un
ángulo está entre 0 y 90 grados entonces su coseno
está entre 0 y 1). Sin embargo, uno puede observar que esa
solución es
bastante lenta, además de que hay que tener cuidado con las
repeticiones. Otra forma es la de continuar haciendo tres ciclos, pero
cada uno comenzando donde va el otro (es decir, b comenzando con el
valor de a y c comenzando con el valor de b) para de esta manera
garantizar que a <= b <= c y que no hay repeticiones.
Además, esto garantiza que 4 de las 6 condiciones anteriores se
cumplen de forma automática, así que basta con revisar
sólo dos: que a+b>c y que 0 < cos gama < 1. Para lo
último, también ayuda fijarse que esta condición
se cumple si y sólo si a2 + b2 > c2.
Abajo muestro un programa que hace esto:
#include <stdio.h>
int main(void)
{
long a, b, c, m, n, t = 0;
scanf("%ld%ld", &m,
&n);
for (a = m; a <= n; a++)
for (b = a; b
<= n; b++)
for (c = b; c <= n; c++)
if ((a + b > c) && (a*a + b*b > c*c))
t++;
printf("%ld\n", t);
return 0;
}
Los valores de entrada y salida empleados para la evaluación
fueron los siguientes:
Entrada
Salida
3 5 8
5 14 130
6 30 1189
8 28 890
9 47 4190
9 84 23311
74 93 1540
80 98 1330
90 99 220
97 219 229266
Para probar su tarea en UNIX, escriban la instrucción gcc acutanNN.c -o acutan para
compilar su programa, y la instrucción ./acutan para correrlo.
Algunos errores comúnes fueron: (a) Contar cada triángulo
de forma repetida. (b) No revisar que los lados forman un
triángulo. (c) No revisar todos los ángulos. (d) Calcular
el coseno usando números enteros y por lo tanto siempre les daba
0 o -1.