Solución a la Tarea 4: Parejas disparejas

Había varias formas de resolver la tarea. En cualquiera de ellas se necesita un ciclo para calcular los valores de la función s(n) y una serie de decisiones para decidir el tipo de una pareja. El uso de funciones en C no es absolutamente necesario, pero el no usarlas implica que el programa resultante será extremadamente largo, al tener que realizar las mismas operaciones una tras otra. El siguiente programa usa dos funciones:

#include <stdio.h>

int suma(int n)
{
  int i, s = 0;
 
  for (i = 1; i < n; i++)
    if (n % i == 0)
      s += i;
  return s;
}
 
int tipo(int m, int n)
{
  int sm, sn;
 
  sm = suma(m);
  sn = suma(n);
  if (sm == n && sn == m)
    return 0;
  if (sm <= n && sn <= m)
    return 1;
  if (sm >= n && sn >= m)
    return 2;
  return 3;
}
 
int main(void)
{
  int m, n;
 
  scanf("%d%d", &m, &n);
  printf("%d %d %d\n", tipo(m,n), tipo(m,m), tipo(n,n));
  return 0;
}

Los valores de entrada y salida empleados para la evaluación fueron los siguientes:

Entrada    Salida
1 1        1 1 1
6 6        0 0 0
9 9        1 1 1
12 12      2 2 2
6 12       3 0 2
9 6        1 1 0
9 12       3 1 2
10 100     3 1 2
100 220    3 2 2
220 284    0 2 1

Para probar su tarea en UNIX, escriban la instrucción gcc parejaNN.c -o pareja para compilar su programa, y la instrucción ./pareja para correrlo. Algunos errores comúnes fueron: (a) Aunque no es necesariamente un error, lo mejor era usar funciones. (b) Algunos calcularon la función s(n) mal, por ejemplo, sumaron también el valor de n. (c) Algunos decidieron el tipo de la pareja incorrectamente. (d) Al menos un programa a veces sacaba tres valores, a veces dos, a veces uno y a veces ninguno a la salida.