Algorítimo - Dia da semana

Publicado por Ezequias Rocha (última atualização em 14/07/2011)

[ Hits: 9.849 ]

Download Dia_da_Semana.c

Download Dia_Da_Semana.c (versão 2)




Este algorítimo foi implementado em uma aplicação que, configurado uma dada data, seria necessário mostrar ao usuário o dia da semana. Trata-se de uma aplicação bastante conhecida e, particularmente, este algorítimo, é o mais utilizado.

Todavia, é necessário certas precauções no trato dos números, pois, no momento que o sistema trunca os decimais, erro podem surgir, principalmente nas divisões.

Mostro abaixo uma implementação que usa força bruta para evitar este erro.

Particularidades do algorítimo:

Autor: Christian Zeller (http://en.wikipedia.org/wiki/Christian_Zeller)
Calendário: Gregoriano (http://en.wikipedia.org/wiki/Gregorian_calendar)
Dias da semana: 0 = sábado, 1 = segunda-feira, 2 = terça-feira ...
Meses: janeiro e fevereiro são considerados meses 13 e 14 do ano anterior

Embraces!

  



Versões atualizadas deste script

Versão 2 - Enviado por Ezequias Rocha em 22/02/2011

Changelog: Erro na linha
y = ((mes>12) ? (ano-1) : ano);
Sendo substituída por:
y = ((m>12) ? (ano-1) : ano);

Download Dia_Da_Semana.c


Esconder código-fonte

unsigned char DiaSemana (unsigned char dia, unsigned char mes, unsigned int ano)
{

unsigned int q, m, ret, y;

   m = (mes <3) ? (mes + 12) : mes;
   y = ((mes>12) ? (ano-1) : ano);
   q = (unsigned int)(dia) + (unsigned int)(((m+1)*26)/10) + y +  // Calendário Gregoriano
      (unsigned int)(y/4) + 6*((unsigned int)(y/100)) +(unsigned int)(y/400);
   
   ret = (q % 7);
 
   return ((unsigned char)(ret));

}

Scripts recomendados

Agenda

JokenPo em C

Matrizes em C e C++

Ler N números e ver qual é o maior

Exceções em C através de try-throw-catch


  

Comentários
[1] Comentário enviado por Ezequias Rocha em 22/02/2011 - 08:35h

Ops, erro na linha:
y = ((mes>12) ? (ano-1) : ano);

Substitua por:

y = ((m>12) ? (ano-1) : ano);

Embraces!


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts