Solución a la Tarea 1: Unidades británicas de longitud
Hay al menos dos formas de resolver esta tarea. En la primera (que es
la que casi todos siguieron) se debe dividir u entre 8*220*3*12 para
calcular m y el residuo de esa
división se debe dividir entre 220*3*12 para calcular f y el residuo de esa
división se debe
dividir entre 3*12 para calcular y
y el residuo de esa división
se debe dividir entre 12 para calcular p
y el residuo de esa
división es q.
En la segunda forma, se pueden hacer las operaciones al revés: q
es el residuo de u al
dividirlo por 12, p es el
residuo de lo que queda
al dividirlo por 3, y es el
residuo de lo que queda al dividirlo por
220, f es el residuo de lo que
queda al dividirlo por 8 y ésta
última división da el valor de m.
#include
<stdio.h>
int main(void)
{
long u, m, f, y, p, q;
scanf("%ld", &u);
q = u % 12;
u = (u - q) / 12;
p = u % 3;
u = (u - p) / 3;
y = u % 220;
u = (u - y) / 220;
f = u % 8;
m = (u - f) / 8;
printf("%ld %ld %ld %ld
%ld\n", m, f, y, p, q);
return 0;
}
Los valores de entrada y salida empleados para la evaluación
fueron los siguientes:
Entrada
Salida
4
0 0 0 0 4
400 0
0 11 0 4
40000 0 5 11 0 4
4000000 63 1 11 0 4
400000000 6313 1 11 0 4
31
0 0 0 2 7
3141 0 0 87
0 9
314159 4 7 146 1 11
31415926 495 6 144 1 10
1141592657 18017 4 107 0 5
Para probar su tarea en UNIX, escriban la instrucción gcc unbritNN.c -o unbrit para
compilar su programa, y la instrucción ./unbrit para correrlo.
Algunos errores comúnes fueron: (a) Leer int como long o
viceversa. (b) Imprimir letreros de cualquier tipo e incluso usar
conio.h, lo cual estaba explícitamente prohibido. (c) Todo tipo
de conversiones mal hechas.
(d) Aunque no es un error, lo mejor era usar enteros para las
operaciones, pues los cálculos con flotantes son inexactos.
Además, les recuerdo que
sólo deben enviar el archivo .c y que éste debe tener el
nombre correcto.