Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
ola, estou com um problema, precisa saber como calcular que dia da semana caiu dia 01/01/Y, onde y é o ano passado pelo usuario do programa.
Preciso saber disso, apartir do dia da pascoa, onde tenho o codigo já feito.
Tambem tenho que montar um calendario mas nao faço a minima ideia de como calcular quando caiu tal dia da semana.
obrigado.
codigo já feito até agora:
#include <stdio.h>
int main(){
int i, bissexto, ano, y, g, c, x, z, e, n, d, dia, DiaPascoaAbril, DiaPascoaMarco, DiasFevereiro, DiasMes, mes, meses, DiaSemana;
y=0;
g=0;
c=0;
x=0;
z=0;
e=0;
n=0;
d=0;
dia=0;
abril = 0;
// char janeiro, fevereiro, marco, abril, maio, junho, julho, agosto, setembro, outubro, novembro, dezembro;
//ano bissexto = 1, nao bissexto = 0;
bissexto = 0;
//recebe o ano
scanf("%d", &y);
//Calcula se o ano é bissexto
if((y%100) == 0){
bissexto = 0;
}else if((y%4) == 0){
bissexto = 1;
}
//Fim ano bissexto
/*----------Inicio calculo da pascoa------------*/
//calcula numero aureo
g = (y % 19)+1;
//seculo
c = (y/100)+1;
//calcula as correcoes
x = ((3*c)/4)-12;
z = (((8*c)+5)/25)-5;
//epacta
e = ((11*g)+ 20 + z - x)%30;
if((e == 25 && g > 11) || (e == 24)){
e++;
}
//calcular lua cheia
n = (44-e);
n = (n<21) ? n = n+30 : n;
//calcula domingo
d = ((5*y)/4)-(x+10);
//calcula o mes
n = (n+7)-((d+n)%7);
DiaPascoaAbril = (n>31)? (n-31) : n;
DiaPascoaMarco = n;
mes = (n > 31) ? 4 : 3;
/* if(n>31){
printf("Pascoa: %d de abril de %d", (n-31), y);
}else{
printf("Pascoa: %d de marco de %d", n, y);
}*/
/*--------------Fim Calculo Da Pascoa ----------------*/
DiasFevereiro = (bissexto == 1) ? 29 : 28;
switch(mes){
case 1:
DiasMes = 31;
break;
case 2:
DiasMes = DiasFevereiro;
break;
case 3:
DiasMes = 31;
break;
case 4:
DiasMes = 30;
break;
case 5:
DiasMes = 31;
break;
case 6:
DiasMes = 30;
break;
case 7:
DiasMes = 31;
break;
case 8;
DiasMes = 31;
break;
case 9:
DiasMes = 30;
break;
case 10:
DiasMes = 31;
break;
case 11:
DiasMes = 30;
break;
case 12:
DiasMes = 31;
break;
}
system("pause");
return 0;
}é que é o seguinte, preciso fazer assim:
Achar a data da pascoa.
Sei que cai no domingo, e apartir dela eu preciso desenvolver até achar o dia 01/01 do ano passado pelo usuario.
Depois disso, preciso montar um calendario desse ano passado pelo usuario.
o codigo da pascoa é esse:
//Onde Y é o ano passado pelo usuario
//calcula numero aureo
g = (y % 19)+1;
//seculo
c = (y/100)+1;
//calcula as correcoes
x = ((3*c)/4)-12;
z = (((8*c)+5)/25)-5;
//epacta
e = ((11*g)+ 20 + z - x)%30;
if((e == 25 && g > 11) || (e == 24)){
e++;
}
//calcular lua cheia
n = (44-e);
n = (n<21) ? n = n+30 : n;
//calcula domingo
d = ((5*y)/4)-(x+10);
n = (n+7)-((d+n)%7);
if(n>31){
DiaPascoaAbril = (n-31);
printf("Pascoa: %d de abril de %d", (n-31), y);
}else{
DiaPascoaMarco = n;
printf("Pascoa: %d de marco de %d", n, y);
}
eu sei que o N, que vai ser X dias a + que o dia 01/03, ou seja, se N = 45, a data da pascoa será 15 dias a mais que o dia 31/03, e assim sucessivamente.
Eu posso fazer um for, e ir decrementando esse N, mas nao sei como fazer.
obrigado.
É trabalho acadêmico? Tem restrições para uso da biblioteca "time.h"?
Se não tiver, basta usar o meu código como exemplo e buscar o dia da semana para todos os dias do ano. A partir daí, é só montar o layout do calendário.
Além disso, faltou seu código tratar os anos múltiplos de 400, que são anos bissexto.
sim, tem restrição de uso de biblioteca time.h
para calculo do ano bissexto é esse, e esta na parte de cima.
//Calcula se o ano é bissexto if((y0) == 0){ bissexto = 0; }else if((y%4) == 0){ bissexto = 1; } //Fim ano bissexto
ngm?
Coincidência. Hoje mesmo montei um código pra retornar o dia da semana.
Talvez te ajude: http://pastebin.com/ePQbEyig