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.