Avatar
mudonja
Člen
Avatar
mudonja:

Zdravím chtěl bych poradit jak mám udělat program v c# na výpočet data velikonoc, takže když uživatel zadá rok tak by se mu tam měl objevit den. Jelikož je to pohyblivý svátek tak vůbec netuším jak to udělat :) stačilo by mi to nějak vysvětlit. :D Díky za odpověd

 
Odpovědět 20.11.2012 16:34
Avatar
Petr Nymsa
Redaktor
Avatar
Nahoru Odpovědět  +1 20.11.2012 18:04
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
mudonja
Člen
Avatar
mudonja:

No to už sem si četl ale pořád to nechápu.
a = rok mod 19 (pozn.: po 19 letech se měsíční cyklus opakuje ve stejné dny)
nevím co je to MOD, a vím že si musím udělat spoustu proměných potom ty vzorce a nakonec nějaké ty podmínky.

 
Nahoru Odpovědět 21.11.2012 9:26
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na mudonja
David Čápka:

MOD je zbytek po celočíselném dělení, v céčkových jazycích se místo něj používá znak procenta %.

Editováno 21.11.2012 9:46
Nahoru Odpovědět  +1 21.11.2012 9:45
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Petr Nymsa
Redaktor
Avatar
Odpovídá na mudonja
Petr Nymsa:

Proč spoustu proměnných ?

Nahoru Odpovědět 21.11.2012 9:49
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
mudonja
Člen
Avatar
mudonja:

no takhle by nějak mohl vypadat ten výpočet, co vy na to?
int a = Y % 19;
int b = Y / 100;
int c = Y % 100;
int d = b / 4;
int e = b % 4;
int f = (b + 8) / 25;
int g = (b - f + 1) / 3;
int h = (19 * a + b - d - g + 15) % 30;
int i = c / 4;
int k = c % 4;
int L = (32 + 2 * e + 2 * i - h - k) % 7;
int m = (a + 11 * h + 22 * L) / 451;
int mesic = (h + L - 7 * m + 114) / 31;
int den = ((h + L - 7 * m + 114) % 31) + 1;

Editováno 22.11.2012 20:08
 
Nahoru Odpovědět 22.11.2012 20:07
Avatar
matesax
Redaktor
Avatar
Odpovídá na mudonja
matesax:

Nikdy! :) Tagy Code? :)

public DateTime EasterDate(int year)
{
    int month = 3,
        golden = year % 19 + 1,
        century = year / 100 + 1,
        X = (3 * century) / 4 - 12,
        Y = (8 * century + 5) / 25 - 5,
        sunday = (5 * year) / 4 - X - 10,
        epact = (11 * golden + 20 + Y - X) % 30;

    epact += (epact == 24) ? 1 : ((epact == 25) && (golden > 11)) ? 2 : 0;

    int n = 44 - epact;

    if (n < 21) { n = n + 30; }

    int p = (n + 7) - ((sunday + n) % 7);

    if (p > 31)
    {
        p -= 31;
        month = 4;
    }

    return new DateTime(year, month, p);
}
Editováno 22.11.2012 20:25
 
Nahoru Odpovědět 22.11.2012 20:22
Avatar
matesax
Redaktor
Avatar
matesax:

Achjo - no jo - omlouvám se... :[

public DateTime EasterDate(int year)
{
    int month = 3,
        golden = year % 19 + 1,
        century = year / 100 + 1,
        X = (3 * century) / 4 - 12,
        Y = (8 * century + 5) / 25 - 5,
        sunday = (5 * year) / 4 - X - 10,
        epact = (11 * golden + 20 + Y - X) % 30;

    if (epact == 24) { epact++; }

    if ((epact == 25) && (golden > 11)) { epact++; }

    int n = 44 - epact;

    if (n < 21) { n = n + 30; }

    int p = (n + 7) - ((sunday + n) % 7);

    if (p > 31)
    {
        p -= 31;
        month = 4;
    }

    return new DateTime(year, month, p);
}
 
Nahoru Odpovědět 22.11.2012 20:26
Avatar
mudonja
Člen
Avatar
mudonja:

No to už sem na netu našel taky :)jinak díky za snahu, ale zapoměl sem zmínit, že to nesmím použít v dateTime, proto vůbec nevím s programováním začínám :)

 
Nahoru Odpovědět 22.11.2012 20:35
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na mudonja
David Čápka:

Proměnné by se měly jmenovat podle toho, co uchovávají. Ta abeceda co jsi tam vyjmenoval není nejlepší nápad.

Nahoru Odpovědět 24.11.2012 11:08
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 10.