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.
Data Wielkanocy - Gauss/Data_Wielkanocy_Gauss.cs:
// Obliczanie daty wielkanocy - algorytm Gaussa
// www.algorytm.org
// (c) 2008 by Tomasz Lubinski
using System;
namespace Data_Wielkanocy___Gauss
{
/// <summary>
/// Obliczanie daty wielkanocy - algorytm Gaussa.
/// </summary>
class Data_Wielkanocy
{
/// <summary>
/// Pobierz wartosc A z tabeli lat
/// </summary>
/// <param name="rok">rok dla ktorego pobrac wartosc z tabeli</param>
/// <returns>Wspolczynnik A dla podanego roku</returns>
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 */
}
/// <summary>
/// Pobierz wartosc B z tabeli lat
/// </summary>
/// <param name="rok">rok dla ktorego pobrac wartosc z tabeli</param>
/// <returns>Wspolczynnik B dla podanego roku</returns>
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 */
}
/// <summary>
/// oblicz ile dni po 22 marca przypada wielkanoc
/// </summary>
/// <param name="rok">Rok dla ktorego przeprowadzane sa obliczenia</param>
/// <returns>liczba dni po 22 marca, w ktore przypada wielkanoc</returns>
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;
}
/// <summary>
/// Oblicz date wielkanocy.
/// </summary>
[STAThread]
static void Main(string[] args)
{
int rok;
int data;
Console.WriteLine("Podaj rok (do 33-2499)");
rok = int.Parse(Console.ReadLine());
if ((rok < 33) || (rok > 2499))
{
Console.WriteLine("Podany rok nie jest w zakresie do 33-2499");
return;
}
data = 22 + wielkanoc(rok);
if (data > 31)
{
Console.WriteLine("Wielkanoc przypada " + (data%31)+ " kwietnia");
}
else
{
Console.WriteLine("Wielkanoc przypada " + data + " marca");
}
}
}
}

