fbpx
Wikipedia

Congruencia de Zeller

La congruencia de Zeller es un algoritmo ideado por Julius Christian Johannes Zeller para calcular el día de la semana de cualquier fecha del calendario.[cita requerida]

Fórmula

Para el calendario gregoriano la congruencia de Zeller es:

 

para el calendario juliano es:

 

donde:

  representa la función de parte entera de redondeo.

  es la operación módulo que extrae el residuo de la división entre dos números.

  es el día de la semana (0 = sábado, 1 = domingo, 2 = lunes, 3 = martes, 4 = miércoles, 5 = jueves, 6 = viernes).

  es el día del mes.

  es el mes (3=marzo, 4=abril,  , 13=enero, 14=febrero). Enero y febrero se cuentan como los meses 13 y 14 del año anterior. Es decir, que, en el caso del 2 de enero de 2013,  13 y el año es 2012.

  es la centuria. Es el redondeo inferior de la fracción  .

  el año de la centuria. Se calcula como  .

En las implementaciones informáticas en las cuales el módulo de un número negativo es negativo, la manera más sencilla de obtener un resultado entre 0 y 6 es reemplazar   por +  y   por  .

Implementación en software

Las fórmulas se basan en la definición matemática de división de módulo, lo que significa que   es igual a 5 positivo. Desafortunadamente, la mayoría de los lenguajes de computadora implementan la función de residuo, en forma tal que   devuelve un resultado de -2. Entonces, para implementar la congruencia de Zeller en una computadora, las fórmulas deben modificarse ligeramente para asegurar un numerador positivo. La forma más sencilla de hacerlo es reemplazar   por   y   por  . Entonces, las fórmulas se transforman así:

 

para el calendario gregoriano, y:

 

para el calendario juliano.

Uno puede ver fácilmente que, en un año determinado, el 1 de marzo (si es un sábado, luego el 2 de marzo) es una buena fecha de prueba y que, en un siglo dado, el mejor año de prueba es aquel que sea un múltiplo de 100. Zeller usó la aritmética decimal, y encontró conveniente usar   y   para representar el año. Pero cuando se usa una computadora, es más sencillo manejar el año modificado  , que es   durante enero y febrero:

 

para el calendario gregoriano (en este caso no hay posibilidad de desbordamiento porque  ), y

 

para el calendario Juliano.

Análisis

Estas fórmulas se basan en la observación de que el día de la semana progresa de una manera predecible basada en cada subparte de esa fecha. Cada término de la fórmula se usa para calcular el desplazamiento necesario para obtener el día correcto de la semana.

Por tanto, para el calendario gregoriano, las diversas partes de esta fórmula pueden entenderse así:

  •   representa la progresión del día de la semana basada en el día del mes, dado que cada día sucesivo resulta en un desplazamiento adicional de 1 en el día de la semana.
  •   representa la progresión del día de la semana basada en el año. Suponiendo que cada año tiene 365 días, la misma fecha de cada año sucesivo será desplazada por un valor de  .
  • Como hay 366 días en cada año bisiesto, esto de debe tener en cuenta añadiendo un día adicional al valor de desplazamiento del día de la semana. Esto se logra añadiendo   al desplazamiento. Este término se calcula como un resultado entero. Cualquier resto que pueda haber es descartado.
  • Usando una lógica similar, se puede calcular la progresión del día de la semana para cada centuria observando que hay 36524 días en una centuria normal, y 36525 en cada centuria divisible por 400. Dado que   y  , el término:   refleja esto (de nuevo usando división entera y descartando cualquier resto fraccional). Para evitar los números negativos, este término se puede reemplazar por   con un resultado equivalente.
  • El término   se puede explicar de la siguiente manera. Zeller observó que, al iniciar cada año el 1 de marzo, el día de la semana de cada mes sucesivo progresaba multiplicando el mes por un valor constante y descartando el resto fraccional.
  • La función global,  , normaliza el resultado para que se encuentre en el intervalo de 0 a 6, lo que da el índice del día de la semana correcto para la fecha analizada.

La razón por la que la fórmula difiere para el calendario juliano es que este calendario no tiene una regla aparte para las centurias bisiestas y está desplazado con respecto al calendario gregoriano un número fijo de días. Ambas diferencias se pueden tener en cuenta reemplazando el término   por el término  , o   para evitar números negativos.

Dado que el calendario gregoriano fue adoptado en diferentes momentos en diferentes partes del mundo, la ubicación de un evento es significativa a la hora de determinar el día de la semana correcto de una fecha que tuvo lugar durante este periodo de transición.

Algoritmo

Algoritmo Z(y, m, d) Entrada: El año y, mes m (1 ≤ m ≤ 12) y día d (1 ≤ d ≤ 31). Salida: El día de la semana. t ← (0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4) n ← (domingo, lunes, martes, miércoles, jueves, viernes, sábado) if m < 3 yy - 1 w ← (y + ⌊y/4⌋ - ⌊y/100⌋ + ⌊y/400⌋ + tm-1 + d) mod 7 devolver nw

Una forma más fácil de ver el mismo desarrollo es la siguiente

a = (14 - Mes) / 12 y = Año - a m = Mes + 12 * a - 2 Para el calendario Juliano: d = (5 + dia + y + y/4 + (31*m)/12) mod 7 Para el calendario Gregoriano: d = (día + y + y/4 - y/100 + y/400 + (31*m)/12) mod 7 El resultado es un cero (0) para el domingo, 1 para el lunes… 6 para el sábado --------------------------------------------------------------- Ejemplo, ¿En qué día de la semana cae el 2 de agosto de 1953?? ' a = (14 - 8) / 12 = 0 ' y = 1953 - 0 = 1953 ' m = 8 + 12 * 0 - 2 = 6 ' d = (2 + 1953 + 1953 / 4 - 1953 / 100 + 1953 / 400 + (31 * 6) / 12) Mod 7 ' = (2 + 1953 + 488 - 19 + 4 + 15 ) mod 7 ' = 2443 mod 7 ' = 0 ' El valor cero(0) corresponde al domingo. 

La norma ISO 8601:2004

La norma ISO 8601:2004, en su apartado 3.2.2 define el código de los días de la semana así como los nombres de los días de la semana (evidentemente están en inglés) pero lo que interesa resaltar es que la numeración que propone el estándar no coincide con la numeración que proporciona el algoritmo de Zeller (y por tanto, la función [DayOfWeek]) la diferencia está en la forma de contar, el algoritmo de Zeller proporciona valores del 0 (domingo) 1 lunes… hasta al 6(sábado), mientras que la norma ISO 8601, dice que los valores van desde el 1 lunes al 7 domingo.

Véase también

Referencias

  • Paul E. Black, Zeller's congruence en el Diccionario de algoritmos y estructuras de datos del NIST.
  • Christian Zeller, "Kalender-Formeln", Acta Mathematica 9 (1886) 131-6.
  • Wenceslao Segura, Teorema de congruencia de Zeller, en viXra.org

Enlaces externos

  • The Calendrical Works of Rektor Chr. Zeller: The Day-of-Week and Easter Formulae el 29 de julio de 2013 en Wayback Machine.
  • Algoritmo de Zeller y prueba interactiva
  • En qué día de la semana naciste
  • Código en JavaScript para calcular el día de la semana
  •   Datos: Q2140717
  •   Multimedia: Perpetual calendars

congruencia, zeller, congruencia, zeller, algoritmo, ideado, julius, christian, johannes, zeller, para, calcular, día, semana, cualquier, fecha, calendario, cita, requerida, Índice, fórmula, implementación, software, análisis, algoritmo, norma, 8601, 2004, véa. La congruencia de Zeller es un algoritmo ideado por Julius Christian Johannes Zeller para calcular el dia de la semana de cualquier fecha del calendario cita requerida Indice 1 Formula 1 1 Implementacion en software 2 Analisis 3 Algoritmo 4 La norma ISO 8601 2004 5 Vease tambien 6 Referencias 7 Enlaces externosFormula EditarPara el calendario gregoriano la congruencia de Zeller es h q m 1 26 10 K K 4 J 4 2 J mod 7 displaystyle h left q left lfloor frac m 1 26 10 right rfloor K left lfloor frac K 4 right rfloor left lfloor frac J 4 right rfloor 2J right mod 7 para el calendario juliano es h q m 1 26 10 K K 4 5 J mod 7 displaystyle h left q left lfloor frac m 1 26 10 right rfloor K left lfloor frac K 4 right rfloor 5 J right mod 7 donde x displaystyle lfloor x rfloor representa la funcion de parte entera de redondeo m o d displaystyle mod es la operacion modulo que extrae el residuo de la division entre dos numeros h displaystyle h es el dia de la semana 0 sabado 1 domingo 2 lunes 3 martes 4 miercoles 5 jueves 6 viernes q displaystyle q es el dia del mes m displaystyle m es el mes 3 marzo 4 abril displaystyle dots 13 enero 14 febrero Enero y febrero se cuentan como los meses 13 y 14 del ano anterior Es decir que en el caso del 2 de enero de 2013 m displaystyle m 13 y el ano es 2012 J displaystyle J es la centuria Es el redondeo inferior de la fraccion a n o 100 displaystyle a tilde n o over 100 K displaystyle K el ano de la centuria Se calcula como a n o mod 100 displaystyle a tilde n o mbox mod 100 En las implementaciones informaticas en las cuales el modulo de un numero negativo es negativo la manera mas sencilla de obtener un resultado entre 0 y 6 es reemplazar 2 J displaystyle 2J por 5 J displaystyle 5J y J displaystyle J por 6 J displaystyle 6J Implementacion en software Editar Las formulas se basan en la definicion matematica de division de modulo lo que significa que 2 m o d 7 displaystyle 2 mod 7 es igual a 5 positivo Desafortunadamente la mayoria de los lenguajes de computadora implementan la funcion de residuo en forma tal que 2 m o d 7 displaystyle 2 mod 7 devuelve un resultado de 2 Entonces para implementar la congruencia de Zeller en una computadora las formulas deben modificarse ligeramente para asegurar un numerador positivo La forma mas sencilla de hacerlo es reemplazar 2 J displaystyle 2J por 5 J displaystyle 5J y J displaystyle J por 6 J displaystyle 6J Entonces las formulas se transforman asi h q 13 m 1 5 K K 4 J 4 5 J mod 7 displaystyle h left q left lfloor frac 13 m 1 5 right rfloor K left lfloor frac K 4 right rfloor left lfloor frac J 4 right rfloor 5J right bmod 7 para el calendario gregoriano y h q 13 m 1 5 K K 4 5 6 J mod 7 displaystyle h left q left lfloor frac 13 m 1 5 right rfloor K left lfloor frac K 4 right rfloor 5 6J right bmod 7 para el calendario juliano Uno puede ver facilmente que en un ano determinado el 1 de marzo si es un sabado luego el 2 de marzo es una buena fecha de prueba y que en un siglo dado el mejor ano de prueba es aquel que sea un multiplo de 100 Zeller uso la aritmetica decimal y encontro conveniente usar J displaystyle J y K displaystyle K para representar el ano Pero cuando se usa una computadora es mas sencillo manejar el ano modificado Y displaystyle Y que es Y 1 displaystyle Y 1 durante enero y febrero h q 13 m 1 5 Y Y 4 Y 100 Y 400 mod 7 displaystyle h left q left lfloor frac 13 m 1 5 right rfloor Y left lfloor frac Y 4 right rfloor left lfloor frac Y 100 right rfloor left lfloor frac Y 400 right rfloor right bmod 7 para el calendario gregoriano en este caso no hay posibilidad de desbordamiento porque Y 4 Y 100 displaystyle left lfloor Y 4 right rfloor geq left lfloor Y 100 right rfloor y h q 13 m 1 5 Y Y 4 5 mod 7 displaystyle h left q left lfloor frac 13 m 1 5 right rfloor Y left lfloor frac Y 4 right rfloor 5 right bmod 7 para el calendario Juliano Analisis EditarEstas formulas se basan en la observacion de que el dia de la semana progresa de una manera predecible basada en cada subparte de esa fecha Cada termino de la formula se usa para calcular el desplazamiento necesario para obtener el dia correcto de la semana Por tanto para el calendario gregoriano las diversas partes de esta formula pueden entenderse asi q displaystyle q representa la progresion del dia de la semana basada en el dia del mes dado que cada dia sucesivo resulta en un desplazamiento adicional de 1 en el dia de la semana K displaystyle K representa la progresion del dia de la semana basada en el ano Suponiendo que cada ano tiene 365 dias la misma fecha de cada ano sucesivo sera desplazada por un valor de 365 mod 7 1 displaystyle 365 mod 7 1 Como hay 366 dias en cada ano bisiesto esto de debe tener en cuenta anadiendo un dia adicional al valor de desplazamiento del dia de la semana Esto se logra anadiendo K 4 displaystyle left lfloor frac K 4 right rfloor al desplazamiento Este termino se calcula como un resultado entero Cualquier resto que pueda haber es descartado Usando una logica similar se puede calcular la progresion del dia de la semana para cada centuria observando que hay 36524 dias en una centuria normal y 36525 en cada centuria divisible por 400 Dado que 36525 mod 7 6 displaystyle 36525 mod 7 6 y 36524 mod 7 5 displaystyle 36524 mod 7 5 el termino J 4 2 J displaystyle left lfloor frac J 4 right rfloor 2J refleja esto de nuevo usando division entera y descartando cualquier resto fraccional Para evitar los numeros negativos este termino se puede reemplazar por 5 J J 4 displaystyle 5J left lfloor frac J 4 right rfloor con un resultado equivalente El termino m 1 26 10 displaystyle left lfloor frac m 1 26 10 right rfloor se puede explicar de la siguiente manera Zeller observo que al iniciar cada ano el 1 de marzo el dia de la semana de cada mes sucesivo progresaba multiplicando el mes por un valor constante y descartando el resto fraccional La funcion global mod 7 displaystyle mod 7 normaliza el resultado para que se encuentre en el intervalo de 0 a 6 lo que da el indice del dia de la semana correcto para la fecha analizada La razon por la que la formula difiere para el calendario juliano es que este calendario no tiene una regla aparte para las centurias bisiestas y esta desplazado con respecto al calendario gregoriano un numero fijo de dias Ambas diferencias se pueden tener en cuenta reemplazando el termino J 4 2 J displaystyle left lfloor frac J 4 right rfloor 2J por el termino 5 J displaystyle 5 J o 5 6 J displaystyle 5 6J para evitar numeros negativos Dado que el calendario gregoriano fue adoptado en diferentes momentos en diferentes partes del mundo la ubicacion de un evento es significativa a la hora de determinar el dia de la semana correcto de una fecha que tuvo lugar durante este periodo de transicion Algoritmo EditarAlgoritmo Z y m d Entrada El ano y mes m 1 m 12 y dia d 1 d 31 Salida El dia de la semana t 0 3 2 5 0 3 5 1 4 6 2 4 n domingo lunes martes miercoles jueves viernes sabado if m lt 3 y y 1 w y y 4 y 100 y 400 tm 1 d mod 7 devolver nw Una forma mas facil de ver el mismo desarrollo es la siguiente a 14 Mes 12 y Ano a m Mes 12 a 2 Para el calendario Juliano d 5 dia y y 4 31 m 12 mod 7 Para el calendario Gregoriano d dia y y 4 y 100 y 400 31 m 12 mod 7 El resultado es un cero 0 para el domingo 1 para el lunes 6 para el sabado Ejemplo En que dia de la semana cae el 2 de agosto de 1953 a 14 8 12 0 y 1953 0 1953 m 8 12 0 2 6 d 2 1953 1953 4 1953 100 1953 400 31 6 12 Mod 7 2 1953 488 19 4 15 mod 7 2443 mod 7 0 El valor cero 0 corresponde al domingo La norma ISO 8601 2004 EditarLa norma ISO 8601 2004 en su apartado 3 2 2 define el codigo de los dias de la semana asi como los nombres de los dias de la semana evidentemente estan en ingles pero lo que interesa resaltar es que la numeracion que propone el estandar no coincide con la numeracion que proporciona el algoritmo de Zeller y por tanto la funcion DayOfWeek la diferencia esta en la forma de contar el algoritmo de Zeller proporciona valores del 0 domingo 1 lunes hasta al 6 sabado mientras que la norma ISO 8601 dice que los valores van desde el 1 lunes al 7 domingo Vease tambien EditarRegla del fin del mundoReferencias EditarPaul E Black Zeller s congruence en el Diccionario de algoritmos y estructuras de datos del NIST Christian Zeller Kalender Formeln Acta Mathematica 9 1886 131 6 Wenceslao Segura Teorema de congruencia de Zeller en viXra orgEnlaces externos EditarThe Calendrical Works of Rektor Chr Zeller The Day of Week and Easter Formulae Archivado el 29 de julio de 2013 en Wayback Machine Algoritmo de Zeller y prueba interactiva En que dia de la semana naciste Codigo en JavaScript para calcular el dia de la semana Datos Q2140717 Multimedia Perpetual calendarsObtenido de https es wikipedia org w index php title Congruencia de Zeller amp oldid 134038562, wikipedia, wiki, leyendo, leer, libro, biblioteca,

español

, española, descargar, gratis, descargar gratis, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, imagen, música, canción, película, libro, juego, juegos