Hola, muy buen día. -
El programa que dejo a continuación logra perfectamente lo que necesito, pero quiero meter todo esto en una función para obtener el día de la semana, nada más que eso y me parecen muchas líneas para lograr tan solo una, alguien tiene algo con menos líneas y que haga lo mismo? .-
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
char *dias [] = {" ", "Lunes", "Martes", "Miercoles", "Jueves", "Viernes", "Sabado", "Domingo"} ;
int main ( int argc, char *argv[ ] ){
struct tm fecha;
int anyo, mes, dia;
printf (" \n año.....: ");
scanf ("%d", &anyo) ;
printf( " Mes......: ");
scanf ("%d", &mes);
printf ( " Dia......: ");
scanf ("%d", &dia) ;
fecha.tm_year = anyo - 1900;
fecha.tm_mon = mes - 1;
fecha.tm_mday = dia;
fecha.tm_hour = 0;
fecha.tm_min = 0;
fecha.tm_sec = 1;
fecha.tm_isdst = -1;
if (mktime (&fecha) == -1){
puts ( " Error en la fecha. " ) ;
exit(-1);
}
if (fecha.tm_wday == 0)
fecha.tm_wday = 7;
printf("\n El %d/%d/%d es %s" , dia, mes, anyo, dias[fecha.tm_wday]);
return EXIT_SUCCESS;
}
Desde ya muchas gracias.
Saludos.
Hay varios algoritmos que solucionan esto de una forma eficaz...
Te señalo, por ejemplo el algoritmo conocido como: "congruencia de Zeller":
Crea un array con los días de la semana:
DiaSemana(0 a 6) = [Domingo, Lunes, Martes, ...]
Este sería el cálculo:
Funcion CalcularDiaSemana(Dia, Mes, Año) string
n = ((14 - Mes) \ 12)
Año = (Año - n)
Mes = (Mes + (12 * n) - 2)
Return DiaSemana(((Dia + Año + (Año \ 4) - (Año \ 100) + (Año \ 400) + ((31 * Mes) \ 12)) Mod 7))
Fin Funcion