La Congruencia de Zeller es un algoritmo que se atribuye al matemático alemán Julius Christian Johannes Zeller que vivió en el siglo XIX.
Este algoritmo nos permite determinar el día de la semana que le corresponde a una fecha determinada del calendario Gregoriano.
La fórmula que nosotros usaremos (con algunas modificaciones respecto de la original para poder usarla en informática) es la siguiente:
Donde h es el día de la semana (entre 0 y 6), J es año/100 (la centuria) y K es año mod 100 (el año de la centuria). Y hay que tener en cuenta que los meses de enero y febrero cuentan como el mes 13 y 14 del año anterior.
Ahora que tenemos la fórmula, programemos el algoritmo en C mediante el uso de una función:
Analicemos el código paso a paso:
Este algoritmo nos permite determinar el día de la semana que le corresponde a una fecha determinada del calendario Gregoriano.
La fórmula que nosotros usaremos (con algunas modificaciones respecto de la original para poder usarla en informática) es la siguiente:
Donde h es el día de la semana (entre 0 y 6), J es año/100 (la centuria) y K es año mod 100 (el año de la centuria). Y hay que tener en cuenta que los meses de enero y febrero cuentan como el mes 13 y 14 del año anterior.
Ahora que tenemos la fórmula, programemos el algoritmo en C mediante el uso de una función:
Analicemos el código paso a paso:
- Tenemos en cuenta el caso de enero y febrero: Dijimos que estos meses corresponden a los meses 13 y 14 del año anterior por lo que los asignamos como corresponde (mes + 12 , que dará 13 para enero y 14 para febrero) y le restamos 1 al año ya que son meses del año anterior. En caso contrario al mes le restamos dos para que marzo sea el mes 1 y así sucesivamente.
- Calculamos K y J: Al momento de escribir la fórmula dijimos que K es año mod 100 y J es año div 100 por lo que realizamos estos dos cálculos.
- Aplicamos la fórmula: Copiamos la fórmula que copiamos al comienzo.
Ahora si quisiéramos que el programa nos muestre por pantalla el día correspondiente al entero entre 0 y 6 que obtuvimos con esta función podríamos simplemente hacer un switch como éste:
Donde dependiendo del entero que nos devolvió la función Zeller, escribe el día correspondiente, teniendo en cuenta que el 0 corresponde al domingo
Luego se llama a las funciones como corresponde dentro del main y tendríamos nuestro programa listo. Para finalizar veamos qué día es hoy según el programa cuando lo ejecutamos:
Y, en efecto, es viernes...
Espero que les haya servido, para los que quieran el código de esta implementación pueden descargarlo desde el siguiente link: descargar zeller.c
Hasta la próxima.
Português:
A congruência de Zeller é um algoritmo atribuído ao matemático alemão Julius Christian Johannes Zeller, que viveu no século XIX.
Esse algoritmo nos permite determinar o dia da semana que corresponde a uma data específica do calendário gregoriano.
A fórmula que usaremos (com algumas modificações em relação ao original a ser usado na computação) é a seguinte:
Onde h é o dia da semana (entre 0 e 6), J é ano / 100 (o século) e K é ano mod 100 (o ano do século). E tenha em mente que os meses de janeiro e fevereiro contam como o 13º e o 14º mês do ano anterior.
Agora que temos a fórmula, programamos o algoritmo em C usando uma função:
Vamos analisar o código passo a passo:
Nós consideramos o caso em janeiro e fevereiro: Dissemos que estes meses correspondem aos meses 13 e 14 no ano passado, de modo que o atribuído em conformidade (mês + 12, que vai dar 13-14 janeiro a fevereiro) e subtrair 1 um ano desde que são meses do ano anterior. Caso contrário, o mês em que subtrairmos dois para março é o mês 1 e assim por diante.
Calculamos K e J: No momento em que escrevemos a fórmula, dissemos que K é o ano mod 100 e J é ano div 100, então realizamos esses dois cálculos.
Aplicamos a fórmula: copiamos a fórmula que copiamos no início.
Agora, se quisermos que o programa nos mostre por tela o dia correspondente ao número inteiro entre 0 e 6 que obtivemos com essa função, poderíamos simplesmente fazer uma troca como esta:
Onde dependendo do inteiro que retornou a função Zeller, escreva o dia correspondente, levando em conta que o 0 corresponde ao domingo
Então as funções são chamadas de acordo no principal e nós teríamos nosso programa pronto. Para terminar vamos ver que dia é hoje de acordo com o programa quando o executamos:
E, de fato, é sexta-feira ...
Espero que você tenha servido, para quem quiser o código desta implementação pode baixá-lo do seguinte link: download zeller.c
Até a próxima.
English:
The Congruence of Zeller is an algorithm that is attributed to the German mathematician Julius Christian Johannes Zeller who lived in the nineteenth century.
This algorithm allows us to determine the day of the week that corresponds to a specific date of the Gregorian calendar.
The formula that we will use (with some modifications with respect to the original to be used in computing) is the following:
Where h is the day of the week (between 0 and 6), J is year / 100 (the century) and K is year mod 100 (the year of the century). And keep in mind that the months of January and February count as the 13th and 14th month of the previous year.
Now that we have the formula, we program the algorithm in C by using a function:
Let's analyze the code step by step:
We take into account the case of January and February: We said that these months correspond to the months 13 and 14 of the previous year so we assigned them accordingly (month + 12, which will give 13 for January and 14 for February) and we subtract 1 a year since they are months of the previous year. Otherwise the month we subtract two for March is month 1 and so on.
We calculate K and J: At the time of writing the formula we said that K is year mod 100 and J is year div 100 so we perform these two calculations.
We apply the formula: Copy the formula that we copied at the beginning.
Now if we want the program to show us by screen the day corresponding to the integer between 0 and 6 that we obtained with this function we could simply make a switch like this:
Where depending on the integer that returned the Zeller function, write the corresponding day, taking into account that the 0 corresponds to Sunday
Then the functions are called accordingly in the main and we would have our program ready. To finish let's see what day it is today according to the program when we execute it:
And, in effect, it's Friday ...
I hope you have served, for those who want the code of this implementation can download it from the following link: download zeller.c
Until next time.
Português:
A congruência de Zeller é um algoritmo atribuído ao matemático alemão Julius Christian Johannes Zeller, que viveu no século XIX.
Esse algoritmo nos permite determinar o dia da semana que corresponde a uma data específica do calendário gregoriano.
A fórmula que usaremos (com algumas modificações em relação ao original a ser usado na computação) é a seguinte:
Onde h é o dia da semana (entre 0 e 6), J é ano / 100 (o século) e K é ano mod 100 (o ano do século). E tenha em mente que os meses de janeiro e fevereiro contam como o 13º e o 14º mês do ano anterior.
Agora que temos a fórmula, programamos o algoritmo em C usando uma função:
Vamos analisar o código passo a passo:
Nós consideramos o caso em janeiro e fevereiro: Dissemos que estes meses correspondem aos meses 13 e 14 no ano passado, de modo que o atribuído em conformidade (mês + 12, que vai dar 13-14 janeiro a fevereiro) e subtrair 1 um ano desde que são meses do ano anterior. Caso contrário, o mês em que subtrairmos dois para março é o mês 1 e assim por diante.
Calculamos K e J: No momento em que escrevemos a fórmula, dissemos que K é o ano mod 100 e J é ano div 100, então realizamos esses dois cálculos.
Aplicamos a fórmula: copiamos a fórmula que copiamos no início.
Agora, se quisermos que o programa nos mostre por tela o dia correspondente ao número inteiro entre 0 e 6 que obtivemos com essa função, poderíamos simplesmente fazer uma troca como esta:
Onde dependendo do inteiro que retornou a função Zeller, escreva o dia correspondente, levando em conta que o 0 corresponde ao domingo
Então as funções são chamadas de acordo no principal e nós teríamos nosso programa pronto. Para terminar vamos ver que dia é hoje de acordo com o programa quando o executamos:
E, de fato, é sexta-feira ...
Espero que você tenha servido, para quem quiser o código desta implementação pode baixá-lo do seguinte link: download zeller.c
Até a próxima.
English:
The Congruence of Zeller is an algorithm that is attributed to the German mathematician Julius Christian Johannes Zeller who lived in the nineteenth century.
This algorithm allows us to determine the day of the week that corresponds to a specific date of the Gregorian calendar.
The formula that we will use (with some modifications with respect to the original to be used in computing) is the following:
Where h is the day of the week (between 0 and 6), J is year / 100 (the century) and K is year mod 100 (the year of the century). And keep in mind that the months of January and February count as the 13th and 14th month of the previous year.
Now that we have the formula, we program the algorithm in C by using a function:
Let's analyze the code step by step:
We take into account the case of January and February: We said that these months correspond to the months 13 and 14 of the previous year so we assigned them accordingly (month + 12, which will give 13 for January and 14 for February) and we subtract 1 a year since they are months of the previous year. Otherwise the month we subtract two for March is month 1 and so on.
We calculate K and J: At the time of writing the formula we said that K is year mod 100 and J is year div 100 so we perform these two calculations.
We apply the formula: Copy the formula that we copied at the beginning.
Now if we want the program to show us by screen the day corresponding to the integer between 0 and 6 that we obtained with this function we could simply make a switch like this:
Where depending on the integer that returned the Zeller function, write the corresponding day, taking into account that the 0 corresponds to Sunday
Then the functions are called accordingly in the main and we would have our program ready. To finish let's see what day it is today according to the program when we execute it:
And, in effect, it's Friday ...
I hope you have served, for those who want the code of this implementation can download it from the following link: download zeller.c
Until next time.
Ese switch no tiene mucho sentido. Un array (de una sola dimensión) hubiera sido una solución más elegante.
ResponderEliminarSi coges un calendario perpetuo y pruebas 01 01 1600....no da la mismo....luego es erroneo
ResponderEliminarCreo que en el caso de Enero Febrero, es mes=mes+10, sino no funciona para estos meses.
ResponderEliminarPara que se suma 700, siendo que eso no afecta en nada al modulo ?
ResponderEliminarlo mismo me pregunto yo, de donde sale ese 700?
ResponderEliminartu código tiene un pequeño fallo en la función que devuelve el dia de la semana ;la variable m para valor 1 y2 se suma con 10,no con 12
ResponderEliminarEl error es que no puso paréntesis en 26*(mes-2). Y si el mes no es febrero ni enero no sé por qué hay que restarle dos al mes. En ese sentido nunca habría mes 11 ni 12. Ya se esta restando en la formula
ResponderEliminar