Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

MatheusSilva

Calcular dia da semana determinado ano

Recommended Posts

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

é 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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

É 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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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?

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.