Algoritmo para Obtener el día de la semana[C]

Iniciado por NOB2014, 25 Mayo 2017, 23:03 PM

0 Miembros y 1 Visitante están viendo este tema.

NOB2014

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.
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-

Serapis

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