Reorganizando mis fuentes me he encontrado con este calendario que desarrollé hace un tiempo. Podría ser interesante, porque te permite calcular el día de la semana de una fecha concreta. La idea me la dió el programa "cal" de linux, que muestra un calendario, pero es más completo. Os prometo que no lo he copiado (este es mio)
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <dos.h>
main(int argc, char *argv[])
{
struct date fecha;
float cociente, dia_jul;
int i, j, a, b, dia_sem;
int dia, mes, anno, mes_ini, anno_ini;
int dias_mes[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
char *nom_meses[12] = { "Enero", "Febrero", "Marzo", "Abril",
"Mayo", "Junio", "Julio", "Agosto",
"Septiembre", "Octubre", "Noviembre", "Diciembre" };
char *nom_dias[7] = { "LUN ","MAR ","MIE ","JUE ","VIE ","SAB ", "DOM" };
dia = 1;
mes_ini = anno_ini = 0;
if (argc == 3) {
mes_ini = atoi(argv[1]);
anno_ini = atoi(argv[2]);
if (mes_ini < 0 || mes_ini > 12)
mes_ini = 0;
}
if (mes_ini == 0 || anno_ini == 0) {
getdate(&fecha);
mes_ini = fecha.da_mon;
anno_ini = fecha.da_year;
}
mes = mes_ini;
anno = anno_ini;
/*
Años bisiestos: los años que terminan en dos ceros son bisiestos
si son divisibles por 400. As¡, un año es bisiesto si es divisible
por 4 y no por 100 o es divisible por 400
*/
if (mes == 2 && ((anno%4 == 0 && anno % 100 !=0) || anno % 400==0))
dias_mes[1] = 29;
if (mes < 3) {
anno--;
mes+=12;
}
a = anno / 100;
b = 2 - a + (a / 4);
dia_jul = (long)(365.25*(anno+4716))+(long)(30.6001*(mes+1))+dia+b-1524.5;
dia_jul += 1.5;
cociente = floor(dia_jul / 7.0);
dia_sem = (int)(dia_jul - (cociente * 7.0));
/* cambiamos el dia inicial (0) al lunes */
dia_sem--;
if (dia_sem < 0)
dia_sem = 6;
/* nombre del mes y año */
printf("\n\t%s %i\n", nom_meses[mes_ini-1], anno_ini);
/* d¡as de la semana */
for (i = 0, j = 0; i < 7; i++) {
printf("%s", nom_dias[j]);
if (++j >= 7)
j = 0;
}
printf("\n");
/* d¡as del mes */
for (i = 0; i < dia_sem; i++)
printf(" ");
for (i = 0, j = dia_sem; i < dias_mes[mes_ini-1]; i++) {
printf("%3i ", i+1);
if (++j >= 7) {
printf("\n");
j = 0;
}
}
printf("\n\n");
}
El programa admite como parámetros el mes y el año que queréis visualizar. Si, por ejemplo, el programa se llama cal.exe....
cal.exe --> visualiza el mes actual
cal.exe 01 2004 --> visualiza el mes de enero del 2004
Un saludo