Solución a la Tarea 2: Un algoritmo de Gauss poco conocido
Esta tarea se trataba de simplemente implementar el algoritmo descrito,
lo cual no representaba mayor dificultad excepto por la
codificación en C de los pasos 7 a 9 y la escritura como
algoritmo (y después codificación en C) de las
instrucciones para calcular el día y el mes a partir del valor
de la variable J. En el programa que muestro abajo simplemente
reescribo el paso 7 para preguntar cuándo sí hago el paso
8 (pero hay muchas otras formas de hacerlo).
#include <stdio.h>
int main(void)
{
int a, b, c, d, e, f, g,
h, i, j, m;
scanf("%d", &a);
b = a/100 + 1;
c = 3*b/4 - 12;
e = (a%19) + 1;
f = (8*b+5)/25 - (5+c);
g = 5*a/4 - (c+10);
h = (11*e+20+f) % 30;
if (h == 25)
if (e > 11)
h
= h + 1;
if (h == 24)
h = h + 1;
i = 44 - h;
if (i < 21)
i = i + 30;
j = i + 7 - ((g+i)%7);
if (j <= 31) {
d = j;
m = 3;
} else {
d = j - 31;
m = 4;
}
printf("%d %d\n", d, m);
return 0;
}
Los valores de entrada y salida empleados para la evaluación
fueron los siguientes:
Entrada Salida
1583 10 4
1810 22 4
1972 2 4
2000 23 4
2005 27 3
2006 16 4
3333 29 3
4567 12 4
9876 9 4
9999 28 3
Para probar su tarea en UNIX, escriban la instrucción gcc pascuaNN.c -o pascua para
compilar su programa, y la instrucción ./pascua para correrlo.
Algunos errores comúnes fueron: (a) Hacer los cálculos
con flotantes en lugar de con enteros. (b) Utilizar las divisiones 3/4
y 5/4 que en C tienen los valores 0 y 1, y no los valores 0.75 y 1.25
como podría esperarse. (c) No poner los paréntesis al
calcular módulos. (d) No cambiar el valor de M de acuerdo con el
valor de J.