Pular para o conteúdo

Algorítimo - Dia da semana

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!

Ezequias Rocha Ezequias Rocha
Hits: 10.342 Categoria: C/C++ Subcategoria: Miscelânea
  • Download
  • Nova versão
  • Indicar
  • Denunciar

Descrição

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!

Download Dia_da_Semana.c Enviar nova versão

Versões atualizadas deste script

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));

}

Agenda

Sequência de Fibonacci em C

Validador de CPF

Teste de desempenho com números primos em C (corrigido)

Jogo da cobrinha (Snake II) refeito em C e C++

#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

Entre na sua conta para comentar.