Ocena użytkownikóww: ***** / 4
Nadesłany przez Tomasz Lubiński, 19 lutego 2008 01:00
Kod przedstawiony poniżej przedstawia główną część rozwiązania problemu.
Pobierz pełne rozwiązanie.Jeżeli nie odpowiada Ci sposób formatowania kodu przez autora skorzystaj z pretty printer'a i dostosuj go automatycznie do siebie.
Wielkanoc.java:
// Obliczanie daty wielkanocy - algorytm Gaussa
// www.algorytm.org
// (c) 2008 by Tomasz Lubinski
public class Wielkanoc {
/* Pobierz wartosc A z tabeli lat */
private static int getA(int rok)
{
if (rok <= 1582)
{
return 15;
}
if (rok <= 1699)
{
return 22;
}
if (rok <= 1899)
{
return 23;
}
if (rok <= 2199)
{
return 24;
}
if (rok <= 2299)
{
return 25;
}
if (rok <= 2399)
{
return 26;
}
if (rok <= 2499)
{
return 25;
}
return 0; /* poza zakresem */
}
/* Pobierz wartosc B z tabeli lat */
private static int getB(int rok)
{
if (rok <= 1582)
{
return 6;
}
if (rok <= 1699)
{
return 2;
}
if (rok <= 1799)
{
return 3;
}
if (rok <= 1899)
{
return 4;
}
if (rok <= 2099)
{
return 5;
}
if (rok <= 2199)
{
return 6;
}
if (rok <= 2299)
{
return 0;
}
if (rok <= 2499)
{
return 1;
}
return 0; /* poza zakresem */
}
/* oblicz ile dni po 22 marca przypada wielkanoc */
public static int wielkanoc(int rok)
{
int a, b, c, d, e;
a = rok % 19;
b = rok % 4;
c = rok % 7;
d = (a*19 + getA(rok)) % 30;
e = (2*b + 4*c + 6*d + getB(rok)) % 7;
if ((d == 29 && e == 6) ||
(d == 28 && e == 6))
{
d-=7;
}
return d+e;
}
/**
* Oblicz date wielkanocy
*/
public static void main(String[] args) {
int rok;
int data;
System.out.println("Podaj rok (33-2499)");
rok = Console.readInt("");
if ((rok < 33) || (rok > 2499))
{
System.out.println("Podany rok nie jest w zakresie 33-2499");
return;
}
data = 22 + wielkanoc(rok);
if (data > 31)
{
System.out.println("Wielkanoc przypada " + (data%31)+ " kwietnia");
}
else
{
System.out.println("Wielkanoc przypada " + data + " marca");
}
}
}