Código
#include <stdio.h> void leerentrada(int *pm, int *pd, int *pa); int convertir(int mm, int dd, int aa); int main() { int mm, dd, aa; int dia_semana; static char *diasemana[] = { "Domingo", "Lunes", "Martes", "Miércoles", "Jueves", "viernes", "Sabado" }; static char *mes[] = { "Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre" }; leerentrada(&mm, &dd, &aa); while (mm > 0) { dia_semana = convertir (mm, dd, aa); leerentrada(&mm, &dd, &aa); } return 0; } void leerentrada(int *pm, int *pd, int *pa) { } int convertir (int mm, int dd, int aa) { long int ndias; // numero de dias desde el comienzo de 1900 long int nciclos; //numero de ciclos de 4 años despues de 1900 int nanios; //numero de años despues del ultimo ciclo de 4 años int dia; //dia de la semana (0, 1, 2, 3, 4, 5 o 6) aa -= 1900; ndias= (long) (30.42 * (mm - 1) + dd); //dia aproximado del año if (mm == 2) ++ndias; //ajuste para febrero if ((mm > 2) && (mm < 8)) --ndias; //ajuste para marzo-julio if ((aa % 4 == 0) && (mm > 2)) ++ndias; //ajuste para el año bisiesto nciclos = aa / 4; //ciclos de 4 años a partir de 1900 ndias += nciclos * 1461; //añadir dias por ciclos de 4 años nanios = aa % 4; //años despues del ultimo ciclo de 4 años if (nanios > 0) ndias += 365 * nanios + 1; //añadir dias por años despues del ultimo ciclo if (ndias > 59) --ndias; //ajustar para 1990 (NO años bisiesto) dia = ndias % 7; return (dia); }
el codigo esta copiado exactamente igual que en libro, con los comentarios para explicarlo.
Me ha costado, pero he entendido, en parte, la logica del programa, porque lo que no entiendo es como hace la funcion convertir para sacar el dia de la semana, de esa funcion la unica linea que entiendo es esta:
Código
aa -= 1900;
Lo que hace es sacar los años que han pasado desde el año 1900 hasta hoy, pero a partir de ahi no entiendo nada de nada y queria pedir a ver si alguien me lo explica de alguna manera mas clara que en libro.