Menu ≡
kalendar.beda.cz

Výpočet Velikonoční neděle v různých programovacích jazycích

Algoritmus použitý na stránce Výpočet Velikonoční neděle zpracovaný v různých programovacích jazycích

Program v programovacím jazyce Python:
#!/usr/bin/python
# -*- coding: utf8 -*-

def velikonocniNedele(rok):
     if rok <= 1582:
          return "Gregoriánský kalendář začíná až od roku 1583 !"
          
     zlateCislo = rok % 19 + 1
     julEpakta = 11 * zlateCislo % 30
     stoleti = int(rok / 100) + 1
     slunecniOprava = int(3 * (stoleti - 16) / 4)
     mesicniOprava = int(8 * (stoleti - 15) / 25)
     epakta = (julEpakta - 10 - slunecniOprava + mesicniOprava) % 30
     tmp = epakta
     if epakta == 24 or (epakta == 25 and zlateCislo > 11):
          tmp += 1 
     if tmp < 24:
          pfm = 44 - tmp
     else:
          pfm = 74 - tmp

     gregOprava = 10 + slunecniOprava
     n = rok % 100
     n1 = int(n / 4)
     m = stoleti - 1
     denTydnePfm = (n + n1 - m - gregOprava + pfm) % 7
     velNedele = pfm + 7 - denTydnePfm
     if velNedele < 32:
          return "%d.březen" % velNedele
     else:
          return "%d.duben" % (velNedele - 31)

rok = input("Zadejte rok : ")
print("Velikonoční neděle : " + velikonocniNedele(rok))

Program v programovacím jazyce PHP, ten sice obsahuje funkci pro výpočet Velikonoční neděle, easter_date(), ta však pracuje pouze pro roky 1970 až 2037. Pro větší časové rozpětí je vhodnější používat funkci easter_days() nebo tuto:
function velikonocniNedele($rok) {
    if ($rok <= 1582)
        return false;
        
    $zlateCislo = $rok % 19 + 1;
    $julEpakta = 11 * $zlateCislo % 30;
    $stoleti = (int)($rok / 100) + 1;
    $slunecniOprava = (int)(3 * ($stoleti - 16) / 4);
    $mesicniOprava = (int)(8 * ($stoleti - 15) / 25);
    $epakta = ($julEpakta - 10 - $slunecniOprava + $mesicniOprava) % 30;
    if ($epakta < 0)
        $epakta += 30;
    $tmp = $epakta;
    if ($epakta == 24 || ($epakta == 25 && $zlateCislo > 11))
        $tmp += 1;
    if ($tmp < 24)
        $pfm = 44 - $tmp;
    else
        $pfm = 74 - $tmp;
        
    $gregOprava = 10 + $slunecniOprava;
    $n = $rok % 100;
    $n1 = (int)($n / 4);
    $m = $stoleti - 1;
    $denTydnePfm = ($n + $n1 - $m - $gregOprava + $pfm) % 7;
    if ($denTydnePfm < 0) $denTydnePfm += 7;
    $velNedele = $pfm + 7 - $denTydnePfm;
    if ($velNedele < 32)
        return $velNedele . ".březen";
    else
        return ($velNedele - 31) . ".duben";
}

Opravdoví počítačoví hackeři použijí kompaktnější program:
echo `date +"%Y"` '[ddsf[lfp[Gregoriansky kalendář začíná až od roku 1583 !
]Pq]s@1583>@
ddd19%1+sg100/1+d3*4/12-sx8*5+25/5-sz5*4/lx-10-sdlg11*20+lz+lx-30%
d[30+]s@0>@d[[1+]s@lg11<@]s@25=@d[1+]s@24=@se44le-d[30+]s@21>@dld+7%-7+
[březen ]smd[31-[duben ]sm]s@31<@psnlmPpsn1z>p]splpx' | dc | sed 'N
y/\n/./'

Pokud máte k dispozici program ncal (pro vybrané distribuce Linuxu v balíčku bsdmainutils), máte možnost zjistit datum Velikonoční neděle podstatně jednodušeji (za upozornění děkuji pozornému návštěvníku F.):
$ ncal -e 
March 27 2016

$ ncal -e 1818
March 22 1818
Program ncal toho umí mnohem víc, doporučuji si přečíst manuálové stránky, například zjištění pravoslavné Velikonoční neděle (datum v gregoriánském kalendáři):
$ ncal -o 2015
April 12 2015
A zjištění pravoslavné Velikonoční neděle v juliánském kalendáři:
$ ncal -oJ 2015
March 30 2015
Program zobrazí i datum přechodu na gregoriánský kalendář pro různé země (zobrazuje se poslední juliánský den):
$ ncal -p
 AL Albania        1912-11-30      IT Italy          1582-10-04
 AT Austria        1583-10-05      JP Japan          1918-12-18
 AU Australia      1752-09-02      LI Lithuania      1918-02-01
 BE Belgium        1582-12-14      LN Latin          9999-05-31
 BG Bulgaria       1916-03-18      LU Luxembourg     1582-12-14
 CA Canada         1752-09-02      LV Latvia         1918-02-01
 CH Switzerland    1655-02-28      NL Netherlands    1582-12-14
 CN China          1911-12-18      NO Norway         1700-02-18
 CZ Czech Republic 1584-01-06      PL Poland         1582-10-04
 DE Germany        1700-02-18      PT Portugal       1582-10-04
 DK Denmark        1700-02-18      RO Romania        1919-03-31
 ES Spain          1582-10-04      RU Russia         1918-01-31
 FI Finland        1753-02-17      SI Slovenia       1919-03-04
 FR France         1582-12-09      SW Sweden         1753-02-17
 GB United Kingdom 1752-09-02      TR Turkey         1926-12-18
 GR Greece         1924-03-09     *US United States  1752-09-02
 HU Hungary        1587-10-21      YU Yugoslavia     1919-03-04
 IS Iceland        1700-11-16

Další informace:

Nahoru