Congruencia de Zeller | Encuentra el día para una cita

La congruencia de Zeller es un algoritmo ideado por Christian Zeller para calcular el día de la semana para cualquier fecha del calendario juliano o gregoriano . Se puede considerar que se basa en la conversión entre el día juliano y la fecha del calendario. 
Es un algoritmo para encontrar el día de la semana para cualquier fecha. 
Para el calendario gregoriano es:  
h=\left ( q + [ \frac{13(m+1)}{5} ]+K +\left [ \frac{K}{4}\right ]+\left [ \frac{J}{4}\right ]+5J\right )mod7
Para el calendario juliano es: 
h=\left ( q + \left [ \frac{13(m+1)}{5} \right ]+K +\left [ \frac{K}{4}\right ]+5-J\right )mod7
donde, 

  1. h es el día de la semana (0 = sábado, 1 = domingo, 2 = lunes, …, 6 = viernes)
  2. q es el dia del mes
  3. m es el mes (3 = marzo, 4 = abril, 5 = mayo, …, 14 = febrero)
  4. K es el año del siglo (año % 100).
  5. J es el siglo de base cero (en realidad ⌊ año/100 ⌋) Por ejemplo, los siglos de base cero para 1995 y 2000 son 19 y 20 respectivamente (que no debe confundirse con la enumeración ordinal común del siglo que indica el 20 en ambos casos) .
NOTE: In this algorithm January and February are
      counted as months 13 and 14 of the previous
      year.E.g. if it is 2 February 2010, the 
      algorithm counts the date as the second day 
      of the fourteenth month of 2009 (02/14/2009 
      in DD/MM/YYYY format)

Para una fecha de la semana ISO Día de la semana d (1 = lunes a 7 = domingo), use  

 d = ((h+5)%7) + 1 

C++

// C++ program to Find the Day
// for a Date
#include <cmath>
#include <cstring>
#include <iostream>
using namespace std;
 
int Zellercongruence(int day, int month, int year)
{
    if (month == 1) {
        month = 13;
        year--;
    }
    if (month == 2) {
        month = 14;
        year--;
    }
    int q = day;
    int m = month;
    int k = year % 100;
    int j = year / 100;
    int h
        = q + 13 * (m + 1) / 5 + k + k / 4 +
                              j / 4 + 5 * j;
    h = h % 7;
    switch (h) {
    case 0:
        cout << "Saturday \n";
        break;
    case 1:
        cout << "Sunday \n";
        break;
    case 2:
        cout << "Monday \n";
        break;
    case 3:
        cout << "Tuesday \n";
        break;
    case 4:
        cout << "Wednesday \n";
        break;
    case 5:
        cout << "Thursday \n";
        break;
    case 6:
        cout << "Friday \n";
        break;
    }
    return 0;
}
 
// Driver code
int main()
{
    Zellercongruence(22, 10, 2017); // date (dd/mm/yyyy)
    return 0;
}

Java

// Java program to  Find the Day
// for a Date
import java.util.*;
 
class GFG
{
    // Print Day for a Date
    static void Zellercongruence(int day, int month,
                                 int year)
    {
        if (month == 1)
        {
            month = 13;
            year--;
        }
        if (month == 2)
        {
            month = 14;
            year--;
        }
        int q = day;
        int m = month;
        int k = year % 100;
        int j = year / 100;
        int h = q + 13*(m + 1) / 5 + k + k / 4 + j / 4 + 5 * j;
        h = h % 7;
        switch (h)
        {
            case 0 : System.out.println("Saturday"); break;
            case 1 : System.out.println("Sunday"); break;
            case 2 : System.out.println("Monday"); break;
            case 3 : System.out.println("Tuesday"); break;
            case 4 : System.out.println("Wednesday"); break;
            case 5 : System.out.println("Thursday"); break;
            case 6 : System.out.println("Friday"); break;
        }
    }
     
    // Driver code
    public static void main(String[] args)
    {
        Zellercongruence(22, 10, 2017); //date (dd/mm/yyyy)
    }
}
 
/* This code is contributed by Mr. Somesh Awasthi */

Python3

# Python3 program to  Find the Day
# for a Date
 
def switch(h) :
    return {
        0 : "Saturday",
        1 : "Sunday",
        2 : "Monday",
        3 : "Tuesday",
        4 : "Wednesday",
        5 : "Thursday",
        6 : "Friday",
    }[h]
 
def Zellercongruence(day, month, year) :
    if (month == 1) :
        month = 13
        year = year - 1
 
    if (month == 2) :
        month = 14
        year = year - 1
    q = day
    m = month
    k = year % 100;
    j = year // 100;
    h = q + 13 * (m + 1) // 5 + k + k // 4 + j // 4 + 5 * j
    h = h % 7
    print(switch (h))
     
     
     
# Driver code
Zellercongruence(22, 10, 2017) #date (dd/mm/yyyy)
 
# This code is contributed by Nikita Tiwari

C#

// C# program to  Find the Day
// for a Date
using System;
 
class GFG {
     
    // Print Day for a Date
    static void Zellercongruence(int day,
                      int month, int year)
    {
        if (month == 1)
        {
            month = 13;
            year--;
        }
        if (month == 2)
        {
            month = 14;
            year--;
        }
        int q = day;
        int m = month;
        int k = year % 100;
        int j = year / 100;
        int h = q + 13 * (m + 1) / 5 + k + k / 4
                                 + j / 4 + 5 * j;
        h = h % 7;
        switch (h)
        {
            case 0 : Console.WriteLine("Saturday");
                     break;
                      
            case 1 : Console.WriteLine("Sunday");
                     break;
                      
            case 2 : Console.WriteLine("Monday");
                     break;
                      
            case 3 : Console.WriteLine("Tuesday");
                     break;
                      
            case 4 : Console.WriteLine("Wednesday");
                     break;
                      
            case 5 : Console.WriteLine("Thursday");
                     break;
                      
            case 6 : Console.WriteLine("Friday");
                     break;
        }
    }
     
    // Driver code
    public static void Main()
    {
         
        //date (dd/mm/yyyy)
        Zellercongruence(22, 10, 2017);
    }
}
 
/* This code is contributed by vt_m */

PHP

<?php
// PHP program to Find the Day
// for a Date
 
function Zellercongruence($day, $month, $year)
{
    if ($month == 1)
    {
        $month = 13;
        $year--;
    }
     
    if ($month == 2)
    {
        $month = 14;
        $year--;
    }
     
        $q = $day;
        $m = $month;
        $k = $year % 100;
        $j = $year / 100;
        $h = $q + 13*($m + 1) / 5 + $k +
               $k / 4 + $j / 4 + 5 * $j;
        $h = $h % 7;
    switch ($h)
    {
        case 1 : echo "Saturday \n";
        break;
        case 2 : echo "Sunday \n";
        break;
        case 3 : echo "Monday \n";
        break;
        case 4 : echo "Tuesday \n";
        break;
        case 5 : echo "Wednesday \n";
        break;
        case 6 : echo "Thursday \n";
        break;
        case 7 : echo "Friday \n";
        break;
    }
}
 
// Driver code
//date (dd/mm/yyyy)
Zellercongruence(22, 10, 2017);
 
// This code is contributed by ajit.
?>

Javascript

<script>
    // Javascript program to Find the Day for a Date
     
    // Print Day for a Date
    function Zellercongruence(day, month, year)
    {
        if (month == 1)
        {
            month = 13;
            year--;
        }
        if (month == 2)
        {
            month = 14;
            year--;
        }
        let q = day;
        let m = month;
        let k = year % 100;
        let j = parseInt(year / 100, 10);
        let h = q + parseInt(13 * (m + 1) / 5, 10) + k + parseInt(k / 4, 10) + parseInt(j / 4, 10) + 5 * j;
        h = h % 7;
        switch (h)
        {
            case 0 :
              document.write("Saturday");
              break;
                       
            case 1 :
                document.write("Sunday");
                break;
                       
            case 2 :
                document.write("Monday");
                break;
                       
            case 3 :
                document.write("Tuesday");
                break;
                       
            case 4 :
                document.write("Wednesday");
                break;
                       
            case 5 :
                document.write("Thursday");
                break;
                       
            case 6 :
                document.write("Friday");
                break;
        }
    }
     
    //date (dd/mm/yyyy)
      Zellercongruence(22, 10, 2017);
     
</script>

Producción: 

Sunday

Este artículo es una contribución de Amartya Ranjan Saikia . Si le gusta GeeksforGeeks y le gustaría contribuir, también puede escribir un artículo usando contribuya.geeksforgeeks.org o envíe su artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente. 

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *