ErrorDeSintaxis

Pequeños fragmentos de código fuente en distintos lenguajes de programación, agrupados por categorías.

Puedes buscar entre los fuentes existentes, o aportar los tuyos.

C: Día de la semana

Calcular el día de la semana usando la fórmula de Zeller

Lenguaje: C (compilador: GCC 3)

Categoría: Fecha y hora

/* Fuente procedente de ErrorDeSintaxis.es */
/* Calcular el día de la semana usando la fórmula */
/*  de Zeller */
/* Compilador: GCC 3 */
/* Nivel: Intermedio */
/* Disponible desde 08/01/2012 */
/* Aportado por Nacho */
/* Autor original: Equipo de RosettaCode.org */
/* Web original: http://rosettacode.org/wiki/Day_of_the_week#C */

/*
De: http://mathforum.org/library/drmath/view/62324.html
 
Here we're defining
 
  k = day of month
  m = month number, taking Mar=1, ..., Dec=10, Jan=11, Feb=12
  d = last two digits of year, using the previous year for Jan and Feb
  c = first two digits of year
 
The formula is then
 
  f = k + [(13*m - 1)/5] + d + [d/4] + [c/4] - 2*c
*/
 
#include <stdio.h>
 
/* Calculate day of week in proleptic Gregorian calendar. Sunday == 0. */
int wday(int year, int month, int day)
{
	int adjustment, mm, yy;
 
	adjustment = (14 - month) / 12;
	mm = month + 12 * adjustment - 2;
	yy = year - adjustment;
	return (day + (13 * mm - 1) / 5 +
		yy + yy / 4 - yy / 100 + yy / 400) % 7;
}
 
int main()
{
	int y;
 
	for (y = 2008; y <= 2121; y++) {
		if (wday(y, 12, 25) == 0) printf("%04d-12-25
", y);
	}
 
	return 0;
}