DESCOBRIR DIA DO PRIMEIRO DE JANEIRO A PARTIR DA PÁSCOA

1. DESCOBRIR DIA DO PRIMEIRO DE JANEIRO A PARTIR DA PÁSCOA

Armando Moscowitz
armandogaroinha

(usa Ubuntu)

Enviado em 22/05/2015 - 19:42h

Olá, eu preciso fazer um código em C que descubra o dia da semana que cairá primeiro de Janeiro. Entretanto, não consigo atingir meu objetivo. Alguém aí pode me ajudar?
Meu código até agora:

#include <stdio.h>
#include <stdlib.h>

int main() {
int ano, y, g, c, x, z, e, n, d, primeirojaneiro, nabril, subtratorabril, ia;
char v[119];
printf("Insira o ano\n");
scanf("%d", &y);
ano = y;

//verifica se o ano é bissexto:
if (ano%100 == 0)
ano = (ano/100);

if (ano%4 == 0){
printf("O ano é bissexto \n");
}
if (ano%4 != 0){
printf("O ano não é bissexto \n");
}

g = ((y%19)+1); //cálculo do número áureo
c = ((y/100)+1); //cálculo do século
x = (((3*c)/4)-12); //fator de correção 1
z = ((((8*c)+5)/25)-5); //fator de correção 2
e = ((((11*g)+20+z)-x)%30); //cálculo do epacta

if((e == 25)&&(g > 11))
e = (e+1);
if(e == 24)
e = (e+1);

n = (44 - e); //lua cheia
if (n < 21)
n = (n + 30);

d = (((5*y)/4)-(x + 10)); //domingo de páscoa
//dia e mês da páscoa:
n = ((n+7) - ((d + n)%7));
if (n > 31)
printf("A páscoa será dia %d de abril\n", n-31);

if (n <= 31)
printf("A páscoa será dia %d de março \n", n);

nabril = n - 31;
subtratorabril = nabril - 30;
ia = 119 - subtratorabril; //119 é número de dias que faltam para 1 de janeiro em 30 de abril
if (ano%4 != 0){
if (n > 31){
for(v[ia]; v[ia]>0; v[ia-7]){
v[ia] = 'd'; //domingo;
v[ia-1] = 's'; //sábado;
v[ia-2] = 'x'; //sexta-feira;
v[ia-3] = 'q'; //quinta-feira;
v[ia-4] = 'u'; //quarta-feira;
v[ia-5] = 't'; //terça-feira;
v[ia-6] = 's'; //segunda-feira;
}
}
}
printf("Primeiro de janeiro será %c \n", v[1]);

return 0;
}



  


2. Re: DESCOBRIR DIA DO PRIMEIRO DE JANEIRO A PARTIR DA PÁSCOA

Paulo
paulo1205

(usa Ubuntu)

Enviado em 23/05/2015 - 00:15h

Assim que você calcula n, já pode calcular quando caiu primeiro de janeiro.

O último dia de fevereiro é o 59º (ou 60º, em anos bissextos -- aliás, eu não vi você usar a informação de ano bissexto de modo apropriado no seu programa) dia do ano. O n que você calcula é necessariamente um domingo, e é um offset em relação ao último dia de fevereiro (n=1 (que nunca vai ocorrer, mas é só para ilustrar) é 1º de março, que é 1 dia depois do último dia de fevereiro; n=32 é 1º de abril, que é 32 dias depois do último dia de fevereiro). Você pode levar essa informação se quiser saber a distância entre 1º de janeiro e o dia da Páscoa (distancia=n+(bissexto? 60: 59)-1, ou simplesmente distancia=n+(bissexto? 59: 58).

Tendo a distância, você pode fazer algumas operações de módulo (lembre que o operador % do C e do C++ não calcula módulo, mas sim resto, o que é diferente, especialmente quando você trabalha com números negativos -- o que até seria interessante para você) para saber em que dia da semana caiu o primeiro dia do ano.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts