Tem um algorítmo que não estou entendo. É do livro do Jaime Evaristo "Aprendendo a Programar Programando em C"
"Tomando como base o ano de 1600, e sabendo que o primeiro dia deste ano foi um sábado, para se determinar o dia da semana de uma data dada basta se calcular o número de dias decorridos entre a data dada e o dia 01/01/1600. Como a associação do dia da semana a uma data é periódica, de período 7, o resto da divisão do número de dias referido acima por 7 indica a relação entre o dia da semana procurado e o sábado: se o resto for 1, o dia da semana é sábado; se o resto for 2 o dia da semana é domingo, e assim sucessivamente.
Para se calcular o número de dias entre uma data dada e 01/01/1600, basta multiplicar o número de anos por 365, acrescentar a quantidade de anos bissextos e o número de dias decorridos no ano corrente:"
/* Algoritmo para determinar o dia da semana entre uma data dada. */
#include <stdio.h>
main()
{
int Dia, Mes, Ano, DiasDoAno, Dias31, AnosBiss;
long int Anos, NumDias;
printf ( "Digite dia, mes e ano: \n" );
scanf ( "%d %d %d", &Dia, &Mes, &Ano );
Anos = Ano - 1600;
/* Número de mêses com 31 dias até o mes dado. */
if ( Mes < 9 )
Dias31 = Mes / 2;
else
Dias31 = ( Mes + 1 ) / 2;
/* Números de dias do ano dado, considerando fevereiro como
* tendo 30 dias. */
DiasDoAno = 30 * ( Mes - 1 ) + Dia + Dias31;
/* Retifica o número de dias de fevereiro */
if ( Mes >= 2 )
if ( ( Ano % 4 != 0 ) || ( ( Ano % 100 == 0 ) && ( Ano % 400 != 0 ) ) ) /*aqui faltava o if */
DiasDoAno = DiasDoAno - 2;
else
DiasDoAno = DiasDoAno - 1;
/* Número de anos bissextos entre o ano dado e 1600 */
AnosBiss = Ano / 4 - 400 - ( Ano / 100 - 16 ) + ( Ano / 400 - 4 ) + 1;
/* Número de dias entre a dara dada e 01/01/1600. */
if ( Ano == 1600 )
NumDias = DiasDoAno;
else
NumDias = Anos * 365 + DiasDoAno + AnosBiss;
/* Dia da semana. */
switch ( NumDias % 7 )
{
case 1 : printf ( "\n Sábado." ); break;
case 2 : printf ( "\n Domingo." ); break;
case 3 : printf ( "\n Segunda." ); break;
case 4 : printf ( "\n Terça." ); break;
case 5 : printf ( "\n Quarta." ); break;
case 6 : printf ( "\n Quinta." ); break;
case 7 : printf ( "\n Sexta." ); break;
}
}
Pergunta
{Nando}
Tem um algorítmo que não estou entendo. É do livro do Jaime Evaristo "Aprendendo a Programar Programando em C"
"Tomando como base o ano de 1600, e sabendo que o primeiro dia deste ano foi um sábado, para se determinar o dia da semana de uma data dada basta se calcular o número de dias decorridos entre a data dada e o dia 01/01/1600. Como a associação do dia da semana a uma data é periódica, de período 7, o resto da divisão do número de dias referido acima por 7 indica a relação entre o dia da semana procurado e o sábado: se o resto for 1, o dia da semana é sábado; se o resto for 2 o dia da semana é domingo, e assim sucessivamente.
Para se calcular o número de dias entre uma data dada e 01/01/1600, basta multiplicar o número de anos por 365, acrescentar a quantidade de anos bissextos e o número de dias decorridos no ano corrente:"
Aqui está o paste. (sintax colorida)
pastebin
Bom, aprincípio não estou entendeno a parte /* Número de mêses com 31 dias até o mes dado. */ e a parte
/* Número de anos bissextos entre o ano dado e 1600 */.
Edit: estava faltando um if
Editado por {Nando}Link para o comentário
Compartilhar em outros sites
1 resposta a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.