Solución a la Tarea 2: Tipo de triángulo
Hay varias formas de resolver la tarea. En la que muestro abajo,
primero averiguo si a, b y c son los lados de un triángulo (en
cuyo caso supondré de entrada que es isósceles, haciendo
t=2) o no (dejando t=0). En el primer caso, es fácil averiguar
si el triángulo es escaleno (t=3) o equilátero (t=1). En
el segundo caso basta ver que lo único que se necesita es lograr
que se cumplan las tres desigualdades del triángulo: para cada
una de ellas, por ejemplo para a+b>c, lo que se necesita es que
(a+d)+(b+d)>(c+d), es decir, d debe ser al menos c-a-b+1.
#include
<stdio.h>
int main(void)
{
int a, b, c, d = 0, t = 0;
scanf("%d%d%d", &a, &b, &c);
if (a > 0 && b > 0 && c > 0 &&
a+b>c && b+c>a && c+a>b)
t = 2;
if (t) {
if (a != b && b != c && c != a)
t = 3;
else if (a == b && b == c)
t = 1;
} else {
d = a-b-c;
if (d < b-c-a)
d = b-c-a;
if (d < c-a-b)
d = c-a-b;
d = d+1;
}
printf("%d %d\n", t, d);
return 0;
}
Los valores de entrada y salida empleados para la evaluación
fueron los siguientes:
Entrada
Salida
3 4
5 3 0
3 1 2 0 1
0 0 0 0 1
1 1 1 1 0
-3 -4 -5 0 7
2 0 1 0 2
2 3 2 2 0
2 2 1 2 0
7 9 8 3 0
-10 0 10 0 21
Para probar su tarea en UNIX, escriban la instrucción gcc tipotrNN.c -o tipotr para
compilar su programa, y la instrucción ./tipotr para correrlo.
Algunos errores comúnes fueron: (a) no revisar que los lados
debían ser positivos, (b) no revisar que las desigualdades del
triángulo se debían cumplir estrictamente, (c) preguntar
incorrectamente si a, b y c eran todos iguales o todos diferentes, (d)
calcular d de forma erronea.